Docker镜像制作进阶

Dockerfile指令

  • ** CMD **
    用于指定一个容器启动时要运行的命令。
    CMD["/bin/bash","-l"]
    Docker 推荐使用数组的语法设置要执行的命令。在Dockerfile中只能指定一条CMD命令.如果指定了多条,也只有最后一条被使用。

docker run命令可以覆盖CMD指令。

  • ENTRYPOINT

这个指令与CMD指令类似,但是这个指令不会轻易被docker run覆盖。因此可以将这两个命令组合起来使用。
见如下:

Paste_Image.png

在原来基础上加了这两条命令

如果启动时,不指定命令,nginx则默认使用 -h方式启动 (用来显示Nginx的帮助信息)
如果指定了,则使用指定命令
docker run -d -p 80 keithfu/static_web -g "daemon off;"
如果确实需要,可以通过--entrypoint标志覆盖ENTRYPOINT指令

  • WORKDIR
    该指令用来从镜像创建一个新容器时,在容器内设置一个工作目录。ENTRYPOINT和CMD命令指定的程序会在这个目录下执行
WORKDIR /opt/webapp/db
RUN bundle install
wORKDIR /opt/webapp
ENTRYPOINT ["rackup"]

可以使用 -w标识在运行时覆盖工作目录
docker run -ti -w /var/log ubuntu pwd

  • ENV
    用来设置环境变量,可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样
    我们可以在其它命令中直接使用这些环境变量
ENV TARGET_DIR=/opt/app
WORKDIR $TARGET_DIR
  • USER
    基于该镜像启动的容器会以nginx 用户的身份来运行。我们可以指定用户名或UID以及组或GID,也可是两者的组合。
USER user
USER user:group
USER uid
USER uid:gid
USER uid:group
...

可以通过-u选项来覆盖

  • VOLUME
    用来基于镜像创建的容器添加卷。一个卷是可以存在于一个或者多个容器内的特定目录,这个目录可以绕过联合文件系统,并提供如下共享数据或者对数据进行持久化功能。
    • 卷可以在容器间共享和重用。
    • 一个容器可以不是必须和其它容器共享卷
    • 对卷的修性是立时生效的
    • 对卷的修性不会对镜像产生影响
    • 卷会一直存在直到没有任何容器再使用它。
      卷的功能让我们可以将数据(如源代码)、数据库或者其它内容添加到镜像中而不是将这些内容提交到镜像中,并且允许我们在多个容器间共享这些内容。
      我们可以通过数组的方式指定多个卷。(后续介绍)
  • ADD
    该指令用来将构建环境下的文件和目录复制到镜像中。需要指定源文件位置和目的文件位置两个参数
    ADD software.lic /opt/application/software.lic
    在ADD文件时,Docker通过目的地址参数末尾的字符来判断文件源 目录还是文件。以/结尾就是目录,不以/结尾则认为是文件

文件源源也可以是URL
ADD http://a.com/latest.zip /root/wp.zip

如果ADD在处理本地归档文件时(tar archive,gzip,bzip2,xz),Docker 会自动针归档文件解开
ADD latest.tar.gz /var/www/wordpress/
如果目的位置存在了同名的文件或者目录,那们不会被覆盖。

ADD指令使用构建缓存变得无效。该指令后续的指令都不能继续使用之前的构建缓存。

  • COPY
    类似于ADD COPY只关心构建上下文复本地文件,而不会关心提取和解压的工作,且文件必须是与当前构建环境相对的文件或目录,要Dockerfile同一个目录下

  • ONBUILD
    该指令能为镜像添加触发器(trigger)。当一个镜像被用作其镜像的基础镜像时,会被执行。触发器可以是任何构建指令

ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make

ONBUILD 会按照你镜像中指定的顺序执行,并且只能被继承一次(也就是只能在子镜像中执行,而不会在孙子镜像中执行)

删除镜像

使用docker rmi 命令

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,468评论 0 120
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,734评论 0 7
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,720评论 1 21
  • 代码 模式总结 观察者模式强调的是松耦合,通过程序之间的强约定弱依赖实现通用场景的<发布/订阅>模型。 核心理念 ...
    极光火狐狸阅读 288评论 0 0
  • 人们时常在想,我为什么来到了这个世界,我来到这个世界是为了什么?人们甚至会抱怨,我为什么不是谁谁谁的儿子,我为什么...
    墨言Aory阅读 337评论 0 0