DevOps-инструмент для разработчиков

Калькулятор размера Docker-образа

Оцените итоговый размер контейнера до сборки. Выберите базовый образ, добавьте зависимости и узнайте, сколько места займет ваш Docker image на диске и в реестре.

100+
Базовых образов
В Docker Hub тысячи образов на любой стек
~38%
Коэффициент сжатия
Средняя степень компрессии при push в реестр
5 МБ
Минимальный образ
Alpine Linux — самый легкий базовый образ
10x
Разница в размере
Между node:latest и node:alpine

Как устроен Docker-образ

Docker-образ состоит из набора неизменяемых слоёв (layers), каждый из которых представляет собой результат выполнения одной инструкции Dockerfile. Понимание этой архитектуры — ключ к оптимизации размера контейнеров.

📦

Базовый образ (FROM)

Фундамент контейнера. Содержит операционную систему и системные библиотеки. Alpine занимает ~5 МБ благодаря musl libc и BusyBox, тогда как Ubuntu — ~77 МБ с полным набором glibc. Выбор базового образа определяет минимальный размер контейнера.

🧱

Слои и кеширование

Каждая инструкция RUN, COPY, ADD создает новый слой. Docker кеширует слои и переиспользует их между сборками. Если слой не менялся — он берется из кеша. Правильный порядок инструкций ускоряет сборку в разы: сначала зависимости, потом код приложения.

🗜

Сжатие в реестре

При docker push каждый слой сжимается gzip. Типичный коэффициент сжатия — 30-40%, но он зависит от содержимого: текстовые файлы сжимаются хорошо, бинарные — хуже. В Docker Hub и приватных реестрах хранятся именно сжатые слои.

Зачем оптимизировать размер Docker-образа

Компактные контейнеры — это быстрее, дешевле и безопаснее. Вот ключевые причины следить за размером образа.

🚀

Быстрый деплой

Маленький образ скачивается за секунды вместо минут. При автоскейлинге в Kubernetes это критично: новый pod стартует быстрее, а downtime сокращается.

💰

Экономия на хранении

Registry-хранилище оплачивается по объему. Образ 100 МБ вместо 900 МБ — это 9-кратная экономия при хранении 50+ версий. В масштабе команды суммы ощутимы.

Ускорение CI/CD

Docker build, push и pull — самые медленные этапы пайплайна. Сократив образ на 500 МБ, вы экономите минуты на каждом коммите и ускоряете feedback loop.

🔒

Безопасность

Меньше пакетов — меньше поверхность атаки. Alpine без лишних утилит содержит десятки уязвимостей вместо сотен. Сканеры (Trivy, Snyk) покажут разницу.

🌐

Edge и IoT

На edge-устройствах и в IoT-сценариях дисковое пространство ограничено. Образ 50 МБ может работать даже на Raspberry Pi и маломощных VPS.

📊

Трафик и bandwidth

Каждый docker pull — это сетевой трафик. При развертывании на 100 нод кластера образ 900 МБ создаёт 90 ГБ трафика. С Alpine — менее 10 ГБ.

Сравнение базовых образов

Размеры наиболее популярных базовых образов Docker Hub. Данные приведены для amd64-архитектуры и актуальны на 2025 год.

ОбразНесжатыйСжатыйLibcПримечание
alpine:latest~5 МБ~3 МБmuslМинимальный, но некоторые пакеты несовместимы
debian:slim~80 МБ~30 МБglibcБаланс между размером и совместимостью
ubuntu:latest~77 МБ~29 МБglibcШирокая экосистема пакетов (apt)
node:alpine~130 МБ~50 МБmuslДля Node.js без нативных зависимостей
node:slim~240 МБ~85 МБglibcNode.js с glibc для нативных модулей
node:latest~900 МБ~350 МБglibcПолная сборка с build-инструментами
python:slim~150 МБ~55 МБglibcPython без лишних пакетов
golang:alpine~250 МБ~95 МБmuslGo SDK для сборки, финал — scratch/alpine
nginx:alpine~40 МБ~15 МБmuslВеб-сервер для статики и реверс-прокси

Multi-stage сборки/ руководство

Multi-stage build — главный приём оптимизации Docker-образов. Идея проста: один этап для сборки (с gcc, node-gyp и прочими инструментами), другой — для запуска (только runtime и артефакты).

Пример: Node.js приложение

Сборка на node:latest (900 МБ), запуск на node:alpine (130 МБ). Build-зависимости не попадают в финальный образ.

# Этап 1: сборка FROM node:latest AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Этап 2: запуск FROM node:alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules CMD ["node", "dist/index.js"]

Пример: Go приложение

Go компилируется в один бинарник — финальный образ может быть scratch (0 МБ) или alpine (~5 МБ).

# Этап 1: сборка FROM golang:alpine AS builder WORKDIR /app COPY go.* ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 go build -o server . # Этап 2: запуск FROM alpine:latest COPY --from=builder /app/server /server CMD ["/server"]

Результат: Go-приложение в финальном образе занимает 10-20 МБ вместо 800+ МБ. Экономия — 98% размера.

Совет: Используйте CGO_ENABLED=0 для Go, чтобы создать статически слинкованный бинарник без зависимости от libc.

Техники оптимизации Dockerfile

Практические приёмы, которые помогут уменьшить размер образа, ускорить сборку и сделать контейнер более безопасным.

1Выбирайте минимальный базовый образ

Начните с Alpine или -slim вариантов. Alpine использует musl libc вместо glibc, что даёт образ в 15-20 раз меньше Ubuntu. Если нужна совместимость с glibc (numpy, pandas, native-модули), выбирайте debian:slim или distroless от Google.

2Создайте .dockerignore

Файл .dockerignore работает как .gitignore — исключает ненужные файлы из контекста сборки. Обязательно добавьте: node_modules, .git, *.md, tests, .env, coverage, dist. Без .dockerignore COPY . . скопирует всё, включая .git (сотни МБ).

3Объединяйте RUN-инструкции

Каждый RUN создаёт отдельный слой. Если в одном RUN вы устанавливаете пакет, а в следующем удаляете кеш — кеш всё равно останется в предыдущем слое. Объединяйте команды: apt-get install -y pkg && apt-get clean && rm -rf /var/lib/apt/lists/* в одну инструкцию RUN.

4Правильный порядок слоёв

Docker кеширует слои сверху вниз. Если слой изменился — все последующие пересобираются. Располагайте инструкции от редко меняющихся к часто: сначала COPY package.json и npm install (зависимости меняются редко), потом COPY . . (код меняется часто).

5Используйте --no-install-recommends

Для apt (Debian/Ubuntu): apt-get install --no-install-recommends убирает «рекомендуемые» пакеты, которые часто не нужны в контейнере. Для apk (Alpine): apk add --no-cache не оставляет кеш пакетного менеджера в слое.

6Production-only зависимости

Для Node.js: npm ci --omit=dev устанавливает только production-зависимости. Для Python: не копируйте dev-requirements.txt в финальный образ. Это может сократить размер node_modules вдвое и больше.

Полезные команды Docker

Команды для анализа и диагностики размера образов, которые помогут найти узкие места.

docker images

Список всех локальных образов с размерами. Покажет, какие образы занимают больше всего места на диске.

docker history <image>

Размер каждого слоя образа. Помогает найти самый «тяжелый» слой и понять, какая инструкция его создала.

docker system df

Общая статистика использования диска Docker: образы, контейнеры, тома и build-кеш.

docker system prune -a

Удаление всех неиспользуемых образов, контейнеров и сетей. Освобождает гигабайты дискового пространства.

dive <image>

Утилита dive показывает содержимое каждого слоя в виде файловой системы. Визуализирует эффективность использования места.

docker buildx build --sbom .

Генерация SBOM (Software Bill of Materials) — полного списка компонентов образа для аудита безопасности.

Как пользоваться калькулятором

Простая инструкция для оценки размера вашего Docker-образа до начала сборки.

1

Выберите базовый образ

Кликните на карточку с нужным образом: alpine, debian:slim, node:alpine и другие. Если вашего образа нет в списке — выберите «Свой размер» и введите значение вручную.

2

Добавьте зависимости

Отметьте пакеты, которые устанавливаете в Dockerfile через apt-get install или apk add. Для нестандартных зависимостей используйте форму «Добавить свою».

3

Укажите размер кода

Введите примерный размер вашего приложения: исходный код, скомпилированные файлы, статические ассеты. Включите multi-stage, если используете двухэтапную сборку.

4

Изучите результаты

Калькулятор покажет оценку размера на диске и в реестре, визуализацию слоёв и сравнение с альтернативными базовыми образами. Используйте советы по оптимизации.

ЧАСТЫЕ ВОПРОСЫ

Часто задаваемые вопросы

Docker-образ (image) — это неизменяемый шаблон, содержащий ОС, зависимости и код приложения. Контейнер — это запущенный экземпляр образа с собственным writable-слоем поверх. Один образ может порождать сотни контейнеров. Аналогия: образ — это класс в ООП, контейнер — его объект (экземпляр).
Alpine Linux использует musl libc вместо glibc и BusyBox вместо стандартных утилит GNU. Это даёт базовый образ ~5 МБ. Минус — некоторые пакеты, скомпилированные под glibc, не работают напрямую (например, numpy, pandas). В этих случаях используйте -slim варианты на базе Debian.
Multi-stage build — это Dockerfile с несколькими FROM-инструкциями. Первый этап (builder) содержит компилятор, SDK, build-инструменты. Второй этап (runtime) — только результат сборки и runtime-зависимости. Используйте всегда, когда есть этап компиляции: Go, Rust, TypeScript, C/C++.
Команда docker images покажет размер на диске (несжатый). Для детального анализа используйте docker history <image> — размер каждого слоя. Утилита dive визуализирует содержимое каждого слоя как файловую систему и показывает эффективность использования места.
При docker push каждый слой сжимается с помощью gzip (или zstd в новых версиях). Текстовые файлы, исходный код и конфигурации сжимаются хорошо (до 30-40% от оригинала). Бинарные файлы и предварительно сжатые данные (JPEG, MP4) почти не уменьшаются.
На итоговый размер — незначительно. Но на скорость сборки — критически. Docker кеширует слои сверху вниз. Если изменился один слой, все последующие пересобираются. Располагайте COPY package.json и npm install до COPY . . — тогда при изменении кода зависимости не будут пересобираться.
Distroless — это образы без пакетного менеджера, оболочки (shell) и утилит ОС. Содержат только runtime (Java, Python, Node.js). Размер меньше Alpine, а безопасность выше — нечего эксплуатировать. Минус — сложнее отлаживать, так как нельзя зайти в контейнер через docker exec sh.
Калькулятор даёт приблизительную оценку на основе типичных размеров базовых образов и распространённых зависимостей. Реальный размер зависит от конкретных версий пакетов, их зависимостей и содержимого вашего кода. Используйте результат как ориентир для сравнения вариантов, а точный размер смотрите после docker build.
Используйте Trivy (trivy image <name>), Snyk (snyk container test <name>) или встроенный docker scout (docker scout cves <name>). Все три инструмента бесплатны для открытых проектов. Чем меньше образ и меньше пакетов — тем меньше CVE (уязвимостей) будет найдено.
scratch — это пустой образ (0 байт). Подходит для статически скомпилированных бинарников Go, Rust, C. Финальный образ содержит только ваш исполняемый файл. Минус: нет shell для отладки, нет CA-сертификатов для HTTPS (нужно добавлять вручную), нет управления пользователями.
Лиана Арифметова
АВТОРverifiedред. calcal.ru

Лиана Арифметова

Создатель и главный редактор

Миссия: демократизировать сложные расчёты. Превратить страх перед числами в ясность и контроль. Девиз: «Любая повторяющаяся задача заслуживает своего калькулятора».

Mathematical Engineering · МФТИ · редактирует каталог с 2012 года

Был ли этот калькулятор полезен?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Инструмент справочный — не заменяет эксперта

Только для информационных целей. Все расчёты, результаты и данные, предоставляемые инструментом, носят исключительно ознакомительный и справочный характер. Они не являются профессиональной консультацией — медицинской, юридической, финансовой, инженерной или иной.

Точность результатов. Калькулятор основан на общепринятых формулах и методиках, однако фактические результаты могут отличаться в зависимости от индивидуальных условий, исходных данных и применяемых стандартов. Мы не гарантируем полноту, точность или актуальность приведённых расчётов.

Профессиональные решения — медицинские, финансовые, инженерные — должны приниматься только после консультации с квалифицированным специалистом. Не используйте автоматический расчёт как единственное основание для важных решений.

Ограничение ответственности. Авторы и разработчики сервиса не несут ответственности за прямой или косвенный ущерб, возникший из-за использования данных расчётов. Пользователь принимает на себя всю ответственность за интерпретацию результатов.

СМЕЖНЫЕ ИНСТРУМЕНТЫ

Похожие калькуляторы

15

YAML валидатор и форматтер

Онлайн проверка и форматирование YAML-файлов. Валидация синтаксиса, конвертация YAML ↔ JSON, подсветка ошибок с номерами строк.

/yaml-validator

Генератор Cron-выражений

Визуальный конструктор cron-расписаний с переводом на русский язык. Создайте cron-выражение для планировщика задач Linux, настройте расписание и посмотрите ближайшие запуски.

/generator-cron

Генератор systemd unit-файла

Создание .service и .timer unit-файлов с настройками безопасности. 5 типов сервиса, 5 политик Restart, готовые bash-команды установки.

/generator-systemd-unit-fajla

Конвертер Unix Timestamp ↔ дата

Онлайн конвертер Unix Timestamp в дату и обратно. Текущий Unix-таймстемп, конвертация с учётом часовых поясов России, форматы ISO 8601 и RFC 2822.

/konverter-unix-timestamp

Калькулятор SLA / стоимости простоя

Расчёт допустимого простоя по SLA (99.9% → минуты в год). Калькулятор стоимости даунтайма и обратный расчёт SLA по фактическому простою.

/kalkulyator-sla-uptime

Генератор nginx конфига

Server-блок nginx с SSL Let’s Encrypt, HTTP/2, gzip, HSTS, CSP, кешированием и rate limit. 4 сценария: proxy, статика, PHP, SPA.

/generator-nginx-konfiga-server-block

Калькулятор контейнеров (Docker)

Расчёты контейнеров: ресурсы, образы, Docker Compose, реестр, оркестрация, стоимость

/container-calculator

CI/CD калькулятор: пайплайн, кэш, тесты, раннеры, деплой

Комплексный CI/CD калькулятор: оптимизация пайплайна (критический путь, параллелизация), кэш сборки (hit ratio, ROI), анализ тестов (flaky, шардирование), артефакты (Docker, npm), раннеры (автоскейлинг) и стратегии деплоя (Blue-Green, Canary, Rolling).

/ci-cd-calculator

Объединить PDF онлайн — без загрузки на сервер

Склейка PDF в браузере через pdf-lib. До 20 файлов, до 50 МБ каждый. Локально, без отправки на сервер (152-ФЗ).

/obyedinit-pdf-onlajn-besplatno

Сжать PDF онлайн — уменьшить размер локально

Сжатие PDF в браузере без потери качества. 3 уровня (object streams, удаление метаданных). До 50 МБ. Через pdf-lib, локально.

/szhat-pdf-onlajn-umenshit-razmer

Разделить PDF на страницы — извлечь нужные онлайн

Разделение PDF на страницы локально: каждая страница отдельным файлом, диапазон или группами. Через pdf-lib, без отправки на сервер.

/razdelit-pdf-na-stranicy-onlajn

JPG в PDF — конвертер с объединением

Конвертация JPG/PNG в PDF в браузере: до 30 картинок в один документ. Форматы A4/A3/Letter или подгонка под изображение.

/jpg-v-pdf-konverter

Повернуть страницы PDF онлайн

Поворот всех или указанных страниц PDF на 90/180/270° за миллисекунды. Lossless. Через pdf-lib, без отправки на сервер.

/povernut-pdf-stranitsy-onlajn

Водяной знак на PDF онлайн (кириллица)

Нанесение текстового знака («КОНФИДЕНЦИАЛЬНО», «ЧЕРНОВИК») на все страницы PDF. Поддержка русского текста через Canvas. 4 положения, регулировка прозрачности.

/dobavit-vodyanoj-znak-na-pdf

Нумерация страниц PDF онлайн

Проставьте номера страниц PDF в браузере: 4 формата, 6 положений, пропуск титульной, кастомный старт. Поддержка кириллицы. Через pdf-lib + Canvas.

/numerovat-stranitsy-pdf-onlajn