Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Docker: optimization, docker, image

Какие способы уменьшения размера Docker-образа существуют и как их применять в Dockerfile?

Вопрос проверяет умение оптимизировать Docker-образы, уменьшая их размер и ускоряя развёртывание.

Короткий ответ

Размер Docker-образа уменьшают за счёт использования легковесных базовых образов, многоступенчатых сборок, очистки кешей и пакетов, копирования только нужных файлов и фиксации зависимостей.
Multi-stage builds позволяют отделить стадии сборки от стадии выполнения, оставив в финальном образе только минимальный набор файлов.
Маленькие образы ускоряют доставку, уменьшают время деплоя и повышают безопасность.

Длинный ответ

Docker-образы могут быстро расти в размере, особенно если содержат много инструментов разработки или временных файлов. Чтобы ускорить доставку приложения и снизить нагрузку на CI/CD, важно оптимизировать итоговый размер образа.


Способы уменьшения Docker-образов

1. Использование минимальных базовых образов

Вместо:

FROM python:3.11

используют:

FROM python:3.11-slim

или даже:

FROM python:3.11-alpine

Alpine — самый лёгкий образ, но может требовать больше настройки.


2. Multi-stage build (многоступенчатая сборка)

Позволяет отделить сборку приложения от финального runtime.

Пример:

dockerfile

FROM python:3.11 as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --prefix=/install -r requirements.txt

FROM python:3.11-slim
COPY --from=builder /install /usr/local
COPY . /app
CMD ["python", "main.py"]

Преимущества:

  • удаляются dev-зависимости

  • финальный образ содержит только приложение и runtime


3. Очистка кеша и временных файлов

При установке системных пакетов:

dockerfile

RUN apt-get update && apt-get install -y gcc \
    && rm -rf /var/lib/apt/lists/*

4. Копирование только нужных файлов

Используй .dockerignore:

text

__pycache__
.git
tests
notebooks

5. Минимизация количества слоёв

Каждая инструкция RUN, COPY, ADD создаёт новый слой.
Объединяй их:

RUN pip install -r req.txt && python setup.py install

6. Использование Poetry или pip + constraints.txt

Фиксация зависимостей уменьшает количество пересборок.


Дополнительные стратегии

  • упаковка приложения как wheel-пакета

  • статические бинарные сборки (Go/Rust)

  • alpine-based runtime + builder stage


Вывод

Оптимизация Docker-образов делает деплой быстрее, CI/CD стабильнее, а инфраструктуру дешевле. Лучшие практики — multi-stage сборки, минимальные образы, очистка кеша и грамотная организация файлов.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Docker

    Docker

  • Linux

    Linux

Ключевые слова

#optimization

#docker

#image

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.