DevOps 6 мин22 мая 2024 г.
Docker Multi-stage Builds: Худеем образы в 10 раз
Избавляемся от ENOSPC (No space left on device) и ускоряем деплой.
Проблема толстых образов
Когда вы пишете COPY . . и RUN npm install, в финальный образ попадает папка node_modules с кучей мусора (DevDependencies, исходники TypeScript и т.д.). В итоге образ весит гигабайты, сервер быстро забивается, а деплой длится вечность.
Решение: Multi-stage сборка
Мы разделяем Dockerfile на этапы (stages):
- Deps: Устанавливаем все зависимости (включая dev).
- Builder: Копируем исходники, собираем проект (TypeScript -> JS, Next.js build).
- Runner: Берем чистый минималистичный образ (node:alpine), копируем туда только скомпилированные файлы из Builder'а и только production-зависимости.
Вуаля! В финальном образе нет исходников и тяжелых тулзов для сборки. Размер уменьшается на 80-90%.
Нужна помощь с архитектурой?
Мы проектируем и разрабатываем Enterprise-решения с финансовой гарантией по SLA. Запишитесь на бесплатный аудит с нашим CTO, чтобы оценить узкие места вашего проекта.