使用一个dockerfile合并多个图像

当您在docker上处理大型项目时,需要经历开发周期的某些阶段。为每个周期(例如构建,发布,测试等)维护一个不同的dockerfile会占用大量资源,并且在生产力方面效率极低。

在更高版本的docker中,它允许我们借助两个特殊命令-FROM和AS使用所谓的多阶段Dockerfile。

我们可以在Dockerfile中将多个FROM命令与AS命令结合使用,其中最后一个FROM命令将实际构建映像。在此之前的所有FROM命令将导致创建定期缓存的中间映像。

与FROM命令一起使用时,AS命令允许我们为中间映像提供虚拟名称。

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

#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和依赖性。基本的中间映像是ubuntu映像,我们对其进行更新并在其中安装vim编辑器。使用该基础映像来创建一个称为依赖关系的中间映像,我们为项目安装了某些依赖关系,我们可以在一个名为requirements.txt的单独文件中对其进行定义。最终图像由测试图像层创建,我们在其中定义工作目录,复制文件并运行test.py文件。

构建映像的顺序是基础,然后是依存关系,最后是测试。我们还必须注意,如果任何中间映像都无法构建,则无法创建最终映像。

因此,创建多阶段dockerfile有助于在您进行大规模项目开发时,具有不同的开发阶段,这无疑有助于我们跟踪更改并有效进行。