Docker: багатоступеневі збірки для зменшення образів
Як скоротити розмір продакшен-образу в кілька разів без втрати зручності розробки.

Docker: багатоступеневі збірки для зменшення образів
Проблема важких образів
Якщо збирати і запускати застосунок в одному й тому самому образі, в продакшен разом із застосунком їдуть компілятор, dev-залежності та кеш збирача — десятки, а іноді сотні зайвих мегабайтів, які збільшують час деплою і розширюють поверхню атаки.
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/main.js"]
``` Детальніше про суміжний підхід можна прочитати в матеріалі [«Kubernetes: основні об'єкти і коли він потрібен»](/devops/kubernetes-osnovni-ob-yekty-i-koly-vin-potriben).

## Що переносити у фінальний образ
Багатоступенева збірка вирішує проблему розділенням на етапи: перший `FROM` збирає застосунок з усіма інструментами розробки, а фінальний `FROM` бере лише потрібні артефакти через `COPY --from=builder`, залишаючи компілятор і проміжні файли позаду.
Додатково варто використовувати `.dockerignore`, щоб не копіювати в контекст збірки папку `node_modules` чи `.git`, та слім-версії базових образів (`slim`, `alpine`) там, де це не конфліктує з потрібними системними бібліотеками. Ці ідеї перегукуються з темами [«Helm charts: пакування застосунків для Kubernetes»](/devops/helm-charts-pakuvannya-zastosunkiv-dlya-kubernetes) та [«Оптимізація N+1 запитів в ORM»](/databases/orm-n-plus-one).
Схожі матеріали
devops
Автоматизація онбордингу розробників (dev environment as code)
Практичний посібник з теми «автоматизація онбордингу розробників (dev environment as code)» для DevOps-інженерів та SRE.
Читати
devops
Автоматизація патчингу серверів
Практичний посібник з теми «автоматизація патчингу серверів» для DevOps-інженерів та SRE.
Читати
devops
Автоматизація тестування інфраструктури
Практичний посібник з теми «автоматизація тестування інфраструктури» для DevOps-інженерів та SRE.
Читати