下面是创建映像的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 /碱层和最后一个RUN命令之后创建的层组成,如下图所示:
我的理解正确吗?
答案 0 :(得分:2)
该图是正确的,因为多阶段构建的每个步骤都建立在diamol/base
之上。
在每个步骤中,build.txt
文件将被复制并修改。您可以通过运行最终映像(例如foo
)中的容器来验证文件的内容:
$ docker build -t foo .
$ docker run --rm -it --entrypoint=cat foo build.txt
Building...
Testing...
Done...
答案 1 :(得分:0)
RUN
,COPY
,ADD
创建图层,因此从技术上讲,您有3个图层:
diamol/base
层build.txt
您可以自己检查图像以检查在构建过程中创建的图层:
docker inspect <image-ID> --format '{{json .RootFS.Layers}}' | python -m json.tool
两个中间阶段确实创建了自己的图像,您可以在docker image ls
中看到它们,它们没有名称和标签<none>:<none>