Docker: многоступенчатые сборки приводят к нескольким изображениям - PullRequest
0 голосов
/ 15 апреля 2020

Учитывая этот небольшой пример многоступенчатой ​​сборки

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 build, то есть

docker build -t test . 

, поэтому какая из частей изображения отсутствует, а какая тестовая?

Я в замешательстве

1 Ответ

2 голосов
/ 15 апреля 2020

Каждый блок в Dockerfile, начинающийся со строки FROM, создает новое изображение. Если вы используете опцию docker build -t, только последний этап помечается указанным вами именем; оставшиеся блоки будут отображаться как <none> в таких местах, как docker images output.

# 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
...

Иногда вы увидите файлы Docker, где базовое изображение повторно используется на более поздних этапах сборки, и там оно не будет отображаться при все в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...