Docker容器中学习系列十一~一个利器DockerFile指令详解

在我们学习容器中我们往往都会用到DockerFile这个文件,在前两篇的文章中,我们也着重的使用了DockerFile这个文件用来构建我们使用的容器,这样可以用来构建我们自己需要的容器,方便使用和操作。今天我们就具体的来学习下DockerFile需要用到的命令参数。


命令参数

命令参数

从途中我们可以看到这些需要我们使用的命令。现在我们具体的来参考下怎么实现。

FROM

该命令必须放置在我们命令的第一层,首先就会使用该命令。当然一个DokcerFile中存在多个镜像时,可以多次使用FROM命令
语法:

FROM <image> /FROM <image>:<tag>  //tag没有的话默认是latest
FROM ubuntu

MAINTAINER

用来制定维护者信息,也可以是作者信息

语法: 
MAINTAINER  <name> 
MAINTAINER   dockerUser fqi@email.com

RUN

用来运行我们所需要的指令。该命令是构建容器时运行的命令以及提交命令行的结果

语法:
RUN command   //该命令是 直接跟shell命令个 在linux系统中默认 /bin/sh -C  windows中默认是 cmd /S /C  
RUN [“executable”,“param1”,“param2”] 函数调用 都一个参数类似可执行文件,后面是参数 使用exec 来执行的 
总的来说命令较长可以使用 \ 来换行。

RUN  [“/bin/bash”, “-c”, “echo hello”]。
RUN apt-get update && apt-get install -y x11vnc xvfb firefox

CMD

用法是启动容器时默认执行的命令。启动容器需要执行的参数,并且一个DockerFile文件中最好只有一个该命令参数。多个话会把最后一个作为最终的目标

1. CMD ["executable","param1","param2"]
2. CMD ["param1","param2"]
3. CMD command param1 param2
参数执行与RUN 运行类似。
引号要使用是双引号,原因是参数传递后 docker用来解析为一个json array

LABEL

构建生成的镜像的元数据标签,一个容器可以有多个LABEL文件。

例子参考:
LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"

EXPOSE

声明镜像内服务所需要监听的端口。暴露给外部使用。但是在使用的时候还需要加上-P 参数映射或者使用-p映射为指定端口

EXPOSE 22 
EXPOSE 22 8080 9292 

ENV

功能为设置环境变量,可以让其他命令来使用此参数。并且还有使用docker inspect 查看这个环境变量值。

语法 : 
1. ENV <key> <value>
2. ENV <key>=<value> ...
ENV JAVA_HOME /path/java/src
在使用的时候就可以使用

ADD

复制命令,将文件复制到镜像中去,

语法:
1. ADD <src>... <dest>  
2. ADD ["<src>",... "<dest>"]
其中 src 可以使本地文件也可以是压缩文件还可以是url  ,dest  是容器内部的绝对路径,也可以是相对于工作目录的相对路径。
ADD test relativeDir/ 
ADD test /relativeDir
ADD http://example.com/foobar /
如果<src>是一个文件夹了,复制整个目录的内容,包括文件系统元数据

COPY

也是复制命令,不过该命令只能复制本地文件。

1. COPY <src>... <dest>
2. COPY ["<src>",... "<dest>"]

ENTRYPOINT

用来指定镜像的默认入口,也是启动的默认命令。

语法:
1. ENTRYPOINT ["executable", "param1", "param2"]
2. ENTRYPOINT command param1 param2

从命令来看与我们的CMD命令十分的相似,但是他们两者有不同的区别。

  • 首先ENTRYPOINT不会被运行的command命令覆盖,CMD指定的命令会被覆盖
  • 如果两者同时存在,当CMD命令不是一个完整的执行命令时,那么CMD的命令参数会被作为ENTRYPOINT的参数,只一个完整的命令时,谁在最后谁执行。

VOLUME

创建数据卷的挂载点,将容器内的文件或者其他容器中的文件挂载在该容器中。

语法:
VOLUME ["目录"]
1. VOLUME ["/home/log/"]
2. VOLUME /home/log
3. VOLUME /home/log /home/db

需要使用数据进行持久化需要该操作。容器使用的是AUFS文件系统。容器关闭的时候数据会丢失,那么数据持久化 就需要使用挂载点来操作。还有一点需要注意的是该命令创建的挂载点是无法指定主机上的目录,自动生成的。

USER

用来指定运行容器时的用户名或者UID

1. USER daemo
2. USER UID

WORKDIR

用来配置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效,如果目录不存在会创建,也可以设置多次。切换目录的操作相当于是Linux系统中的cd

WORKDIR /home/ruiqi
WORKDIR data
RUN pwd
pwd执行的结果是//home/ruiqi/data
当然如果存在环境变量的值也可以 解析环境变量
ENV PATH /path
WORKDIR $PATH/ruiqi
RUN pwd 
pwd 的显示结果是/path/ruiqi

ARG

用来指定一些参数信息。当然该参数可以被 build时使用 --build-arg user =asdasda 指定参数

语法:
ARG name = value
ARG user = fruiqi
ARG passwd =12313

ONBUILD

当该镜像作为其他镜像的基础镜像时,所设定的命令才会执行。

语法:
ONBUILD [INSTRUCTION]
比如 ONBUILD  RUN ls 

STOPSIGNAL

容器退出的信号值,当容器退出的时候给系统发送什么样的指令

STOPSIGNAL signal

HEALTHCHECK

进行容器的健康检查。

语法有两种:

1. HEALTHCHECK [OPTIONS] CMD command
2. HEALTHCHECK NONE
第一个的功能是在容器内部运行一个命令来检查容器的健康状况

第二个的功能是在基础镜像中取消健康检查命令

[OPTIONS]的选项支持以下三中选项:

  • --interval=DURATION 两次检查默认的时间间隔为30秒

  • --timeout=DURATION 健康检查命令运行超时时长,默认30秒

  • --retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy,默认次数是3

注意:

HEALTHCHECK命令只能出现一次,如果出现了多次,只有最后一个生效。

CMD后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:

0: success - 表示容器是健康的

1: unhealthy - 表示容器已经不能工作了

2: reserved - 保留值

例子:

HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1
  

健康检查命令是:curl -f http://localhost/ || exit 1

两次检查的间隔时间是5秒

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

推荐阅读更多精彩内容