Используй multi-stage builds + wheels cache - это радикально уменьшает размер образа и ускоряет сборки.
В первом этапе собираешь wheels (компилируемые пакеты), а во втором — устанавливаешь их уже в чистый runtime-слой:
FROM python:3.12 AS builder
RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip wheel --wheel-dir /wheels -r requirements.txt
FROM python:3.12-slim
COPY --from=builder /wheels /wheels
RUN pip install --no-index --find-links=/wheels -r /wheels/requirements.txt
COPY app/ /app
🔥 Плюс:
— быстрый rebuild
— детерминированные зависимости
— значительно меньше образ
Этот трюк мало кто использует, но он делает Docker-окружение Python уровня enterprise.
@pythonl