Для чего нужен Docker multistage build
Интервьюер спрашивает: зачем в Dockerfile нужен multistage build и что он дает в production?
Короткий ответ
Multistage build разделяет этап сборки и финальный runtime image: в финальный образ попадает только нужный артефакт, без build tools, кешей и лишних зависимостей.
Полный разбор
В первом stage обычно ставятся build dependencies, компилируется приложение, собирается frontend или wheel. Во втором stage берется чистый runtime image, куда копируются только готовые артефакты и минимальные runtime dependencies.
Плюсы: меньше размер образа, меньше attack surface, быстрее pull/deploy, меньше случайных зависимостей в production. Для ML/DS это полезно, когда нужно не тащить компиляторы, dev headers, notebooks и временные файлы в serving image.
Важно понимать, что multistage build не заменяет нормальный dependency management, но помогает сделать production image компактнее и безопаснее.
Теория
Это production hygiene. На ML-интервью такой вопрос часто проверяет, способен ли кандидат доводить код до сервиса, а не только обучать модель в ноутбуке.
Типичные ошибки
- Не отличать build image от runtime image.
- Думать, что multistage нужен только для frontend.
- Оставлять секреты или build cache в финальном образе.
Как отвечать на собеседовании
- Отвечай через два этапа: build stage и runtime stage.
- Назови benefits: image size, security, deploy speed.