#docker
#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 и слоя, созданного после последней команды ЗАПУСКА, как показано на рисунке ниже:
Правильно ли я понимаю?
Комментарии:
1. Умножение опубликовано на devops.stackexchange.com/q/12268/23883 .
Ответ №1:
Схема верна, поскольку каждый шаг в многоступенчатой сборке выполняется поверх diamol/base
. На каждом шаге build.txt
файл копируется и изменяется. Вы можете проверить содержимое файла, запустив контейнер из конечного изображения (например foo
):
$ docker build -t foo .
$ docker run --rm -it --entrypoint=cat foo build.txt
Building...
Testing...
Done...
Ответ №2:
RUN
COPY
, ADD
создайте слои, так что технически у вас есть 3 слоя:
- начальный
diamol/base
слой - один слой сверху, содержащий скопированное
build.txt
- и последний слой, в котором вы добавляете done в текстовый файл.
Вы можете самостоятельно просмотреть изображение, чтобы проверить слои, созданные в процессе сборки:
docker inspect <image-ID> --format '{{json .RootFS.Layers}}' | python -m json.tool
Два промежуточных этапа создают свои собственные изображения, которые вы можете видеть в docker image ls
без имени и тега <none>:<none>