Многоэтапная сборка в Docker
Многоэтапная сборка оставляет в итоговом образе только файлы последнего этапа, а инструменты сборки выбрасывает. Промежуточные слои служат черновиком, а не частью готовой метки.
Первый этап на базе alpine
с именем build создаёт
файл с инструментом.
Второй этап снова берёт
alpine и забирает
только нужный файл.
Рецепт для образа app:
FROM alpine AS build
RUN echo tool > /tool
FROM alpine
COPY --from=build /tool /tool
CMD ["cat", "/tool"]
После сборки с меткой
-t app . запуск без
лишних слов печатает tool.
Первый этап в готовый образ
не входит: в метке нет
отдельного слоя с именем
build, только результат
копирования.
Выполним сборку и проверку:
docker build -t app .
docker run --rm app
Соберите образ leaf, где первый этап пишет seed в /seed.txt, а финальный показывает это слово через cat.
Убедитесь, что в списке слоёв финальной метки нет отдельного образа первого этапа, а при запуске видно только seed.