Когда сборка Dockerfile занимает минуты - это мешает dev-loop’у. А ведь можно сильно ускориться с парой простых правил 👇

🧠 Основные принципы ускорения:

  1. Максимально используем кэш

   Docker кэширует каждый слой. Если слой не изменился - пересобирать не будет.

   ➤ Сначала COPY зависимости, потом остальной код:

   `COPY requirements.txt .

   `RUN pip install -r requirements.txt  # кэшируется

   `COPY . .  # некэшируемо при любом изменении в коде   

  1. Объединяем RUN-команды

   Меньше слоёв - быстрее сборка и push:

   RUN apt update && apt install -y curl git \

       && rm -rf /var/lib/apt/lists/*

  1. .dockerignore

   Убедись, что не копируешь лишние файлы (например, .git/, tests/, node_modules/):    .git    node_modules    *.log    pycache/

  1. Меньше COPY, больше multi-stage

   Разделяй сборку и runtime - не таскай компиляторы в прод:

   FROM golang:1.20 AS builder

   WORKDIR /app

   COPY . .

   RUN go build -o app

   FROM debian:bullseye-slim

   COPY –from=builder /app/app /usr/bin/app

   CMD [“app”]

  1. Кэшируй pip/npm/go-пакеты

   → в Dockerfile сначала копируй файл зависимостей, ставь пакеты, только потом - весь код проекта. 📌 Используй эти практики, чтобы ускорить CI/CD, локальную сборку и деплой. Чем меньше слоёв изменяется - тем быстрее весь процесс.

Авторские права

Автор: Vasiliy Fakunin

Ссылка: https://notes.melancholic.tech/posts/%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D1%83-docker-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2-%D1%81%D0%BB%D0%BE%D0%B8-%D0%B8-%D0%BA%D1%8D%D1%88-%D0%BD%D0%B0%D1%88%D0%B8-%D0%B4%D1%80%D1%83%D0%B7%D1%8C%D1%8F/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша