当您在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有助于在您进行大规模项目开发时,具有不同的开发阶段,这无疑有助于我们跟踪更改并有效进行。