Мультистадийные сборки позволяют использовать несколько временных образов в процессе сборки Docker для получения конечного, оптимизированного образа.
Как это работает:
- Разделение этапов: Процесс сборки делится на несколько стадий (
FROM), каждая из которых наследуется от своего базового образа.
- Копирование артефактов: Файлы и артефакты, созданные на предыдущих стадиях, копируются на последующие с помощью команды
COPY --from=<имя_стадии или номер>.
- Итоговый образ: Конечный образ создается на основе последней стадии. При этом в него попадают только те файлы, которые были скопированы явным образом с предыдущих стадий. Промежуточные слои и инструменты, использованные на ранних стадиях для компиляции или тестирования, не включаются в конечный образ.
Преимущества:
- Уменьшение размера образа: В конечный образ попадают только необходимые для запуска приложения файлы.
- Улучшение безопасности: В конечный образ не включаются инструменты сборки, компиляторы и другие потенциально уязвимые компоненты.
- Ускорение сборки: Промежуточные стадии могут кэшироваться.
- Чистота Dockerfile: Различные этапы сборки (компиляция, тестирование, упаковка) логически разделены.
Пример:
dockerfile