Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Какие методы уменьшения объема Docker-образа ты знаешь?

Вопрос проверяет знание практик оптимизации Docker-образов для ускорения их сборки и развертывания.

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

Основные методы: использование многоступенчатой сборки (multi-stage build), выбор минимального базового образа (например, alpine), объединение команд RUN в одну для уменьшения слоёв, использование файла .dockerignore и удаление кэша пакетного менеджера в том же слое, где он использовался.

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

Большие образы занимают много места в реестре, дольше скачиваются и развертываются. Оптимизация образа — важная часть CI/CD пайплайна.

Ключевые методы оптимизации:

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

    • Это самый эффективный метод для приложений, которые нужно компилировать.

    • Позволяет использовать один образ (с полным SDK) для сборки и компиляции, а затем копировать только готовые артефакты (например, dll или исполняемый файл) в маленький финальный образ (только с runtime).

    # Стадия сборки
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    WORKDIR /src
    COPY . .
    RUN dotnet publish -c Release -o /app
    
    # Финальная стадия
    FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS final
    WORKDIR /app
    COPY --from=build /app .
    ENTRYPOINT ["dotnet", "MyApp.dll"]
  2. Использование минимальных базовых образов:

    • Вместо полных образов вроде ubuntu используйте минималистичные: alpine, distroless, или официальные -slim/-alpine версии.

    • Пример: mcr.microsoft.com/dotnet/aspnet:8.0-alpine значительно меньше, чем mcr.microsoft.com/dotnet/aspnet:8.0.

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

    • Каждая инструкция в Dockerfile (RUN, COPY, ADD) создаёт новый слой.

    • Объединяйте связанные команды RUN с помощью && и \ для переноса строк.

    # ПЛОХО: Создаёт 3 слоя.
    RUN apt-get update
    RUN apt-get install -y python3
    RUN rm -rf /var/lib/apt/lists/*
    
    # ХОРОШО: Создаёт 1 слой.
    RUN apt-get update && \
        apt-get install -y python3 && \
        rm -rf /var/lib/apt/lists/*
  4. Использование .dockerignore:

    • Аналогично .gitignore. Исключает из контекста сборки ненужные файлы (.git, bin, obj, node_modules, файлы конфигурации IDE), которые могут необоснованно увеличить образ.

  5. Очистка кэша в том же слое:

    • Удаляйте кэш пакетных менеджеров (apt, npm, nuget) в той же инструкции RUN, где вы эти пакеты устанавливали. Это предотвратит сохранение кэша в финальном образе.

Вывод:
Комбинация многоступенчатой сборки и использования минимального базового образа даёт наибольший выигрыш в размере. Остальные методы являются best practices для поддержания образа в чистоте и дальнейшей оптимизации.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Docker

    Docker

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

#docker

#image optimization

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