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

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

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

Введение

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

После развертывания стека вы изучите различные возможности команды docker stack ps. Это включает в себя перечисление всех задач в стеке, фильтрацию задач по их именам, форматирование вывода для отображения конкретных полей, которые вас интересуют, и, наконец, отображение только идентификаторов задач для краткого представления. Этот практический опыт предоставит вам навыки мониторинга и понимания состояния задач в вашем стеке Docker.


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

Развертывание примерного стека

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

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

Сначала загрузите бинарный файл Docker Compose:

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

Эта команда загружает бинарный файл Docker Compose из официального репозитория на GitHub и сохраняет его в /usr/local/bin/docker-compose. Части $(uname -s) и $(uname -m) автоматически определяют вашу операционную систему и архитектуру.

Далее, примените права на выполнение к бинарному файлу:

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

Эта команда делает загруженный файл исполняемым.

Теперь, проверьте установку, проверив версию Docker Compose:

docker-compose --version

Вы должны увидеть вывод, похожий на docker-compose version 1.29.2, build 5becea4c.

Теперь, когда Docker Compose установлен, давайте создадим простой файл Docker Compose для определения нашего стека. Мы создадим файл с именем docker-compose.yml в директории ~/project.

Используйте редактор nano для создания и редактирования файла:

nano ~/project/docker-compose.yml

Вставьте следующее содержимое в файл docker-compose.yml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: echo "Hello from Alpine"

Этот файл docker-compose.yml определяет две службы (сервиса):

  • web: Использует образ nginx:latest и сопоставляет порт 80 на хосте с портом 80 в контейнере.
  • app: Использует образ alpine:latest и запускает простую команду echo.

Сохраните файл, нажав Ctrl + S, и выйдите из редактора, нажав Ctrl + X.

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

Загрузите образ nginx:latest:

docker pull nginx:latest

Загрузите образ alpine:latest:

docker pull alpine:latest

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

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

cd ~/project

Затем, запустите команду:

docker-compose up -d

Эта команда считывает файл docker-compose.yml и создает и запускает определенные службы. Вы должны увидеть вывод, указывающий на создание и запуск служб web и app.

Чтобы убедиться, что службы работают, вы можете вывести список запущенных контейнеров:

docker ps

Вы должны увидеть два запущенных контейнера, один для службы web (на основе nginx) и один для службы app (на основе alpine).

Перечисление всех задач в стеке

На этом этапе вы узнаете, как вывести список всех задач (контейнеров), связанных со стеком, который вы развернули на предыдущем этапе. В Docker Swarm или Kubernetes термин "задача" (task) часто используется для обозначения запущенного экземпляра службы. Хотя здесь мы используем Docker Compose, который технически не использует концепцию "задачи" так же, как Swarm, мы все еще можем вывести список контейнеров, составляющих наш развернутый стек.

Команда docker-compose ps используется для вывода списка контейнеров, управляемых Docker Compose для текущего проекта (директории, содержащей файл docker-compose.yml).

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

cd ~/project

Теперь запустите команду docker-compose ps:

docker-compose ps

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

Вы должны увидеть вывод, похожий на следующий (названия и идентификаторы контейнеров могут отличаться):

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_app_1       /bin/sh -c echo "Hello fr ...   Exit 0
project_web_1       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp

В этом выводе показаны две службы, определенные в вашем файле docker-compose.yml: app и web. Столбец State указывает, запущен ли контейнер (Up) или он завершил работу (Exit 0). Столбец Ports показывает сопоставление портов для службы web.

Контейнер app завершил работу, потому что его команда echo "Hello from Alpine" завершила выполнение. Контейнер web все еще запущен, потому что сервер Nginx предназначен для непрерывной работы.

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

Фильтрация задач по имени

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

Команда docker-compose ps позволяет указать имя службы в качестве аргумента для фильтрации вывода.

Убедитесь, что вы находитесь в директории ~/project:

cd ~/project

Чтобы вывести только контейнер для службы web, запустите следующую команду:

docker-compose ps web

Эта команда покажет только информацию о контейнере, связанном со службой web, определенной в вашем файле docker-compose.yml.

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

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_web_1       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp

Аналогично, чтобы вывести только контейнер для службы app, запустите:

docker-compose ps app

Это покажет информацию о контейнере app:

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_app_1       /bin/sh -c echo "Hello fr ...   Exit 0

Фильтрация по имени службы - простой, но эффективный способ управлять и отслеживать отдельные компоненты в вашем стеке Docker Compose.

Форматирование вывода для отображения определенных полей

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

Команда docker-compose ps поддерживает флаг --format, который позволяет вам указать формат вывода с использованием шаблонов Go.

Убедитесь, что вы находитесь в директории ~/project:

cd ~/project

Чтобы отобразить только имя службы и состояние контейнера, вы можете использовать следующую команду:

docker-compose ps --format "table {{.Service}}\t{{.State}}"

Разберем флаг --format:

  • "table": Это указывает, что вывод должен быть в табличном формате с заголовками.
  • {{.Service}}: Это заполнитель шаблона Go, который представляет имя службы.
  • \t: Это символ табуляции, используемый здесь для разделения столбцов.
  • {{.State}}: Это заполнитель шаблона Go, который представляет состояние контейнера.

Вывод будет выглядеть следующим образом:

SERVICE         STATE
app             Exit 0
web             Up

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

docker-compose ps --format "table {{.Service}}\t{{.Image}}\t{{.State}}"

Вывод будет таким:

SERVICE         IMAGE           STATE
app             alpine:latest   Exit 0
web             nginx:latest    Up

Использование флага --format обеспечивает гибкость в том, как вы просматриваете и обрабатываете информацию о своих службах Docker Compose.

Отображение только идентификаторов задач

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

Мы снова будем использовать флаг --format с командой docker-compose ps, но на этот раз мы укажем только поле идентификатора контейнера.

Убедитесь, что вы находитесь в директории ~/project:

cd ~/project

Чтобы отобразить только идентификаторы контейнеров, используйте следующую команду:

docker-compose ps -q

Флаг -q является сокращением для --quiet, который выводит только идентификаторы контейнеров.

В качестве альтернативы вы можете достичь того же результата, используя флаг --format:

docker-compose ps --format "{{.ID}}"

Эта команда использует шаблон Go {{.ID}} для извлечения только идентификатора контейнера для каждой службы.

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

<container_id_for_app>
<container_id_for_web>

(Фактические идентификаторы будут различными в вашей среде).

Отображение только идентификаторов - это распространенный запрос, когда вам нужно программно взаимодействовать с вашими контейнерами, например, остановить или удалить их.

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

Убедитесь, что вы находитесь в директории ~/project:

cd ~/project

Запустите следующую команду:

docker-compose down

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

После выполнения команды docker-compose down вы можете убедиться, что контейнеры больше не работают, используя команду docker ps:

docker ps

Теперь эта команда не должна показывать запущенных контейнеров.

Резюме

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

После развертывания вы узнаете, как использовать команду docker stack ps для вывода списка всех задач в развернутом стеке. Вы также изучите, как фильтровать эти задачи по имени, форматировать вывод для отображения определенных полей и отображать только идентификаторы задач, демонстрируя гибкость команды docker stack ps для мониторинга и управления задачами стека.