使用单个Dockerfile组合多个镜像


在Docker上进行大型项目开发时,需要经历开发周期的各个阶段。为每个阶段(例如构建、发布、测试等)维护不同的Dockerfile会消耗大量资源,并且在生产力方面效率低下。

在较新的Docker版本中,可以使用多阶段Dockerfile,借助两个特定的命令——FROM和AS。

我们可以在Dockerfile中组合使用多个FROM命令和AS命令,其中最后一个FROM命令将实际构建镜像。之前的所有FROM命令都将创建中间镜像,这些中间镜像会定期缓存。

当AS命令与FROM命令一起使用时,可以为中间镜像提供虚拟名称。

让我们考虑下面的例子以便更好地理解。

#We create a base image.
FROM ubuntu AS base

#Install packages
RUN apt-get -y update
RUN apt-get -y vim

#Create intermediate image layer Dependencies
FROM base AS dependencies

#Install dependencies using a requirements file
RUN pip3 install -r requirements.txt

#Create intermediate image layer for Testing
FROM dependencies AS test

#Set your work directory
WORKDIR /usr/src/app

COPY . .

#Build the final image by running the test file
CMD [“python3”, “./test.py”]

正如我们在上面的Dockerfile中看到的,我们创建了两个名为base和dependencies的中间镜像。base中间镜像是一个ubuntu镜像,我们在其中更新并安装vim编辑器。使用该base镜像,我们创建一个名为dependencies的中间镜像,安装项目所需的某些依赖项,这些依赖项可以在名为requirements.txt的单独文件中定义。最终镜像由test镜像层创建,我们在其中定义工作目录、复制文件并运行test.py文件。

镜像构建的顺序是base、dependencies,最后是test。我们还必须注意,如果任何中间镜像构建失败,则无法创建最终镜像。

因此,在进行具有各种开发阶段的大型项目开发时,创建多阶段Dockerfile有助于我们高效地跟踪更改和进度。

更新于:2020年10月1日

4K+浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告