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