Dockerfile!18 个指令全面解析

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 "

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

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

无敌小马爱学习

相关推荐

什么是挂机宝,挂机宝能做什么?
bet3365

什么是挂机宝,挂机宝能做什么?

🗓️ 07-27 👁️ 3497
《阴阳师》斗技荣誉点有什么用 斗技荣誉点作用一览
365bet哪个国家的

《阴阳师》斗技荣誉点有什么用 斗技荣誉点作用一览

🗓️ 08-06 👁️ 9024
人物长廊
bet3365

人物长廊

🗓️ 07-08 👁️ 1214
抢票多久可以有结果?携程抢票多久才知道抢票结果
365bet哪个国家的

抢票多久可以有结果?携程抢票多久才知道抢票结果

🗓️ 07-03 👁️ 1043
苹果6s如何升级系统,轻松更新系统以提升使用体验(教你简单操作,升级苹果6s系统步骤一览无余)
NP905S3G笔记本电脑的性能和功能(探索NP905S3G笔记本电脑的卓越性能与多功能特点)