Docker — Мониторинг и использование ресурсов

Эта страница объясняет, как отслеживать использование ресурсов Docker и как управлять дисковым пространством, занятым контейнерами, образами и volumes. Здесь разобраны команды для просмотра нагрузки на CPU и память, анализа использования диска, а также безопасной очистки неиспользуемых ресурсов. Материал ориентирован на начинающих и помогает понять, почему Docker может занимать много места на диске или ресурсов системы и как это контролировать. 
 
 Почему важно следить за ресурсами Docker 
 Docker активно использует ресурсы системы: 
 
 CPU 
 оперативную память (RAM) 
 дисковое пространство 
 сетевые ресурсы 
 
 Со временем на сервере могут накапливаться: 
 
 старые контейнеры 
 неиспользуемые образы 
 volumes с данными 
 временные слои сборки 
 
 Если их не очищать, Docker может занять десятки или даже сотни гигабайт дискового пространства . 
 Поэтому регулярный мониторинг и очистка — важная часть администрирования Docker. 
 
 Просмотр нагрузки контейнеров 
 Просмотр использования ресурсов в реальном времени 
 docker stats
 
 Эта команда показывает статистику всех работающих контейнеров. 
 Пример вывода: 
 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O
a12bc34d project_php 2.5% 120MiB / 2GiB 5.8% 1.2MB / 500KB
b45de67f project_nginx 0.2% 15MiB / 2GiB 0.7% 200KB / 100KB
 
 Что показывает эта команда 
 
 
 
 Поле 
 Описание 
 
 
 
 
 CPU % 
 загрузка процессора контейнером 
 
 
 MEM USAGE 
 используемая память 
 
 
 MEM % 
 процент от доступной памяти 
 
 
 NET I/O 
 сетевой трафик 
 
 
 
 Когда использовать 
 Полезно, если: 
 
 сервер начал тормозить 
 приложение потребляет слишком много ресурсов 
 нужно найти контейнер с высокой нагрузкой 
 
 
 Проверка ресурсов одного контейнера 
 docker stats --no-stream <container>
 
 Флаг --no-stream выводит статистику один раз , без постоянного обновления. 
 Пример: 
 docker stats --no-stream project_php
 
 Это удобно, если нужно быстро проверить текущую нагрузку. 
 
 Проверка процессов внутри контейнера 
 Иногда нагрузку создаёт конкретный процесс. 
 Можно посмотреть процессы внутри контейнера: 
 docker compose top <service>
 
 Пример: 
 docker compose top php
 
 Вывод покажет процессы, которые выполняются внутри контейнера. 
 Это помогает определить, что именно создаёт нагрузку: 
 
 веб-сервер 
 PHP-процесс 
 worker 
 cron-задача 
 
 
 Проверка использования диска Docker 
 Посмотреть сколько места занимает Docker 
 docker system df
 
 Пример вывода: 
 TYPE TOTAL ACTIVE SIZE
Images 12 4 3.2GB
Containers 8 4 120MB
Local Volumes 6 5 5.6GB
Build Cache - - 2.1GB
 
 Что означает каждая строка 
 
 
 
 Тип 
 Описание 
 
 
 
 
 Images 
 Docker-образы 
 
 
 Containers 
 контейнеры 
 
 
 Volumes 
 постоянные данные 
 
 
 Build Cache 
 кэш сборки Docker 
 
 
 
 Когда использовать 
 Эта команда помогает понять: 
 
 почему Docker занимает много места 
 какие ресурсы занимают больше всего диска 
 
 
 Подробная информация об использовании диска 
 docker system df -v
 
 Флаг -v (verbose) показывает более подробную информацию: 
 
 какие именно образы занимают место 
 какие контейнеры используют volumes 
 какие слои можно удалить 
 
 
 Очистка неиспользуемых ресурсов 
 Со временем Docker оставляет множество временных объектов: 
 
 остановленные контейнеры 
 старые образы 
 временные сети 
 build cache 
 
 Их можно безопасно удалить. 
 
 Удаление неиспользуемых образов 
 docker image prune -f
 
 Удаляет dangling images — образы, которые больше не используются контейнерами. 
 Когда использовать 
 Если после сборок осталось много старых образов. 
 
 Полная очистка Docker 
 docker system prune -f
 
 Удаляет: 
 
 остановленные контейнеры 
 неиспользуемые сети 
 dangling images 
 build cache 
 
 Важно понимать 
 Эта команда не удаляет volumes . 
 То есть: 
 
 базы данных 
 файлы проекта 
 persistent storage 
 
 останутся на месте. 
 
 Очистка volumes 
 docker volume prune -f
 
 Удаляет неиспользуемые volumes . 
 Осторожно 
 Volumes могут содержать: 
 
 базы данных 
 пользовательские файлы 
 кэш приложения 
 
 Поэтому перед удалением нужно убедиться, что volume действительно не используется. 
 
 Очистка сетей 
 docker network prune -f
 
 Удаляет неиспользуемые Docker-сети. 
 Эта команда безопасна, потому что: 
 
 сети удаляются только если они не используются контейнерами 
 
 
 Проверка ресурсов Docker Engine 
 Иногда полезно посмотреть информацию о самой Docker-системе. 
 
 Проверка доступной памяти 
 docker info | grep -i memory
 
 Показывает информацию о памяти, доступной Docker. 
 
 Проверка CPU 
 docker info | grep -i cpu
 
 Показывает количество доступных CPU. 
 
 Проверка лимитов контейнера 
 Некоторые контейнеры могут иметь ограничения по памяти. 
 Проверить это можно так: 
 docker inspect <container> | grep -i memory
 
 Пример: 
 docker inspect project_php | grep -i memory
 
 Эта команда покажет: 
 
 лимит памяти 
 настройки использования RAM 
 
 
 Типичные проблемы с ресурсами 
 Docker занимает слишком много места 
 Самая частая причина — накопившиеся: 
 
 старые образы 
 build cache 
 остановленные контейнеры 
 
 Решение: 
 docker system prune -f
 
 
 Заполнен диск сервера 
 Проверить использование: 
 docker system df
 
 Затем очистить ненужные данные. 
 
 Контейнер использует слишком много CPU 
 Найти контейнер: 
 docker stats
 
 После этого: 
 
 проверить логи 
 посмотреть процессы внутри контейнера 
 
 
 Контейнер использует слишком много памяти 
 Возможные причины: 
 
 утечка памяти 
 неправильная конфигурация приложения 
 слишком большие кэши 
 
 Проверить: 
 docker stats
 
 
 Рекомендуемая регулярная очистка 
 На серверах разработки полезно периодически выполнять: 
 docker system prune -f
 
 Если используется активная сборка образов: 
 docker builder prune -f
 
 
 Типичный сценарий диагностики 
 Если сервер начал тормозить: 
 1 Проверить контейнеры 
 docker stats
 
 
 2 Проверить диск 
 docker system df
 
 
 3 Очистить ненужные данные 
 docker system prune -f
 
 
 4 Проверить снова 
 docker system df
 
 
 Краткая памятка 
 docker stats # нагрузка контейнеров в реальном времени
docker stats --no-stream <container> # разовая статистика

docker compose top <service> # процессы внутри контейнера

docker system df # использование диска Docker
docker system df -v # подробная информация

docker image prune -f # удалить неиспользуемые образы
docker system prune -f # очистка контейнеров, сетей и cache
docker volume prune -f # удалить неиспользуемые volumes
docker network prune -f # удалить неиспользуемые сети

docker info | grep -i memory # информация о памяти
docker info | grep -i cpu # информация о CPU
docker inspect <container> | grep -i memory # лимиты контейнера