Docker-Dockerfile

Dockerfile

docker可以通过Dockerfile的内容来自动构建镜像。
Dockerfile是一个创建镜像使用的命令的文本文件,使用docker build命令也可以配置Dockerfile中相应的内容来构建镜像。

Dockerfile的指令选项:

  • FROM
  • MAINTAINER
  • RUN
  • CMD
  • EXPOSE
  • ENV
  • ADD
  • COPY
  • ENTRYPOINT
  • VOLUME
  • USER
  • WORKDIR
  • ONBUILD

一、FROM

用法:

FROM <image>​​
  • FROM指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。
  • FROM必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句开始。
  • FROM可以在一个 Dockerfile 中出现多次,即可在一个 Dockerfile 中创建多个镜像。
  • 如果FROM语句没有指定镜像标签,则默认使用latest标签。

二、MAINTAINER

用法:

 MAINTAINER <name> 

指定创建镜像的用户。

三、RUN

用法:

RUN yum install -y nginx        

RUN是在构建镜像时,在基础镜像(即:FROM指令引入的基础镜像源)上安装一些软件或者对基础镜像最一些操作。

注:
为保持可读性、方便理解、可维护性,可把长或者复杂的RUN语句使用\分隔符分成多行

例如:

FROM centos
MAINTAINER eugene
RUN yum install -y nginx
RUN echo 'hello world'>/index.html

以上两个RUN指令分别是在构建镜像时对基础镜像centos,安装了nginx和对index.html写入内容。

四、CMD

三种用法:

CMD ["executable","param1","param2"] #使用exec执行,推荐方式
CMD command param1 param2 #在/bin/sh中执行,提供给需要交互的应用
CMD ["param1","param2"] #提供给ENTRYPOINT的默认参数

CMD指令在Dockerfile中只能使用一次,如果存在多个,只有最后一个生效。
CMD是为了在启动容器的时候提供一个默认的命令执行选项。
CMD也可指定容器启动时需要运行的程序。
如果在启动容器的时候指定了运行命令,那么该命令会覆盖Dockerfile中的CMD指令。
例如:

CMD ['/bin/bash']

如果在启动docker时输入:

docker run -it ubuntu /bin/bash

那么此时docker run中的/bin/bash会替代Dockerfile中/bin/bash生效。
即,启动时可简输入:

docker run -it ubuntu

注:
CMD只有启动容器的时候才执行,在build的时候不执行;
RUN只有构建镜像的时候才执行,在run的时候不执行。

五、EXPOSE

用法:

EXPOSE <port> [<port>...]​#可配置多个端口号

告诉Docker服务端容器暴露的端口号,供互联系统使用。
在启动时使用docker run -p才生效。

六、ENV

用法:

ENV <key> <value>    #设置一个变量
ENV <key>=<value>    #设置多个变量​

设置一个/多个环节变量,以供后续RUN指令(即在对基础镜像做操作时)使用,变量在容器运行时保留。
例如:

ENV NG nginx
ENV indexName index
RUN yum install -y $NG #引用NG变量
RUN echo 'hello world'>/$indexName.html   ​

七、ADD

用法:

ADD <src> ... <dest>​

ADD复制本地主机文件、目录或者远程文件urls到容器的指定路径中。
例如:

ADD http://xxx.com/xxx.png /tmp/xxx.png ​

以上表示将xxx.png复制到容器的tmp目录下。
ADD能自动解压。

注:
如果源路径的资源发生变化,则该ADD指令将使Docker Cache失效,Dockerfile中后续的所有指令都不能使用缓存;
因此尽量将ADD指令放在Dockerfile的最后。

八、COPY

用法:

COPY <src>... <dest>

COPY是复制文件或者目录到容器指定位置。
与ADD的唯一区别是,COPY不能指定远程文件urls。

九、ENTRYPOINT

两种用法:

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2 #(shell中执行)​

ENTRYPOINT指令效果与CMD类似,即都是在容器启动时有效,指定一个程序在容器启动时运行。
CMD与ENTRYPOINT最大的不同之处,就是在于用法上。
例如:

FROM centos
MAINTAINER eugene
RUN yum install -y nginx RUN echo 'hello world' > /usr/share/nginx/html/index.html
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx"]​# 指定容器在启动时运行nginx

注:
不可被docker run提供的参数覆盖;
每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。

十、USER

用法:

USER daemon​

指定容器运行时的用户名或uid。

十一、WORKDIR

用法:

WORKDIR /path # 也可使用ENV设置的变量

为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。

十二、ONBUILD

用法:

ONBUILD [instruction]

配置当当前所创建的镜像作为其它镜像的基础镜像时,所要执行的指令。

例如:

ONBUILD ADD http://xxx.com/xxx.png /tmp/xxx.png  ​

即,当新的Dockerfile将以上镜像作为基础镜像时,会执行ADD指令。

十三、VOLUME

用法:

VOLUME ['/data']​

创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

  • volume在容器创建时就初始化,在容器运行时就可以使用其中的文件

  • volume能在不同的容器之间共享和重用

  • 对volume中的数据的操作会马上生效

  • 对volume中数据操作不会影响到镜像本身

  • volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除

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

推荐阅读更多精彩内容