Как использовать помеченное промежуточное изображение для окончательной сборки? - PullRequest
1 голос
/ 24 октября 2019

Я создал многоэтапную сборку.

  • Стадия 1: используйте узел: 16.10-alpine для компиляции источников
  • Стадия 2: используйте изображение Alpine Nginx, скопируйте сборкупапку с первого этапа, перенести конфигурацию, открыть порт, добавить точку входа.

Вот файл Docker:

# Builder
FROM node:10.16-alpine AS builder

... # Do stuff

# Release
FROM nginx:1.16.0-alpine

COPY --from=builder /usr/src/app/build /usr/share/nginx/html

... # Do stuff

ENTRYPOINT [ ... ]

Я бы сказал, довольно просто. Я знаю, что если вы запустите docker build -t website:latest ., он создаст промежуточное изображение <none>, то есть это изображение компоновщика, которое может быть использовано позже, если не было изменений в источниках или package.json.

. я думал пометить шаг builder примерно так: docker build --target builder -t website-builder . и чтобы даже если источники менялись, он просто использовал тот же тег и не (исправьте меня, если я ошибаюсь) создавал другие изображения.

Если я сначала запускаю сборку с флагом --target и снова запускаю сборку без нее, сборщик не используется.

Подведем итог:

  1. docker build --target builder -t website-builder . First Step
  2. docker build -t website:latest . Second Step

Новое <none> изображениебыл создан, что совпадает с website-builder.

Как я могу добиться того, чтобы образ компоновщика использовался на этапе «Выпуск» и переписывался, если изменялся? Если это невозможно, какова лучшая практика в этом случае? Есть ли один?

Спасибо, что проткнули. Я ценю любые отзывы или советы.

1 Ответ

1 голос
/ 24 октября 2019

Я думаю, вы можете использовать:

COPY --from=website-builder:latest .....
...