Многоэтапные сборки (Multi-stage Builds)
Некоторые языки программирования (например, Go, Rust или C++) нужно скомпилировать перед запуском — компилятор это инструмент, который переводит исходный код, написанный программистом, в одну программу, которую машина может запустить напрямую (бинарный файл). В multi-stage build вы используете этап
Вы готовите на большой захламлённой кухне с множеством кастрюль и сырых ингредиентов — а потом отправляете клиенту только готовое блюдо, без кастрюль и без остатков.
- компилятор
- Инструмент, который переводит исходный код, написанный программистом, в программу, которую машина может запустить напрямую (бинарный файл). Компилируемым языкам, таким как Go, Rust и C++, он нужен, чтобы собрать программу — но не для того, чтобы её запустить.
- этап сборки (build stage)
- Первый этап в multi-stage build, основанный на образе с полным набором инструментов (компилятор, библиотеки), на котором приложение компилируется в итоговый артефакт.
- этап выполнения (runtime stage)
- Последний этап, основанный на маленьком образе (например, alpine), содержащий только готовый артефакт и то, что нужно для его запуска — без инструментов сборки.
- COPY --from
- Инструкция, которая копирует файлы с более раннего этапа (по имени или индексу) в текущий этап, позволяя взять только итоговый артефакт и оставить остальную часть сборки позади.