← Назад к вопросам
Как уменьшить вес 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%