Многоэтапные сборки — это функция Docker, которая позволяет создавать более эффективные и удобные контейнерные образы. Такой подход необходим для команд, которые хотят улучшить читаемость Dockerfile и управление образами. Многоэтапные сборки требуют Docker 17.05 или новее как на демоне, так и на клиенте.
Разбивай свой Dockerfile на отдельные этапы сборки, где каждый этап выполняет конкретную функцию. Такое разделение улучшает читаемость и упрощает понимание и изменение процесса сборки.
Выбирай лёгкие базовые образы, подходящие к требованиям каждого этапа. Используй более крупные образы для этапов сборки и минимальные образы (типа alpine) для финальных боевых этапов, чтобы снизить общий размер образа.
Включай только необходимые зависимости и инструменты на каждом этапе. Удаляй зависимости, нужные только для сборки, из финального образа, чтобы уменьшить размер контейнера и снизить количество уязвимостей.
Убедись, что чувствительная информация и ненужные данные приложения не переходят на следующие этапы. Копируй только нужные артефакты из промежуточных этапов в финальный образ.
Структурируй многоэтапную сборку так, чтобы ранние этапы отвечали за компиляцию и тестирование, а в финальный минимальный образ копировались только скомпилированные артефакты. Такой подход обеспечивает баланс между функциональностью и эффективностью.
Многоэтапные сборки в Docker требуют минимальной версии Docker 17.05 или новее на демоне и клиенте для корректной работы.
Новый — ещё не проверен сообществом
Вы