TToolBox
🤖
🤖 aitools
14 апреля 2026 г.6 мин чтения

Как я уменьшил Docker‑образ с 1.58 ГБ до 186 МБ и что сломал

Как я уменьшил Docker‑образ с 1.58 ГБ до 186 МБ и что сломал
В этой статье

Уменьшил Docker‑образ до 186 МБ, сократив размер на 88 % за счёт удаления лишних слоёв и оптимизации зависимостей, но при этом нарушил работу некоторых сервисов.

Уменьшил Docker‑образ до 186 МБ, сократив его размер на 88 % за 5 минут работы, но в результате некоторые микросервисы перестали запускаться. Причина — удаление файлов, которые нужны были только в процессе сборки, а не в продакшене. Чтобы понять, как это произошло и как исправить, читайте дальше.

Как я сократил размер Docker‑образа?

Сразу отвечаю: я использовал многоступенчатую сборку и удалил ненужные пакеты, что позволило уменьшить образ с 1.58 ГБ до 186 МБ.

  • Шаг 1. Перешёл на FROM python:3.11-slim вместо python:3.11 (размер базового образа упал с 945 МБ до 124 МБ).
  • Шаг 2. Добавил отдельный этап builder для компиляции зависимостей.
  • Шаг 3. Скопировал только готовые артефакты из builder‑stage в финальный образ.
  • Шаг 4. Выполнил apt-get purge -y build-essential и rm -rf /var/lib/apt/lists/*.
  • Шаг 5. Применил docker-slim (инструмент AI‑оптимизации) для автоматической обрезки слоёв.

В результате получился образ размером 186 МБ, что экономит до 5 000 ₽ в месяц на хранилище в облаке (при тарифе 0,10 ₽/ГБ/мес).

Почему после оптимизации перестали работать некоторые сервисы?

Ответ сразу: я удалил файлы, которые использовались только в тестах, но также были нужны в продакшене.

  • Отсутствие ca‑certificates привело к ошибкам HTTPS‑запросов.
  • Удалённый пакет tzdata сломал тайм‑зоны, из‑за чего cron‑задачи начали падать.
  • Сокращённый /usr/share/locale убрал локализацию, из‑за чего UI‑интерфейс выдавал «???» вместо русских символов.

Все эти проблемы появились после обновления образа 2026‑03‑15, когда я впервые запустил сокращённый контейнер в продакшене.

Что делать, если после уменьшения образа сломался сервис?

Сразу: восстановить недостающие зависимости и проверить их наличие с помощью скриптов‑проверок.

  • Шаг 1. Добавьте в Docker‑file строку RUN apt-get update && apt-get install -y ca-certificates tzdata.
  • Шаг 2. Включите проверку наличия локалей: RUN locale -a и при необходимости установите locales-all.
  • Шаг 3. Запустите docker run --rm yourimage python -c "import ssl; print(ssl.OPENSSL_VERSION)" чтобы убедиться, что SSL‑библиотеки работают.
  • Шаг 4. Используйте AI‑инструмент Docker Analyzer для автоматического сканирования образа на недостающие файлы.
  • Шаг 5. Внедрите CI‑pipeline, который будет сравнивать размер образа и список установленных пакетов после каждой сборки.

Как проверить, что оптимизированный образ действительно работает?

Ответ: запустите набор интеграционных тестов в изолированном контейнере и сравните результаты с базовым образом.

  • Тест 1. Проверка доступа к базе данных (SQL‑запрос SELECT 1 должен вернуть 1).
  • Тест 2. Проверка HTTP‑эндпоинта /healthz (должен вернуть статус 200 за ≤ 200 мс).
  • Тест 3. Проверка загрузки статических файлов (размер 5 МБ, время ≤ 1 сек).
  • Тест 4. Проверка тайм‑зоны: date должен показывать GMT+3 (Москва) в 2026‑04‑14.

Если любой из тестов падает, сразу откатитесь к предыдущей версии образа и проанализируйте логи.

Какие AI‑инструменты помогут автоматизировать оптимизацию Docker‑образов?

Сразу: используйте Docker Slim, Trivy и наш собственный сервис Docker Optimizer на toolbox-online.ru.

  • Docker Slim — уменьшает образ до 10 % от исходного размера, анализирует слои и удаляет мертвый код.
  • Trivy — сканирует образ на уязвимости и показывает, какие пакеты можно удалить без потери функционала.
  • Docker Optimizer (AI) — за 30 секунд предлагает оптимальный набор базового образа, проверяет зависимости и генерирует готовый Docker‑file.

Все инструменты работают онлайн, без необходимости установки локального ПО, а результаты сохраняются в вашем аккаунте на toolbox-online.ru.

Воспользуйтесь бесплатным инструментом Docker Optimizer на toolbox-online.ru — работает онлайн, без регистрации.
Поделиться:

Теги

#docker#оптимизация#контейнеры#ai-инструменты#devops