Docker技术入门之---使用Dockerfile创建镜像(6)

  Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像。

Dockerfile指令说明

Dockerfile指令说明
指令 说明
FROM 指定所创建镜像的基础镜像
MAINTAINER 指定维护者信息
RUN 运行命令
CMD 指定启动容器时默认执行的命令
LABEL 指定生成镜像的元数据便签信息
EXPOSE 声明镜像内服务所监听的端口
ENV 指定环境变量
ADD 复制指定的<src>路径下的内容到容器中的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压到<dest>路径下
COPY 复制本地主机的<src>路径下的内容到镜像中的<dest>路径下;一般情况下推荐使用COPY,而不是ADD
ENTRYPOINT 指定镜像的默认入口
VOLUME 创建数据卷挂载点
USER 指定运行容器时的用户名或UID
WORKDIR 配置工作目录
ARG 指定镜像内使用的参数(例如版本号信息等)
ONBULLD 配置当所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令
STOPSIGNAL 容器退出的信号值
HEALTHCHECK                     如何进行监控检查
SHELL 指定使用shell时的默认shell类型

下面分别进行介绍;

1.FROM

  指定所创建镜像的基础镜像,如果本地不存在,则默认会去Docker Hub上下载指定镜像。

  格式为:

  FROM <image> 或

  FROM <image>:<tag> 或

  FROM <image>@<digest>

  任何Dockerfile中的第一条指令必须为FROM指令。并且,如果在同一个Dockerfile中创建多个镜像,可以使用多个FROM指令(每个镜像一次)。

2.MAINTAINER

  指定创建者信息,格式为MAINTAINER <name>.

  例如;

  MAINTAINER image_creator@docker.com

3.RUN

  运行指定命令。

  格式为:

  RUN <command>或

  RUN ["executable", "param1", "param2"]

4.CMD

  CMD指令用来指定启动容器时默认执行的命令。它支持三种格式:

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

   注意:每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时手动指定了运行的命令(作为run的参数),则会覆盖掉CMD指定的命令。

5.LABLE

  LABEL指令用来指定生成镜像的元数据标签信息。

  格式为:

    LABEL <key>=<value>

6.EXPOSE

  声明镜像内服务所监控的端口。

  格式为;

    EXPOSE <port>

  例如;

    EXPOSE 22 80 443

  注意:该指令只是起到声明作用,并不会自动完成端口映射。在启动容器时需要使用-P,Docker主机会自动分配一个宿主机的临时端口转发到指定的端口;使用-p,则可以具体指定那个宿主机的本地端口会映射过来。

7.ENV

  指定环境变量。

  格式为:

    ENV <key> <value> 或

    ENV <key>=<value>

  注意:指令指定的环境变量在运行时可以被覆盖掉,如docker run --env<key>=<value> built_image。

8.ADD

  该命令将复制指定的<src>路径下的内容到容器中的<dest>路径下。

  格式为:

   ADD <src> <dest>

  其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL,还可以是一个tar文件(如果是tar文件,会自动解压到<dest>路径下)。<dest>可以是镜像内的绝对路径,或者相对于工作目录WORKDIR的相对路径。

9.COPY

  COPY和ADD都有复制功能,但是COPY对tar包没有解压功能,这点需要注意。

  格式为:

    COPY <src> <dest>

  复制本地主机的<src> (为Dockerfile所在目录的相对路径,路径下的文件或目录)内容复制到镜像中的<dest>下。目录路径不存在时,会自动创建。

10.ENTRYPOINT

  ENTRYPOINT和CMD命令不同之处是,使用ENTRYPOINT构建镜像,Docker run镜像时,可以对命令进行追加。而CMD命令追加后,会覆盖Dockerfile中的CMD命令。

11.VOLUME

  创建一个数据卷挂载点。

  格式为:

    VOLUME ["/data"]

12.USER

  指定运行容器时的用户名或UID,后续的RUN等指令也会使用指定的用户身份。

  格式为:

    USER daemon。

13.WORKDIR

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

  格式为WORKDIR/path/to/workdir.

14.ARG

  指定一些镜像内使用的默认参数。

  格式为 ARG <name> [=<default value>]

15.ONBUILD

  配置所创建的镜像作为其他镜像的基础镜像。子镜像会继承父镜像中ONBUILD的内容。

  格式为:

    ONBUILD [INSTRUCTION]

16.STOPSIGNAL

  指定所创建的镜像启动的容器接收退出的信号值。例如:

  STOPSIGNAL signal

17.HEALTHCHECK

  配置所启动容器如何进行进行监控检查(即如何判断监控与否),自Docker1.12开始支持。

  格式有两种:

    HEALTHCHECK [OPTIONS] CMD command :根据所执行命令返回值是否为0来判断;

    HEALTHCHECK NONE;禁止基础镜像中的健康检查

    OPTION支持:

    --interval=DURATION(默认为:30s)过多久检查一次

    --timeout=DURATION(默认为:30s)每次检查等待结果的超时

    --retries=N(默认为;3)如果失败了,重试几次才最终确认失败。

 18.SHELL

  指定其他命令使用shell时的默认shell类型。

  默认值为["/bin/sh","-c"].

创建镜像

  编写完成Dockerfile之后,可以通过docker build命令来创建镜像。

  命令格式;

    docker build -f <dockerfile路径> -t <定义镜像名称:tag> .

不积跬步,无以至千里;不积小流,无以成江海。
原文地址:https://www.cnblogs.com/weidongliu/p/11175415.html