Когда Python-код в Docker начинает внезапно тормозить, а контейнеры — весить гигабайты, часто виновник скрыт глубже: Docker копирует в образ всё виртуальное окружение, кэш pip, артефакты билдов и даже .pyc-файлы.
Есть хитрый способ избежать этого и сделать контейнер в 5–10 раз легче и гораздо быстрее:
Используйте многоступенчатую сборку, где Python-зависимости собираются в одном этапе, а в финальный образ попадает только «чистый» результат.
Так вы исключаете мусор, ускоряете сборку и снижаете attack surface.
Многоступенчатый Dockerfile для Python
1. Этап сборки зависимостей
FROM python:3.12-slim AS builder
WORKDIR /build
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
2. Финальный минимальный образ
FROM python:3.12-slim
WORKDIR /app
Копируем только готовые зависимости без pip-кэша
COPY --from=builder /install /usr/local
Добавляем чистый код без артефактов
COPY . .
CMD ["python", "main.py"]