Многоступенчатая сборка появилась из простого наблюдения: инструменты, нужные для сборки, почти никогда не нужны для работы. Компилятор, заголовочные файлы, менеджеры пакетов, тесты, кэши — всё это тащится в итоговый образ и раздувает его в разы.
Идея в том, чтобы описать несколько этапов в одном файле. На первом собирается результат со всем необходимым инструментарием. На втором берётся минимальный базовый образ, и туда копируется только готовое — исполняемый файл, собранная статика, подготовленная папка приложения. Промежуточные этапы в финальный образ не попадают.
Побочная выгода важнее размера. В рабочий образ не попадают исходники, ключи, файлы окружения и утилиты, которыми удобно воспользуется тот, кто получил доступ к контейнеру.
Ещё один приём — вынести в отдельный этап то, что меняется редко: подготовку зависимостей, генерацию словарей, скачивание внешних данных. Тогда обычный ежедневный пересбор трогает только последний, самый дешёвый этап.
Docker на Практике
@docker_practice_ru_n1k
Многоступенчатая сборка появилась из простого наблюдения: инструменты, нужные для сборки, почти никогда не нуж
Этот пост опубликован в Telegram-канале Docker на Практике. Подписаться можно по ссылке: @docker_practice_ru_n1k.