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

——————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2024-12-18 22:43  马俊南  阅读(36)  评论(0编辑  收藏  举报