← Назад к вопросам

Как уменьшить вес Docker образа?

2.0 Middle🔥 181 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Оптимизация размера Docker образа

Великий размер Docker образа замедляет развёртывание, увеличивает расходы на хранилище и снижает скорость CI/CD. Вот лучшие практики для уменьшения веса:

1. Multi-stage сборка

Это самый эффективный способ удалить промежуточные артефакты:

FROM python:3.11-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]

Итог: вместо 500MB получаем 200MB, потому что в финальный образ копируются только скомпилированные пакеты.

2. Использование правильного базового образа

FROM python:3.11
FROM python:3.11-slim
FROM python:3.11-alpine

Альпийский Linux избегайте для CPU-интенсивных приложений (медленнее musl).

3. Минимизация слоёв и кэша

RUN apt-get update && apt-get install -y curl && apt-get clean && rm -rf /var/lib/apt/lists/*

4. Удаление ненужных файлов

RUN pip install --no-cache-dir -r requirements.txt
RUN find /usr/local -type f -name '*.pyc' -delete
RUN find /usr/local -type d -name '__pycache__' -delete

5. .dockerignore файл

Исключаем ненужные файлы при копировании:

.git
.gitignore
__pycache__
*.pyc
.venv
node_modules
.pytest_cache

6. Отключение документации

RUN pip install --no-cache-dir --no-docs -r requirements.txt

Пример оптимизированного Dockerfile

FROM python:3.11-slim as builder
WORKDIR /build
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]

Проверка размера

docker history --human --no-trunc image-name

Результаты оптимизации

  • Базовый Python 3.11: 1000MB
  • После multi-stage: 200-300MB
  • После alpine: 50-100MB
  • Итого сокращение: 70-80%
Как уменьшить вес Docker образа? | PrepBro