多阶段构建中的最终输出镜像是什么?

90次阅读
没有评论

问题描述

在Docker多阶段构建中有一个关于最终输出镜像的疑问。以下是创建镜像的Dockerfile代码:

FROM diamol/base AS build-stage
RUN echo 'Building...' > /build.txt

FROM diamol/base AS test-stage
COPY --from=build-stage /build.txt /build.txt
RUN echo 'Testing...' >> /build.txt

FROM diamol/base
COPY --from=test-stage /build.txt /build.txt
RUN echo 'Done...' >> /build.txt

用户的理解是,最终镜像由diamol/base的多个层以及最后一个RUN命令后创建的层组成。以下图片展示了这个理解:
多阶段构建中的最终输出镜像是什么?

用户想要确认他的理解是否正确。

解决方案

最终镜像的构成

在这个多阶段构建的Dockerfile中,最终镜像将包含来自diamol/base的所有层,以及两个额外的层 – 一个是COPY命令创建的层,另一个是最后一个RUN命令创建的层。

构建过程详解

以下是这个Dockerfile的构建过程的详细解释:
1. 第一个阶段(build-stage):在这个阶段中,基础镜像为diamol/base。在此阶段,执行了一个RUN命令,将’Building…’写入/build.txt文件。这个阶段创建了一个新的镜像层。

  1. 第二个阶段(test-stage):在这个阶段中,基础镜像同样为diamol/base。使用COPY --from=build-stage命令将前一个阶段中生成的/build.txt文件复制到当前阶段,并在此基础上执行一个RUN命令,将’Testing…’添加到/build.txt文件中。这个阶段也创建了一个新的镜像层。

  2. 最终阶段:在这个阶段中,再次使用diamol/base作为基础镜像。使用COPY --from=test-stage命令将前一个阶段中生成的/build.txt文件复制到最终阶段,并在此基础上执行一个RUN命令,将’Done…’添加到/build.txt文件中。这个阶段同样创建了一个新的镜像层。

综上所述,最终的镜像将由diamol/base的所有层以及上述提到的三个额外的层组成。

验证

最终镜像的/build.txt文件将包含以下内容:

Building...
Testing...
Done...

因此,用户的理解是正确的。

以上就是关于多阶段构建中最终输出镜像的构成及解释。

请注意:本文中的操作适用于一般情况,具体情况可能因Docker版本、基础镜像等因素而有所不同。在进行实际操作时,请确保您的环境和需求与上述解决方案相符。

正文完