使用一个 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 无疑有助于我们有效地跟踪变更和进度。


相关文章