Как использовать команду docker compose top для отображения запущенных процессов

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

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

Введение

В этой лабораторной работе вы научитесь использовать команду docker compose top для отображения запущенных процессов в ваших Docker-контейнерах. Мы начнём с подготовки простого файла docker-compose.yml для определения сервиса, затем запустим сервис с помощью Docker Compose. В завершение вы используете команду docker compose top как в общем виде, так и с указанием конкретного имени сервиса, чтобы проверить процессы, выполняемые внутри контейнеров.


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/start("Start Container") docker/ContainerOperationsGroup -.-> docker/top("Display Running Processes in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555094{{"Как использовать команду docker compose top для отображения запущенных процессов"}} docker/start -.-> lab-555094{{"Как использовать команду docker compose top для отображения запущенных процессов"}} docker/top -.-> lab-555094{{"Как использовать команду docker compose top для отображения запущенных процессов"}} docker/pull -.-> lab-555094{{"Как использовать команду docker compose top для отображения запущенных процессов"}} end

Подготовка простого файла docker-compose.yml

На этом шаге мы подготовим простой файл docker-compose.yml. Прежде чем начать, давайте разберёмся, что такое Docker Compose. Docker Compose — это инструмент для определения и запуска многоконтейнерных Docker-приложений. С помощью Compose вы используете YAML-файл для настройки сервисов вашего приложения. Затем одной командой создаёте и запускаете все сервисы из конфигурации.

Поскольку Docker Compose не предустановлен в среде LabEx, нам нужно сначала его установить. Мы загрузим бинарный файл Docker Compose и сделаем его исполняемым.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Теперь, когда Docker Compose установлен, создадим простой файл docker-compose.yml в директории ~/project. Этот файл будет определять один сервис, использующий образ ubuntu и просто выполняющий команду sleep infinity, чтобы контейнер оставался запущенным.

Мы воспользуемся редактором nano для создания и редактирования файла.

nano ~/project/docker-compose.yml

В редакторе nano вставьте следующее содержимое:

version: "3.8"
services:
  ubuntu_service:
    image: ubuntu
    command: sleep infinity

Разберём этот файл docker-compose.yml:

  • version: '3.8' — указывает версию формата файла Compose.
  • services: — определяет сервисы вашего приложения.
  • ubuntu_service: — имя нашего сервиса. Вы можете выбрать любое имя.
  • image: ubuntu — указывает Docker-образ для этого сервиса. В данном случае используется официальный образ ubuntu. Если образ отсутствует локально, Docker Compose автоматически загрузит его.
  • command: sleep infinity — команда, выполняемая при запуске контейнера. sleep infinity просто поддерживает работу контейнера бесконечно.

После вставки сохраните файл, нажав Ctrl + X, затем Y для подтверждения и Enter, чтобы сохранить под именем docker-compose.yml.

Чтобы убедиться, что образ ubuntu доступен, заранее загрузим его с помощью команды docker pull. Это хорошая практика перед запуском сервиса через Docker Compose.

docker pull ubuntu

Вы увидите вывод, указывающий на загрузку образа ubuntu.

Запуск сервисов, определённых в файле docker-compose.yml

На этом шаге мы запустим сервисы, определённые в файле docker-compose.yml, который создали ранее. Для этого мы используем команду docker compose up.

Перейдите в директорию, где сохранён файл docker-compose.yml~/project.

cd ~/project

Теперь выполните команду docker compose up. Флаг -d запускает контейнеры в detached mode (фоновом режиме), что позволяет им работать в фоне без блокировки терминала.

docker compose up -d

Вы увидите вывод, указывающий на создание и запуск сервиса. Docker Compose создаст сеть, том (если он определён, хотя в нашем простом примере его нет) и контейнер для сервиса ubuntu_service.

Чтобы убедиться, что контейнер запущен, используйте команду docker ps.

docker ps

В списке должен отображаться контейнер с образом ubuntu и командой sleep infinity. Статус должен быть Up. Имя контейнера будет содержать префикс с названием директории (project в данном случае) и именем сервиса (ubuntu_service).

Использование команды docker compose top для отображения запущенных процессов

На этом шаге мы воспользуемся командой docker compose top для отображения запущенных процессов внутри контейнеров, управляемых Docker Compose. Эта команда аналогична команде top в Linux, но показывает процессы, выполняемые внутри контейнеров.

Убедитесь, что вы находитесь в директории ~/project, где расположен ваш файл docker-compose.yml.

cd ~/project

Теперь выполните команду docker compose top.

docker compose top

Вы должны увидеть вывод, аналогичный следующему:

ID                  NAME                PID                 COMMAND             ELAPSED
<container_id>      project-ubuntu_service-1   <pid>               sleep infinity      <time>

Этот вывод показывает процессы, выполняемые внутри каждого контейнера, управляемого вашим файлом docker-compose.yml. В нашем случае у нас только один сервис (ubuntu_service), и единственный запущенный процесс — sleep infinity, который мы указали в файле docker-compose.yml.

Вывод включает:

  • ID: Идентификатор контейнера.
  • NAME: Имя контейнера, обычно в формате <имя_директории>-<имя_сервиса>-<номер_экземпляра>.
  • PID: Идентификатор процесса команды, выполняемой внутри контейнера.
  • COMMAND: Команда, выполняемая внутри контейнера.
  • ELAPSED: Время, прошедшее с момента запуска команды.

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

Использование команды docker compose top с указанием имени сервиса для отображения конкретных процессов

На этом шаге мы научимся использовать команду docker compose top для отображения процессов конкретного сервиса, определённого в вашем файле docker-compose.yml. Это особенно полезно, когда у вас запущено несколько сервисов, и вам нужно проверить процессы только одного из них.

Убедитесь, что вы по-прежнему находитесь в директории ~/project.

cd ~/project

Чтобы отобразить процессы конкретного сервиса, добавьте его имя к команде docker compose top. В нашем файле docker-compose.yml имя сервиса — ubuntu_service.

docker compose top ubuntu_service

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

ID                  NAME                PID                 COMMAND             ELAPSED
<container_id>      project-ubuntu_service-1   <pid>               sleep infinity      <time>

Если бы в вашем файле docker-compose.yml были определены другие сервисы и они были бы запущены, выполнение команды docker compose top без указания имени сервиса показало бы процессы для всех сервисов. Указав ubuntu_service, мы фильтруем вывод, показывая только процессы внутри контейнера этого конкретного сервиса.

Такой целевой подход полезен для отладки и мониторинга отдельных компонентов вашего многоконтейнерного приложения.

Итоги

В этой лабораторной работе мы изучили, как использовать команду docker compose top для отображения запущенных процессов в контейнерах Docker, управляемых Docker Compose. Мы начали с подготовки простого файла docker-compose.yml, что включало установку Docker Compose и определение сервиса с использованием образа ubuntu и команды sleep infinity для поддержания работы контейнера.

После подготовки мы запустили сервисы, определённые в файле docker-compose.yml. В завершение мы исследовали использование команды docker compose top: сначала для отображения всех запущенных процессов во всех сервисах, а затем конкретно для одного сервиса путём указания его имени. Этот практический опыт продемонстрировал, как проверять процессы, выполняемые в наших контейнерах под управлением Docker Compose.