Я создал многоэтапную сборку.
- Стадия 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
и снова запускаю сборку без нее, сборщик не используется.
Подведем итог:
docker build --target builder -t website-builder .
docker build -t website:latest .
Новое <none>
изображениебыл создан, что совпадает с website-builder
.
Как я могу добиться того, чтобы образ компоновщика использовался на этапе «Выпуск» и переписывался, если изменялся? Если это невозможно, какова лучшая практика в этом случае? Есть ли один?
Спасибо, что проткнули. Я ценю любые отзывы или советы.