dockerfile指令包括配置指令(配置镜像信息)和操作指令(具体执行操作)两部分

    分类 指令 说明 格式
    配置命令 ARG 定义创建镜像过程中使用的变量 ARG [=]
    FROM 指定所创建的基础镜像 FROM 2.配置命令 - 图1:
    FROM 2.配置命令 - 图2:
    LABEL 为生成的镜像添加元数据标签信息 LABEL = = =
    EXPOSE 声明镜像内服务监听的端口 EXPOSE [/…]
    ENV 指定环境变量 ENV
    ENV =
    ENTRYPOINT 指定镜像的默认入口命令 ENTRYOINT [“executable”,”param1”,”param2”]:exec调用执行
    ENTRYOINT command param1 param2:shell中执行
    VOLUME 创建一个数据卷挂载点 VOLUME [“/data”]
    USER 指定运行容器时的用户名或UID USER daemon
    WORKDIR 配置工作目录 WORKDIR /path
    ONBUILD 创建子镜像时指定自动执行的操作命令 ONBUILD [INSTRUCTION]
    STOPSIGNAL 指定退出的信号值 STOPSIGNAL signal
    HEALTHCHECK 配置所启动容器如何进行健康检查 HEALTHCHECK [OPTIONS] CMD command:根据所执行命令返回值是否为0来判断;
    HEALTHCHECK NONE:禁止基础镜像中的健康检查。
    SHELL 指定默认shell类型 SHELL [“executable”, “parameters”]
    操作命令 RUN 运行指定命令 RUN 或RUN [“executable”, “param1”, “param2”]
    CMD 启动容器时指定默认执行的命令 CMD [“executable”, “param1”, “param2”]:相当于执行executable param1 param2,推荐方式;
    CMD command param1 param2:在默认的Shell中执行,提供给需要交互的应用;
    CMD [“param1”, “param2”]:提供给ENTRYPOINT的默认参数。
    ADD 添加内容到镜像 ADD
    COPY 复制内容到镜像 COPY
    1. ARG:定义创建镜像过程中使用的变量

    ARG [=]
    在docker build创建镜像的时候,使用 -build-arg [=]来指定参数,当镜像编译成功后,ARG指定的变量将不存在(ENV指定的变量将在镜像中保留)

    1. FROM:指定基础镜像

    FROM 2.配置命令 - 图3:
    FROM必须是第一条指令。如果在一个dockerfile中指定多个镜像时,使用多个FROM指令

    • 如果不以任何镜像为基础,那么写法为:

    FROM scratch。
    ARG VERSION=9.3
    FROM debian:${VERSION}

    1. LABEL:为镜像指定标签

    LABEL = = =

    • 一个Dockerfile种可以有多个LABEL,如下:

    LABEL version=”1.0”
    LABEL multi.label1=”value1” \
    multi.label2=”value2” \
    other=”value3”
    说明:LABEL会继承基础镜像种的LABEL,如遇到key相同,则值覆盖

    1. EXPOSE:声明镜像内服务监听的端口,

    EXPOSE [/…]
    该命令只是声明,并不会自动完成端口映射,如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数

    1. ENV:指定环境变量,后续会被RUN命令使用,在镜像启动的容器中也会存在。

    ENV
    ENV =
    两者的区别就是第一种是一次设置一个,第二种是一次设置多个
    指定的环境变量在运行时可以被覆盖掉,为一个环境变量多次赋值,也会更新

    1. ENTRYOINT:指定的镜像的默认入口命令

    该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的参数
    ENTRYOINT [“executable”,”param1”,”param2”]:exec调用执行
    ENTRYOINT command param1 param2:shell中执行
    此时,CMD指令指定值将作为根命令的参数
    每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。

    1. VOLUME:创建一个数据卷挂载点。

    VOLUME [“/data”]
    运行容器时可以从本地主机或其他容器挂载数据卷,一般用来存放数据库和需要保持的数据等。

    1. USER:指定运行容器时的用户名或UID

    USER daemon
    当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在Dockerfile中创建所需要的用户。
    例如:RUN groupadd -r postgres &&useradd —no-log-init -r -g postgres postgres
    要临时获取管理员权限可以使用gosu命令。

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

    WORKDIR /path/to/workdir
    可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之
    前命令指定的路径。例如:WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为/a/b/c。因此,为了避免出错,推荐WORKDIR指令中只使用绝对路径。

    1. ONBUILD:指定当基于所生成镜像创建子镜像时,自动执行的操作指令。

    ONBUILD [INSTRUCTION]。

    1. STOPSIGNAL

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

    1. HEALTHCHECK

    配置所启动容器如何进行健康检查(如何判断健康与否),自Docker 1.12开始支持。格式有两种:

    • HEALTHCHECK [OPTIONS] CMD command:根据所执行命令返回值是否为0来判断;
    • HEALTHCHECK NONE:禁止基础镜像中的健康检查。OPTION支持如下参数:
    • -interval=DURATION (default: 30s):过多久检查一次;
    • -timeout=DURATION (default: 30s):每次检查等待结果的超时;
    • -retries=N (default: 3):如果失败了,重试几次才最终确定失败。
    1. SHELL:指定其他命令使用shell时的默认shell类型

    SHELL [“executable”, “parameters”]
    默认值为[“/bin/sh”, “-c”]。