在 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
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 指令,你不仅能精通容器构建,还能更好地管理和优化应用的部署过程。
——————————————————————————————————————————————————————————————————————————
无敌小马爱学习