Образ для Go-сервиса: этапы сборки, база, размер и что проверять перед выкаткой
Образ Go-сервиса собирают в два этапа: тяжёлый этап сборки с тулчейном и лёгкий этап выполнения, куда копируется только бинарник. Порядок инструкций определяет скорость: сначала go.mod и go.sum с go mod download отдельным слоем, потом код — тогда правка кода не приводит к перекачиванию зависимостей. Ещё быстрее с монтируемым кешем BuildKit, который переживает не только слои, но и разные сборки. Базу для этапа выполнения выбирают из трёх вариантов: scratch требует ручного добавления сертификатов и пользователя, distroless/static даёт всё это из коробки и остаётся минимальным, alpine добавляет оболочку для отладки ценой лишних мегабайт и поверхности атаки. Перед выкаткой проверяют четыре вещи: образ запускается, ходит по HTTPS, работает от непривилегированного пользователя и не содержит секретов в слоях. Последнее особенно важно: ARG и ENV остаются в истории образа навсегда.