Использование Docker для кэширования зависимостей

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

dockerкэширование зависимостейdockerfile

👁 Бывает, что ты часто пересобираешь 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

Скриншот терминала с фрагментом Dockerfile (multi-stage): команды COPY и RUN для кэширования зависимостей, логотип RECURA.
Фрагмент Dockerfile с многоступенчатой сборкой и командами COPY/ RUN; иллюстрация к совету в посте.

Читайте так же