Докер: многоступенчатая сборка приводит к созданию нескольких образов
Учитывая этот небольшой пример многоступенчатой сборки
FROM node:10 AS ui-build
WORKDIR /usr/src/app
FROM node:10 AS server-build
WORKDIR /root/
EXPOSE 3070
ENTRYPOINT ["node"]
CMD ["index.js"]
почему это приводит к 3 изображениям в моей локальной файловой системе?
"<none>";"<none>";"58d63982fbef";"2020-04-15 17:53:14";"912MB"
"node";"10";"bd83fcefc19d";"2020-04-14 01:32:21";"912MB"
"test";"latest";"3913dd4d03b6";"2020-04-15 17:53:15";"912MB"
Я ожидал два образа: базовый образ и образ для сборки сервера. Я использовал стандартную команду сборки docker, т.е.
docker build -t test .
Итак, какая из частей изображения отсутствует, а какая тестовая?
я запутался
1 ответ
Каждый блок в Dockerfile, начиная с FROM
линия создает новое изображение. Если вы используетеdocker build -t
опция, только последняя стадия будет помечена указанным вами именем; остальные блоки будут отображаться как<none>
в таких местах, как docker images
выход.
# node:10 is a base image
# Not the final image, will appear as <none>:<none>
FROM node:10 AS ui-build
...
# The final image, will appear as test:latest (`docker build -t` option)
FROM node:10 AS server-build
...
Иногда вы будете видеть файлы Dockerfiles, в которых базовый образ повторно используется на более поздних этапах сборки, и там он вообще не будет отображаться в docker images
выход.
# Will be hidden because it has descendant images
FROM node:10 AS base
RUN apt-get update && apt-get upgrade
# Will appear as <none>:<none>
FROM base AS ui
...
# Will get the `docker build -t` tag
FROM base