Dockerfile!18 个指令全面解析
在 Docker 容器化技术中,Dockerfile 是构建镜像的核心文件。它包含了一系列的指令,这些指令定义了镜像的构建流程以及容器启动时的行为。
1. FROM
- 指定您正在构建的基础镜像,这是执行的第一个命令,所有其他命令都会在此基础上执行。
FROM
前面可以有一个或多个ARG
指令,这些指令声明在 Dockerfile 中FROM
行中使用的参数。
语法
FROM <镜像名称>
示例:
# 基础镜像为 ubuntu:22.04 FROM ubuntu:22.04
2. ADD
- 用于添加本地或远程文件和目录到镜像中,支持 自动解压 和 远程 URL 下载。
语法
ADD <源> <目标>
示例:
# 自动解压 ADD ./localfile /app/localfile # 远程 URL 下载 ADD https://example.com/file.tar.gz /app/
3. ARG
- 用于指定在构建时传递的变量。这些变量只能在
FROM
之前定义。
语法
ARG <变量名>[=<默认值>]
示例:
# 版本号,例:复制代码 ARG version=1.0
4. CMD
- 指定容器启动时默认执行的命令。可以被
docker run
命令覆盖。
语法
CMD ["executable", "param1", "param2"]
或
CMD ["param1", "param2"] (如果 ENTRYPOINT 已经指定)
示例:
# 执行 python app.py CMD ["python", "app.py"]
5. COPY
- 将本地文件和目录复制到镜像中的指定路径。
语法
COPY <源> <目标>
示例:
COPY ./src /app/src
6. ENTRYPOINT
- 指定容器启动时的主命令,不会被
docker run
参数覆盖,通常与CMD
配合使用。
语法
ENTRYPOINT ["executable", "param1", "param2"]
示例:
ENTRYPOINT ["python"]
7. ENV
- 设置环境变量,容器中的所有进程都可以访问这些变量。
语法
ENV=
示例:
ENV APP_VERSION 1.0
8. EXPOSE
- 声明容器内应用程序监听的端口。不会自动开启端口,只是给使用者提供信息。
语法
EXPOSE
示例:
# 暴露容器8080端口 EXPOSE 8080
9. HEALTHCHECK
- 定义启动后检查容器健康状况的命令。如果健康检查失败,容器将被标记为不健康。
语法
HEALTHCHECK --interval=<间隔时间> --timeout=<超时时间> --retries=<次数> CMD <检查命令>
示例:
# 健康检查 间隔5分钟 超时3秒 执行命令 curl本地8080端口 如果失败 则 退出 HEALTHCHECK --interval=5m --timeout=3s CMD curl --fail http://localhost:8080/ || exit 1
10. LABEL
- 向镜像中添加元数据,通常用于提供信息,例如作者、版本等。
语法
LABEL=
示例:
LABEL version="1.0" maintainer="me@example.com"
# 11. MAINTAINER
- 指定镜像的作者信息。这个指令已经不推荐使用,建议用
LABEL
代替。
语法
MAINTAINER <姓名或邮箱>
示例:
MAINTAINER "John Doe <john@example.com>"
12. ONBUILD
- 指定在构建过程中使用该镜像时执行的命令,通常用于构建基础镜像时。
语法
ONBUILD <指令>
示例:
ONBUILD RUN echo "This is an ONBUILD trigger."
13. RUN
- 执行指定的命令,通常用于安装包或做其他构建时操作。
语法
RUN <命令>
示例:
RUN apt-get update && apt-get install -y python3
14. SHELL
- 设置镜像使用的默认 shell 类型和参数。
语法
SHELL ["", "<参数1>", "<参数2>"]
示例:
SHELL ["/bin/bash", "-c"]
15. STOPSIGNAL
- 指定发送到容器的信号,用于在容器停止时优雅地退出。
语法
STOPSIGNAL <信号>
示例:
STOPSIGNAL SIGTERM
16. USER
- 设置容器中执行命令的用户和组 ID。
语法
USER <用户>[:<组>]
示例:
USER nobody
17. VOLUME
- 在容器中创建挂载点,用于持久化存储。
语法
VOLUME ["/路径1", "/路径2"]
示例:
VOLUME ["/data", "/logs"]
18. WORKDIR
- 设置工作目录,所有后续的命令都会在该目录下执行。
语法
WORKDIR <路径>
示例:
WORKDIR /app
总结
初始:ARG、FROM、ONBUILD
镜像:USER、WORKDIR、ENV、LABEL
文件:ADD、COPY、RUN、CMD、ENTRYPOINT
容器:EXPOSE、VOLUME、SHELL
健康检查:HEALTHEHECK
退出:STOPSIGNAL
以上就是 Dockerfile 中常见的 18 个指令的详细介绍。从基本的
FROM
和 COPY
到高级的 HEALTHCHECK
和 USER
,每一个指令都有其特定的作用,合理使用这些指令可以帮助我们更高效地构建 Docker 镜像,简化容器化应用的管理流程。通过掌握这些 Dockerfile 指令,你不仅能精通容器构建,还能更好地管理和优化应用的部署过程。
——————————————————————————————————————————————————————————————————————————
无敌小马爱学习