Введение в этапы сборки в Docker
Один файл шагов с начала до конца кладёт в образ и компилятор, и саму программу. Такой образ тяжелее и шире по поверхности атаки, чем нужно для обычного запуска.
Часть шагов нужна только пока собирают артефакт. Её можно оставить в промежуточном этапе, а в финальный слой перенести лишь готовые файлы. Тогда компилятор и временные каталоги не едут вместе с программой.
Иногда образ нужен не финальный, а один из шагов по имени. Сборку можно оборвать на именованном этапе и получить отдельную метку для проверки или для передачи дальше.
Секрет для шага не должен остаться в слоях готового образа. Его подкладывают только на время команды, а в рецепт не пишут открытым текстом.
Кеш загрузок пакетов не обязан попадать в образ. Его держат между сборками отдельно, а в слой записывают лишь установленные программы.
Сборку можно назвать для чужой платформы, даже если компьютер другой архитектуры. Тогда в метке окажется образ под выбранный процессор, а не только под локальный.