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 # лимиты контейнера
No comments to display
No comments to display