Docker的Dockerfile指令

Dockerfile指令

  • (1) CMD
    用于指定一个容器启动时要运行的命令.
    类似RUN
  • 指定要运行的特定命令
sudo docker run -i -t hiekay/static_web /bin/true
  • 使用CMD
CMD ["/bin/true"]
  • 给CMD指令传递参数
CMD ["/bin/bash", "-l"]

将-l 标志传递给/bin/bash命令.
docker run 命令可以覆盖CMD命令

  • (2) ENTRYPOINT
    ENTRYPOINT 和CMD命令类似,但是不容易在启动的时候被覆盖.
ENTRYPOINT ["/usr/sbin/nginx"]

指定参数

ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;" ]
  • (3) WORKDIR
    WORKDIR指令用来在从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT或者CMD指定的程序会在这个目录下执行.
    如 使用WORKDIR命令
WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp
ENTRYPOINT ["rackup"]

我们将目录切换为/opt/webapp/db 后运行bundle install , 之后将目录切换为/opt/webapp,最后设置ENTRYPOINT指令来启动rackup命令.

可以通过-w标志在运行时候覆盖工作目录

  • 覆盖工作目录
sudo docker run -ti -w /var/log ubuntu pwd

该命令会将容器内的工作目录设置为/var/log .

  • (4) ENV
    ENV指令用来在镜像构建过程中设置环境变量.
  • 在Dockerfile文件中设置环境变量
ENV RVM_PATH /home/rvm/
  • 为RUN指令设置前缀
 RUN gem install unicorn 
  • 添加ENV 前缀后执行
RVM_PATH=/home/rvm/ gem install unicorn
  • 在其他Dockerfile指令中使用环境变量
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR

在这里我们设定了一个新的环境变量TARGET_DIR, 并在WORKDIR中使用了它的值,因此实际上WORKDIR指令的值会被设置为/opt/app

  • (5) USER
    USER 指令用来指定该镜像会以什么用户去运行.
USER nginx 
  • 指定USER和GROUP的各种组合
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group

也可以在docker run 命令通过-u选项覆盖该指令的值.

  • (6) VOLUME
    VOLUME指令用来向基于镜像创建的容器添加卷.
  • 使用VOLUME指令
VOLUME ["/opt/project"]

这个指令会为基于此镜像创建的任何容器创建一个名为 /opt/project 的挂载点.

  • 使用VOLUME指令指定多个卷
VOLUME ["/opt/project", "/data" ]
  • (7)ADD
    ADD指令用来将构建环境下的文件和目录复制到镜像中.
    如:
ADD software.lic /opt/application/software.lic

解析:ADD指令将会将构建目录下的software.lic文件复制到镜像中的/opt/application/software.lic

  • 在ADD指令中使用URL作为文件源
ADD http://wordpress.org/latest.zip /root/wordpress.zip
  • 将归档文件作为ADD指令中的源文件
ADD latest.tar.gz /var/www/wordpress

会自动解压到目录下.

  • (8)COPY
    COPY指令非常类似ADD 不同是COPY只关心在构建上下文中复制本地文件,而不会去做文件提取和解压.
  • 使用COPY指令
COPY conf.d /etc/apache2

将 本地 conf.d目录中的文件复制到/etc/apache2目录中.

  • (9) ONBUILD
    ONBUILD 指令能为镜像添加触发器.当一个镜像被用做其他镜像的基础镜像时,该镜像中的触发器将会被执行.
  • 添加ONBUILD指令
ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make
  • 通过docker inspect 命令查看镜像中的ONBUILD命令
sudo docker inspect ID
  • 新的ONBUILD镜像Dockerfile
#Version: 0.0.1
FROM ubuntu:18.04
MAINTAINER hiekay "hikay5230@gmail.com"
RUN apt-get update
RUN apt-get install -y apache2
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apche2
ONBUILD ADD . /var/www/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D", "FOREGROUND"]
  • 构建apche2镜像
sudo docker build -t="hiekay/apache2" .

解析:在新构建的镜像中包含一条ONBUILD指令, 该指令将构建环境所在的目录下的内容全部添加到镜像中的/var/www/目录小.我们将这个Dockerfile 作为一个通用的Web应用程序的模板,可以基于这个模板来构建Web应用程序.

  • 构建webapp的Dockerfile
FROM hiekay/apache2
MAINTAINER hiekay "hikay5230@gmail.com"
ENV APPLICATION_NAME webapp
ENV ENVIRONMENT development
  • 构建webapp镜像
sudo docker build -t="hiekay/webapp" .

这个构建过程就会基于hiekay/apache2镜像,就会执行ADD指令. 因为ADD 指令就是在ONBUILD 触发器中指定的.

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

推荐阅读更多精彩内容

  • 一、Docker创建镜像的方式有两种: 一种通过commit的方式:把做了一系列操作的容器关闭,然后利用docke...
    jie0112阅读 3,834评论 0 3
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,503评论 0 120
  • 雄稚雄雉于飞,泄泄其羽。我之怀矣,自诒伊阻。雄雉于飞,下上其音。展矣君子,实劳我心。瞻彼日月,悠悠我思。道之云远,...
    微憧阅读 189评论 0 1
  • 01 阿青离开了木木,她就像仙鹤一般轻轻地飞去,直到消失在遥远的天际。 也许木木当初就不该认识阿青,纵使相逢应不识...
    长风18阅读 349评论 0 3
  • 小皇帝登基第三天,就想体察民情,便带随丛张三微服私访。来到熙熙攘攘的大街上,小皇帝东观西望,看什么都觉得有意思,十...
    沐玉声声阅读 794评论 0 3