本文共 1785 字,大约阅读时间需要 5 分钟。
docker 的系统学习可以看我这篇博文,如果你想深入了解docker系统,推荐阅读我的另一篇博文。
Dockerfile 是一个用于构建 docker 镜像的文本文件,它通过一系列指令逐步构建镜像。镜像的构建过程从基础镜像开始,每条指令都会生成新的镜像层,最终形成完整的镜像文件。
Dockerfile 通常分为几个部分:
每条指令都以 # 开头的注释将被忽略,注释的内容不会被镜像构建过程执行。
指定镜像的基础镜像,且必须是 Dockerfile 中第一条非注释指令。如果没有指定基础镜像,默认使用 scratch。
语法:
FROM# 或者FROM
:
# 或者FROM ![]()
可以是镜像名称或镜像 ID。如果指定了
每次使用 FROM 指令时,只需记录之前镜像的 ID。
为镜像指定标签,key 和 value 可以重复,但建议每个 key 只使用一次。标签会继承基础镜像的标签,若 key 相同,值会覆盖。
语法:
LABEL key = value# 或者LABEL key1 = value1 \ key2 = value2
设置环境变量。
语法:
ENV key = value# 或者ENV key1 = value1 \ key2 = value2
将文件或目录复制到镜像中。如果源是 URL,会类似于 wget下载。如果源是多个文件,目标必须是目录。
语法:
ADD src/ /dest/
类似于 ADD,但只能复制本地文件。
语法:
COPY src/ /dest/
运行命令,构建镜像时会缓存结果。可以手动设置 --no-cache=true 来禁用缓存。
语法:
RUN command
容器启动时执行的命令。CMD 可以是 shell 命令或可执行文件。
语法:
CMD ["executable", "param1", "param2"]# 或者CMD command param1 param2
容器启动时默认执行的命令。
语法:
ENTRYPOINT ["executable", "param1", "param2"]# 或者ENTRYPOINT command param1 param2
设置容器启动时的用户。需要确保容器内有该用户权限。
语法:
USER username# 或者USER uid
实现宿主机目录到容器的挂载。AUFS 不支持持久化数据,需手动指定。
语法:
VOLUME ["/data/"]
设置工作目录,对 RUNNING 指令等生效。不存在则创建。
语法:
WORKDIR /path/to/workdir
用于镜像构建时触发其他镜像构建。
语法:
ONBUILD RUN ls -l
暴露容器中的端口。需要在运行时使用 -p 或 -P 将端口映射到主机。
语法:
EXPOSE 8080
设置容器停止时发送的信号,默认为 15。
语法:
STOPSIGNAL signal
$varname ${varname} ${varname:-default value} ${varname:+default value} 我的另一篇博文详细讲解了 docker 实战经验。
转载地址:http://xtgbz.baihongyu.com/