Как использовать команду docker container stats для мониторинга ресурсов контейнеров

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь эффективно отслеживать использование ресурсов ваших Docker-контейнеров с помощью команды docker stats. Вы изучите, как отображать текущее использование ресурсов для всех запущенных контейнеров, а также для конкретных контейнеров по имени или ID.

Кроме того, вы узнаете, как просматривать использование ресурсов для всех контейнеров, включая остановленные, и как настраивать формат вывода команды docker stats с использованием пользовательского шаблона. Наконец, вы научитесь получать единичный снимок статистики контейнеров без непрерывного потока данных.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/top("Display Running Processes in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555123{{"Как использовать команду docker container stats для мониторинга ресурсов контейнеров"}} docker/stop -.-> lab-555123{{"Как использовать команду docker container stats для мониторинга ресурсов контейнеров"}} docker/top -.-> lab-555123{{"Как использовать команду docker container stats для мониторинга ресурсов контейнеров"}} docker/pull -.-> lab-555123{{"Как использовать команду docker container stats для мониторинга ресурсов контейнеров"}} end

Отображение текущего использования ресурсов для всех запущенных контейнеров

На этом шаге вы узнаете, как отображать текущее использование ресурсов для всех запущенных Docker-контейнеров с помощью команды docker stats. Эта команда предоставляет поток данных об использовании ресурсов контейнеров в реальном времени, включая CPU, память, сетевой ввод-вывод (I/O) и блочный ввод-вывод.

Сначала давайте запустим несколько контейнеров, чтобы было что мониторить. Мы будем использовать образ ubuntu и запустим их в detached mode (-d), чтобы они работали в фоновом режиме. Также присвоим им имена для удобства идентификации.

docker pull ubuntu
docker run -d --name container1 ubuntu sleep infinity
docker run -d --name container2 ubuntu sleep infinity
docker run -d --name container3 ubuntu sleep infinity

Теперь, когда у нас есть работающие контейнеры, мы можем использовать команду docker stats для просмотра их использования ресурсов.

docker stats

Вы увидите таблицу с информацией о каждом запущенном контейнере, включая его ID, имя, использование CPU, использование памяти, сетевой ввод-вывод, блочный ввод-вывод и количество PIDs. Эти данные обновляются в реальном времени.

Чтобы остановить команду docker stats, нажмите Ctrl+C.

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

На предыдущем шаге вы узнали, как отображать использование ресурсов для всех запущенных контейнеров. В этом шаге вы научитесь выводить статистику использования ресурсов для конкретных контейнеров, указывая их имена или ID в команде docker stats.

Для отображения статистики одного контейнера просто укажите его имя или ID после команды docker stats. Например, чтобы посмотреть статистику для container1:

docker stats container1

Вы увидите данные об использовании ресурсов только для container1 в реальном времени. Нажмите Ctrl+C, чтобы остановить вывод.

Вы также можете указать несколько имён или ID контейнеров, чтобы одновременно просматривать статистику для нескольких контейнеров. Например, для просмотра статистики container1 и container2:

docker stats container1 container2

Это отобразит данные об использовании ресурсов для обоих контейнеров (container1 и container2) в реальном времени. Нажмите Ctrl+C, чтобы остановить вывод.

Использование имён контейнеров обычно удобнее и проще для запоминания, чем использование ID, особенно когда у вас запущено несколько контейнеров.

Отображение использования ресурсов для всех контейнеров (работающих и остановленных)

По умолчанию команда docker stats показывает статистику только для работающих контейнеров. На этом шаге вы узнаете, как отображать использование ресурсов для всех контейнеров, включая остановленные, с помощью флага -a или --all.

Сначала остановим один из контейнеров, которые мы запустили на предыдущих шагах.

docker stop container3

Теперь, если выполнить docker stats без флагов, вы увидите только container1 и container2, так как они всё ещё работают.

docker stats

Нажмите Ctrl+C, чтобы остановить вывод.

Чтобы увидеть статистику для всех контейнеров, включая остановленный container3, используйте флаг -a:

docker stats -a

Теперь в списке будут отображены container1, container2 и container3. Для остановленных контейнеров большинство полей использования ресурсов будут показывать 0% или 0B, так как они не потребляют ресурсы.

Эта функция полезна для получения полного обзора всех контейнеров в системе и их последнего известного использования ресурсов перед остановкой.

Форматирование вывода статистики контейнеров с использованием пользовательского шаблона

На этом шаге вы научитесь форматировать вывод команды docker stats с помощью пользовательского шаблона Go. Это позволяет отображать только нужную информацию в удобном для чтения или обработки формате.

Команда docker stats поддерживает флаг --format, который принимает строку шаблона Go в качестве аргумента. В шаблоне можно использовать различные плейсхолдеры для представления различных данных о контейнере. Некоторые распространённые плейсхолдеры:

  • .ContainerID: ID контейнера
  • .Name: Имя контейнера
  • .CPUPerc: Процент использования CPU
  • .MemUsage: Использование памяти
  • .NetIO: Сетевая статистика ввода-вывода
  • .BlockIO: Статистика блочного ввода-вывода
  • .PIDs: Количество процессов (PIDs)

Давайте отформатируем вывод, чтобы показать только имя контейнера, использование CPU и памяти.

docker stats --format "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

В этой команде:

  • --format указывает, что мы хотим использовать пользовательский формат
  • "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" - строка шаблона Go
    • {{.Name}} отображает имя контейнера
    • \t вставляет символ табуляции для разделения
    • {{.CPUPerc}} отображает процент использования CPU
    • {{.MemUsage}} отображает использование памяти

Вы увидите поток данных с именем контейнера, использованием CPU и памяти, разделённых табуляцией. Нажмите Ctrl+C, чтобы остановить вывод.

Вы можете экспериментировать с разными плейсхолдерами и форматированием. Например, чтобы включить ID контейнера и сетевую статистику:

docker stats --format "ID: {{.ContainerID}}\tName: {{.Name}}\tNetIO: {{.NetIO}}"

Это обеспечивает более настраиваемый вид статистики контейнеров.

Получение единичного снимка статистики контейнеров без потоковой передачи

По умолчанию команда docker stats предоставляет потоковую передачу данных об использовании ресурсов. Однако иногда может потребоваться только единичный снимок текущей статистики без постоянных обновлений. На этом шаге вы узнаете, как этого добиться с помощью флага --no-stream.

Флаг --no-stream указывает docker stats собрать статистику один раз и завершить работу, вместо постоянного обновления вывода.

Получим единичный снимок статистики для всех работающих контейнеров:

docker stats --no-stream

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

Можно комбинировать --no-stream с другими флагами, например с -a для получения снимка всех контейнеров (работающих и остановленных):

docker stats -a --no-stream

Это выведет единичный снимок статистики всех контейнеров.

Также можно комбинировать с указанием конкретных контейнеров:

docker stats container1 container2 --no-stream

Это даст единичный снимок статистики для container1 и container2.

Использование --no-stream эффективно, когда не нужны обновления в реальном времени, а требуется только зафиксировать текущее состояние использования ресурсов.

Итоги

В этой лабораторной работе вы научились эффективно использовать команду docker stats для мониторинга потребления ресурсов ваших Docker-контейнеров. Вы начали с отображения текущего потребления ресурсов для всех работающих контейнеров, наблюдая поток данных в реальном времени о CPU, памяти, сетевом I/O и блочном I/O.

Затем вы уточнили мониторинг, сосредоточившись на конкретных контейнерах, используя их имена или ID для просмотра индивидуального потребления ресурсов. Это позволило проводить целенаправленный анализ производительности контейнеров.