Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。
Dockerfile 由一行行命令语句组成,并且支持以 # 开头注释行。
Dockerfile 一般分为四部分: 基础镜像信息,维护者信息、镜像操作指令和容器启动时执行指令。
指令
FROM
格式: FROM <image> 或者 FROM <image>:<tag>
Dockerfile 的第一条指令必须是 FROM
MAINTAINER
格式: MAINTAINER <name>,指定维护者信息
USER
格式: USER <username>
指定容器内进程使用的用户名或 UID, 当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户。
WORKDIR
格式: WORKDIR /path/to/workdir
指定容器的当前工作路径,为后续的 RUN、CMD、ENTRYPINT 指令配置工作路径
ENV
格式: ENV <key> <value> 指定一个环境变量,可以被 RUN 指令使用,并在容器运行时保持,例如:
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-${PG_VERSION}.tar.gz | tar -xzC /usr/src && ...
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
ADD
格式: ADD <src> <dest>
该指令将复制指定的 <src> 到容器中的 <dest>. 其中 <src> 可以是 Dockerfile 所在目录的一个相对路径(文件和目录);也可以是一个 url;还可以是一个 tar 文件(自动解压为目录)
RUN
格式: RUN <command> 或者 RUN ["executable", "param1", "param2"]
每条 RUN 指令将在当前镜像的基础上执行指定的命令,并提交为新镜像。当命令过长时可以使用 \
换行。
EXPOSE
格式: EXPOSE <port> [<port> ...]
示例:
EXPOSE 22 80 443
EXPOSE 指令用于暴露容器端口。在启动容器时需要通过 -P, Docker 服务会随机分配一个端口转发到指定的端口;使用 -p, 可以手动指定具体本地的端口与容器端口映射。
VOLUME
格式: VOLUME ["/data"]
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放需要持久化的数据等。
CMD
格式:
- CMD ["executable", "param1", "param2"] 使用 exec 执行,推荐方式
- CMD command param1 param2 ,在 /bin/sh 中执行
- CMD ["param1", "param2"] 提供给 ENTRYPOINT 的默认参数
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 指令。如果指定多条,只有最后一条生效被执行。
如果在启动容器时指定了运行的命令,会覆盖掉 CMD 指定的命令。
ENTRYPOINT
格式:
- ENTRYPOINT ["executable", "param1", "param2"]
- ENTRYPOINT command param1 param2
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖.
每个 Dockerfile 中只能有一个 ENTRYPOINT,指定多个 ENTRYPOINT 时,只有最一个有效。