Dockerfile 是一个用来构建 Docker 镜像的文本文件,它包含了一系列的指令和命令。当你运行 docker build
命令并指定 Dockerfile 时,Docker 会按照以下步骤执行 Dockerfile 中的指令:
-
基础镜像选择:Dockerfile 的第一条指令通常是一个
FROM
指令,它会指定一个基础镜像。这个基础镜像可以是官方镜像,也可以是你或者其他人创建的自定义镜像。 -
运行指令:Dockerfile 中的每一条指令都会在新的层上创建一个容器。指令包括:
RUN
:执行命令并提交结果。CMD
:容器启动时默认运行的命令。ENTRYPOINT
:配置容器启动时运行的命令。COPY
或ADD
:将文件和目录从宿主机复制到容器中。ENV
:设置环境变量。EXPOSE
:指定容器运行时暴露的端口。WORKDIR
:为后续的RUN
,CMD
,ENTRYPOINT
,COPY
和ADD
指令设置工作目录。VOLUME
:创建数据卷挂载点。USER
:设置运行命令的用户。ONBUILD
:配置当该镜像作为其他镜像的基础镜像时,所执行的指令。
-
执行指令:当你执行
docker build
命令时,Docker 会读取 Dockerfile 文件中的指令,并按顺序执行它们。每一条指令的执行都会在基础镜像的基础上创建一个新的层。 -
构建上下文:
docker build
命令可以指定一个构建上下文路径,这个路径下的所有文件都可以被用来构建镜像。例如,COPY
指令可以从构建上下文路径中复制文件到镜像中。 -
层缓存:Docker 会尽可能地重用已经存在的镜像层。如果在构建过程中没有改变某个层的内容,Docker 会使用缓存中的层,这样可以加快构建速度。
-
创建最终镜像:当 Dockerfile 中的所有指令都执行完毕后,Docker 会将所有层合并,并创建一个新的镜像。
-
存储镜像:构建完成后,新创建的镜像会被存储在你的 Docker 主机上的本地镜像库中。
通过这个过程,Dockerfile 允许用户创建可重复、可移植的容器镜像,这是 Docker 容器技术的一个重要特点。