Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Docker: image, size, layer

Почему multi-stage сборка уменьшает размер Docker-образа?

Вопрос проверяет понимание того, откуда берётся “лишний вес” Docker-образов и как multi-stage устраняет его.

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

Размер образа уменьшается потому, что в финальный этап не попадают build-инструменты, временные файлы и промежуточные результаты. Docker берёт только то, что явно скопировали из предыдущих стадий. Поэтому компиляторы, заголовки, кэш пакетных менеджеров и прочее остаются в builder-стадии. В итоге production-образ содержит только runtime и готовые зависимости.

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

Чтобы понять, почему multi-stage уменьшает размер, нужно помнить: каждый FROM начинает новую цепочку слоёв, а итоговый образ берётся только из последней стадии. Предыдущие стадии существуют “для сборки”, но не входят в финальный образ напрямую.

Откуда берётся большой размер в обычной сборке

  1. Build-инструменты

  • gcc, make, build-essential, python-dev и т.п.

  • они нужны только чтобы собрать зависимости, но не нужны для запуска

  1. Временные файлы и кэши

  • кэш apt

  • кэш pip (если не отключать)

  • временные файлы сборки пакетов

  1. Промежуточные артефакты

  • исходники библиотек

  • распакованные архивы

  • тестовые/документные файлы, которые случайно остались

Что делает multi-stage по-другому

  1. Разделяет “сборку” и “запуск”

  • стадия builder может быть сколько угодно “толстой”

  • стадия runtime остаётся “тонкой”

  1. Контролирует, что попадёт в финал
    Финальный образ получает только то, что вы явно скопировали:

COPY --from=builder /install /usr/local

Это означает:

  • нет компилятора

  • нет кэша apt

  • нет временных директорий сборки

  • нет лишних пакетов

  1. Позволяет минимизировать runtime-библиотеки
    Если нужны системные библиотеки для работы (например, libpq для Postgres), вы ставите только их, а не весь набор для сборки.

Практическая иллюстрация на уровне логики

Обычная сборка:

  • поставили build-essential

  • собрали зависимости

  • build-essential остался в образе навсегда → + десятки/сотни мегабайт

Multi-stage:

  • build-essential стоит только в builder

  • runtime начинается “с чистого slim”

  • копируются только готовые зависимости → образ заметно меньше

Вывод

Multi-stage уменьшает размер потому, что финальный образ не наследует слои со сборочными инструментами и мусором. Он содержит только runtime и необходимые артефакты, которые вы явно перенесли из builder-стадии.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Docker

    Docker

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

#image

#size

#layer

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

  • Аватар

    Python Guru

    Sergey Filichkin

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