👁 Бывает, что ты часто пересобираешь Docker-образ, и, несмотря на наличие кэширования, оно не всегда работает как ожидается. В случае с зависимостями, например, в Python или Node.js, кэширование на уровне слоев Docker может значительно ускорить время сборки. Давай разберём, как этого добиться.
📝 Пример кода:
# Базовый образ FROM node:16 AS builder # Устанавливаем зависимости WORKDIR /app COPY package.json package-lock.json ./ RUN npm install # Копируем код приложения COPY . . # Собираем приложение RUN npm run build # Финальный образ FROM node:16-alpine WORKDIR /app COPY --from=builder /app /app CMD ["npm", "start"]
📌 Как это работает:
- Мы разделяем процесс на два этапа: на первом этапе устанавливаются зависимости и выполняется сборка, а на втором этапе только копируются собранные файлы
- Важный момент: COPY package.json package-lock.json ./ и RUN npm install идут до копирования остального кода. Это позволяет Docker кэшировать слой с установкой зависимостей, если файлы зависимостей не менялись
❗️ Этот подход может сэкономить кучу времени при сборке образов для проектов с большими зависимостями, особенно при использовании в CI/CD.
tags: #docker #разработка
❤️ @recura_tech



