Как использовать команду docker compose ps для вывода списка контейнеров

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

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

Введение

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

После настройки вы изучите, как выводить только работающие контейнеры, включать остановленные контейнеры в вывод, фильтровать контейнеры по их статусу и форматировать вывод в JSON для удобного анализа и интеграции. Этот практический опыт даст вам навыки для эффективного мониторинга и управления сервисами Docker Compose.


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/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555086{{"Как использовать команду docker compose ps для вывода списка контейнеров"}} docker/pull -.-> lab-555086{{"Как использовать команду docker compose ps для вывода списка контейнеров"}} end

Вывод списка работающих контейнеров с помощью docker compose ps

На этом шаге вы научитесь выводить список работающих контейнеров с помощью команды docker compose ps. Перед использованием docker compose необходимо его установить.

Сначала установим 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

Эта команда загружает бинарный файл Docker Compose для архитектуры вашей системы и сохраняет его в /usr/local/bin/docker-compose.

Далее необходимо установить права на выполнение для бинарного файла.

sudo chmod +x /usr/local/bin/docker-compose

Теперь проверим установку, посмотрев версию.

docker-compose --version

В выводе вы должны увидеть установленную версию Docker Compose.

Для демонстрации работы docker compose ps нам понадобится файл docker-compose.yml и несколько сервисов. Создадим простой файл docker-compose.yml в вашей директории ~/project.

nano ~/project/docker-compose.yml

Добавим следующее содержимое в файл:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: sleep infinity

Этот файл docker-compose.yml определяет два сервиса: web с использованием образа nginx и app с использованием образа alpine. Сервис web пробрасывает порт 80 хоста на порт 80 контейнера. Сервис app выполняет команду sleep infinity, чтобы контейнер продолжал работать.

Сохраните файл и выйдите из редактора (Ctrl+X, Y, Enter).

Теперь загрузим необходимые образы.

docker pull nginx:latest
docker pull alpine:latest

Эти команды загружают образы nginx:latest и alpine:latest из Docker Hub.

Затем запустим сервисы, определённые в файле docker-compose.yml. Убедитесь, что находитесь в директории ~/project.

cd ~/project
docker-compose up -d

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

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

docker-compose ps

Эта команда выводит список работающих контейнеров, определённых в вашем файле docker-compose.yml. Вы должны увидеть вывод, похожий на этот, с именами контейнеров, командами, статусами и портами.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 running
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Вывод показывает, что контейнеры project-app-1 и project-web-1 работают. NAME обычно состоит из имени проекта (названия директории), имени сервиса и номера.

Вывод списка всех контейнеров, включая остановленные

На предыдущем шаге мы использовали docker compose ps для вывода только работающих контейнеров. Однако иногда может потребоваться увидеть все контейнеры, включая остановленные или завершившие работу.

Для вывода всех контейнеров, включая остановленные, можно использовать флаг -a с командой docker compose ps.

Сначала остановим один из работающих контейнеров, чтобы увидеть эффект флага -a. Остановим сервис app. Убедитесь, что находитесь в директории ~/project.

cd ~/project
docker-compose stop app

Эта команда останавливает контейнер сервиса app. Контейнер перестанет работать, но продолжит существовать.

Теперь снова выведем список контейнеров с помощью docker compose ps.

docker-compose ps

Вы должны увидеть, что только контейнер web отображается как работающий. Контейнер app не отображается, так как он остановлен.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Теперь используем флаг -a для вывода всех контейнеров, включая остановленный.

docker-compose ps -a

Эта команда покажет все контейнеры, определённые в вашем файле docker-compose.yml, независимо от их состояния.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Как видно, в списке присутствуют оба контейнера: project-app-1 и project-web-1. В колонке STATUS для project-app-1 указано exited, что означает его остановленное состояние.

Использование docker compose ps -a полезно для просмотра состояния всех ваших сервисов, даже если они в данный момент не активны.

Фильтрация контейнеров по статусу

В предыдущих шагах мы научились выводить список работающих контейнеров и всех контейнеров. Иногда может потребоваться отфильтровать список контейнеров по их статусу.

Команда docker compose ps позволяет фильтровать вывод с помощью флага --filter. Вы можете фильтровать по различным критериям, включая статус контейнера.

Основные статусы контейнеров:

  • created: Контейнер создан, но не запущен.
  • restarting: Контейнер находится в процессе перезапуска.
  • running: Контейнер работает в данный момент.
  • removing: Контейнер удаляется.
  • paused: Контейнер приостановлен.
  • exited: Контейнер остановлен.
  • dead: Контейнер "мертв" (не функционирует).

Давайте отфильтруем контейнеры, чтобы показать только работающие. Мы уже знаем, что docker compose ps по умолчанию показывает работающие контейнеры, но того же можно добиться с помощью фильтра. Убедитесь, что находитесь в директории ~/project.

cd ~/project
docker-compose ps --filter status=running

Эта команда выведет только контейнеры со статусом running. Вы должны увидеть только контейнер web.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Теперь отфильтруем контейнеры, чтобы показать только остановленные. Напомним, что мы останавливали контейнер app на предыдущем шаге, поэтому его статус должен быть exited.

docker-compose ps --filter status=exited

Эта команда выведет только контейнеры со статусом exited. Вы должны увидеть только контейнер app.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)

Вы также можете фильтровать по нескольким статусам, указывая флаг --filter несколько раз. Например, чтобы вывести контейнеры, которые либо работают, либо остановлены:

docker-compose ps --filter status=running --filter status=exited

Эта команда выведет оба контейнера - web и app.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Фильтрация по статусу - мощный способ быстро находить контейнеры в определенном состоянии, что очень полезно для отладки и управления сервисами.

Форматирование вывода в JSON

В предыдущих шагах мы выводили и фильтровали контейнеры с помощью docker compose ps. По умолчанию вывод форматируется в удобочитаемую таблицу. Однако для скриптов или интеграции с другими инструментами может потребоваться структурированный вывод в формате JSON.

Команда docker compose ps позволяет форматировать вывод с помощью флага --format. Вы можете указать различные форматы, включая json.

Давайте выведем список всех контейнеров (работающих и остановленных) в формате JSON. Убедитесь, что находитесь в директории ~/project.

cd ~/project
docker-compose ps -a --format json

Эта команда выведет информацию обо всех контейнерах в формате JSON. Результатом будет JSON-массив, где каждый элемент представляет контейнер и его параметры.

[
  {
    "ID": "...",
    "Name": "project-app-1",
    "Image": "alpine:latest",
    "Command": "sleep infinity",
    "Project": "project",
    "Service": "app",
    "Created": "...",
    "State": "exited",
    "Status": "Exited (0) ...",
    "Health": "",
    "ExitCode": 0,
    "Publishers": []
  },
  {
    "ID": "...",
    "Name": "project-web-1",
    "Image": "nginx:latest",
    "Command": "/docker-entrypoint.sh nginx -g 'daemon off;'",
    "Project": "project",
    "Service": "web",
    "Created": "...",
    "State": "running",
    "Status": "Up ...",
    "Health": "",
    "ExitCode": null,
    "Publishers": [
      {
        "URL": "0.0.0.0",
        "TargetPort": 80,
        "PublishedPort": 80,
        "Protocol": "tcp"
      }
    ]
  }
]

JSON-вывод предоставляет структурированное представление информации о контейнерах, что упрощает программный анализ и обработку. Каждый контейнер представлен как JSON-объект с полями ID, Name, Image, State, Status и другими.

Использование флага --format json особенно полезно, когда требуется извлечь конкретную информацию о контейнерах для автоматизации или составления отчетов.

Наконец, давайте очистим контейнеры, созданные в ходе этой лабораторной работы.

docker-compose down

Эта команда останавливает и удаляет контейнеры, сети и тома, созданные командой docker-compose up.

Итоги

В этой лабораторной работе вы научились использовать команду docker compose ps для вывода списка контейнеров, управляемых Docker Compose. Вы начали с установки Docker Compose и проверки его работоспособности. Затем создали простой файл docker-compose.yml с определением двух сервисов и загрузили необходимые образы. Для запуска сервисов в фоновом режиме вы использовали команду docker-compose up -d.

Далее вы изучили команду docker compose ps для вывода списка работающих контейнеров. Вы узнали, как включать остановленные контейнеры в вывод с помощью флага -a, фильтровать контейнеры по статусу с использованием опции --filter status=<status> и форматировать вывод в JSON с помощью параметра --format json. В завершение вы очистили созданные ресурсы, остановив и удалив сервисы командой docker-compose down.