dockerfile 笔记
FROM
指定基础镜像。每个 Dockerfile 必须以 FROM 指令开始(除了 scratch)
多个构建阶段
构建阶段
- 每个 FROM 指令开始一个新的构建阶段。
- 在每个阶段中,你可以执行各种操作(如安装依赖、复制文件、运行构建脚本等)。
最终阶段:
- 最终镜像是 Dockerfile 中最后一个 FROM 指令定义的阶段。
- 在最后一个阶段,你可以选择性地从之前的阶段复制文件或目录到最终镜像中。
3.只有最后一个阶段的文件和设置会被包含在最终生成的 Docker 镜像中。
LABEL
说明
添加元数据到镜像中,如维护者、版本等
执行时机
在镜像构建的任何阶段,都可以用来添加元数据
LABEL maintainer="John Doe <john.doe@example.com>"
MATNTAINER (已弃用)
说明
- 镜像是谁写的 名字+邮箱
- 指定镜像的维护者。已被 LABEL 替代。
执行时机
在镜像构建的初期,用于添加元数据。
示例
MAINTAINER John Doe <john.doe@example.com>
RUN
说明
执行命令并将其结果作为新层添加到镜像中。常用于安装软件或配置环境。
执行时机
在镜像构建过程中,通常用于安装软件、执行配置脚本等。
示例
RUN apt-get update && apt-get install -y \
curl \
git
CMD
说明
指定容器启动时默认执行的命令。CMD 提供了默认的命令,但可以在 docker run 时覆盖。
执行时机
当容器启动时,CMD 指定的命令会被执行。
示例
CMD ["node", "app.js"]
ENTRYPOINT
说明
指定容器启动时要执行的命令,并且不会被 docker run 的参数覆盖。CMD 可以用来提供默认参数。
执行时机
当容器启动时,ENTRYPOINT 指定的命令会被执行。
示例
ENTRYPOINT ["node", "app.js"]
COPY
说明
将文件或目录从主机复制到镜像的文件系统中。
执行时机
在镜像构建过程中,将本地文件或目录复制到镜像中。
示例
COPY . /app
ADD
说明
类似于 COPY,但支持从 URL 下载和自动解压归档文件。
执行时机
在镜像构建过程中,类似于 COPY,但可以处理 URL 和压缩文件。
示例
ADD http://example.com/file.tar.gz /app/
VOLUME
说明
创建一个挂载点,并将其标记为数据卷。数据卷可以在容器之间共享,并且可以在容器停止后保留数据。
执行时机 在容器运行时,定义数据卷的位置。
示例
VOLUME ["/data"]
WORKDIR
说明
设置工作目录。所有后续的 RUN, CMD, ENTRYPOINT, COPY, 和 ADD 指令将在该目录中运行。
执行时机
在镜像构建过程中,设置后续命令的工作目录。
示例
WORKDIR /app
USER
说明
设置运行容器时使用的用户。
执行时机
在容器运行时,设置执行命令的用户。
示例
USER node
EXPOSE
说明
声明容器监听的网络端口。此指令不会实际打开端口,只是用于文档目的和配置网络。
执行时机
在构建镜像时,声明容器的端口。
示例
EXPOSE 80
ENV
说明
设置环境变量。可以在容器运行时访问这些变量。
执行时机
在镜像构建过程中设置环境变量。
示例
ENV NODE_ENV=production
ARG
说明
定义在构建时可用的变量。ARG 变量的值仅在构建过程中有效。
执行时机
在镜像构建过程中,可以在 RUN 指令中使用。
示例
ARG APP_VERSION=1.0
ONBUILD
说明
指定当这个镜像被用作其他镜像的基础镜像时要执行的命令。
执行时机
当基于此镜像构建新的镜像时,ONBUILD 指令会被执行。
示例
ONBUILD RUN echo "This is an ONBUILD trigger"
STOPSIGNAL
说明
设置容器停止时使用的系统信号。默认为 SIGTERM。
执行时机
在容器运行时,当容器接收到停止信号时使用。
示例
STOPSIGNAL SIGINT
HEALTHCHECK
说明
设置健康检查,用于检查容器的健康状态。
执行时机
在容器运行时,定期检查容器的健康状态。
示例
HEALTHCHECK CMD curl --fail http://localhost/ || exit 1
SHELL
说明
更改 RUN 指令使用的默认 shell。
执行时机
在镜像构建过程中,指定 RUN 指令使用的 shell。
示例
SHELL ["/bin/bash", "-c"]
总结
每条指令在 Dockerfile 中都有特定的作用和执行时机。理解这些指令的执行顺序和作用,可以帮助你更有效地构建和优化 Docker 镜像。
1194

被折叠的 条评论
为什么被折叠?



