使用一个 dockerfile 合并多个镜像
dockeroperating systemopen source更新于 2026/1/6 5:52:17
在 docker 上开发大型项目时,需要经历开发周期的多个阶段。为每个周期(例如构建、发布、测试等)维护不同的 dockerfile 会耗费大量资源,并且效率低下。
在 docker 的后续版本中,我们可以使用两个特殊命令(FROM 和 AS)来创建所谓的多阶段 Dockerfile。
我们可以在 Dockerfile 中使用多个 FROM 命令与 AS 命令组合使用,其中最后一个 FROM 命令将实际构建镜像。在此之前的所有 FROM 命令都会创建定期缓存的中间镜像。
AS 命令与 FROM 命令一起使用时,可以为中间镜像提供一个虚拟名称。
为了便于理解,我们来看下面的示例。
#我们创建一个基础镜像。 FROM ubuntu AS base #安装软件包 RUN apt-get -y update RUN apt-get -y vim #创建中间镜像层依赖项 FROM base AS dependencies #使用需求文件安装依赖项 RUN pip3 install -r requirements.txt #创建用于测试的中间镜像层 FROM dependencies AS test #设置工作目录 WORKDIR /usr/src/app COPY . . #通过运行测试文件构建最终镜像 CMD [“python3”, “./test.py”]
正如我们在上面的dockerfile中看到的,我们创建了两个中间镜像,分别名为基础镜像和依赖镜像。基础中间镜像是一个Ubuntu镜像,我们对其进行了更新并在其中安装了vim编辑器。使用该基础镜像,为了创建一个名为依赖镜像的中间镜像,我们为项目安装了某些依赖项,这些依赖项可以在名为requirements.txt的单独文件中定义。最终镜像由测试镜像层创建,我们在测试镜像层中定义工作目录、复制文件并运行test.py文件。
构建镜像的顺序是基础镜像、依赖镜像,最后是测试镜像。我们还必须注意,如果任何中间镜像构建失败,则无法创建最终镜像。
因此,当您进行包含多个开发阶段的大型项目开发时,创建多阶段 dockerfile 无疑有助于我们有效地跟踪变更和进度。

