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

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") subgraph Lab Skills docker/ls -.-> lab-555184{{"Как использовать команду docker node ps для вывода списка задач"}} docker/ps -.-> lab-555184{{"Как использовать команду docker node ps для вывода списка задач"}} docker/rm -.-> lab-555184{{"Как использовать команду docker node ps для вывода списка задач"}} end

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

На этом этапе вы узнаете, как перечислить все задачи, выполняющиеся на узле Docker Swarm. Docker Swarm - это инструмент оркестрации контейнеров, который позволяет управлять кластером узлов Docker. Задача представляет собой запущенный экземпляр службы.

Перед перечислением задач нам нужно иметь запущенную службу Docker Swarm. В рамках этого практического занятия (лабораторной работы) мы будем использовать простую службу nginx.

Сначала инициализируем Docker Swarm на этом узле.

docker swarm init

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

Теперь создадим простую службу с именем my-nginx-service с использованием образа nginx. Сначала мы загрузим образ nginx, чтобы убедиться, что он доступен.

docker pull nginx:latest
docker service create --name my-nginx-service --replicas 1 nginx

Команда docker service create создает новую службу с одним репликой (одной задачей). Docker автоматически загрузит образ nginx, если он еще не присутствует, но мы явно загрузили его заранее.

После создания службы Docker запустит задачу для этой службы на одном из узлов в Swarm (в данном случае - на текущем узле).

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

Чтобы найти идентификатор узла, вы можете использовать команду docker node ls.

docker node ls

Эта команда перечислит все узлы в Swarm. В выводе будут показаны идентификатор узла, имя узла, статус, доступность и статус управляющего узла. Скопируйте идентификатор текущего узла (тот, у которого в столбце MANAGER STATUS указано Leader).

Теперь используйте команду docker node ps с скопированным идентификатором узла, чтобы перечислить задачи на этом узле. Замените <node_id> на фактический идентификатор узла.

docker node ps <node_id>

Эта команда отобразит список задач, выполняющихся на указанном узле, включая идентификатор задачи, имя службы, образ, узел, желаемое состояние, текущее состояние и ошибку. Вы должны увидеть задачу my-nginx-service.1 в списке с состоянием Running.

В качестве альтернативы вы можете перечислить все задачи в Swarm с помощью команды docker task ls. Эта команда полезна для просмотра задач на всех узлах в Swarm.

docker task ls

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

На этом этапе вы узнали, как перечислить задачи на определенном узле с помощью команды docker node ps и все задачи в Swarm с помощью команды docker task ls.

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

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

Мы продолжим использовать службу my-nginx-service, созданную на предыдущем этапе.

Для фильтрации задач по имени вы можете использовать флаг --filter с ключом name в команде docker task ls. Синтаксис: --filter name=<service_name>.

Отфильтруем задачи так, чтобы показались только те, которые принадлежат службе my-nginx-service.

docker task ls --filter name=my-nginx-service

Эта команда перечислит только те задачи, чье имя службы равно my-nginx-service. Вы должны увидеть задачу my-nginx-service.1 в списке.

Вы также можете фильтровать по полному имени задачи, которое включает имя службы и номер задачи (например, my-nginx-service.1).

docker task ls --filter name=my-nginx-service.1

Эта команда конкретно перечислит задачу с точным именем my-nginx-service.1.

Если бы у вас было запущено несколько служб, то фильтрация по имени службы показала бы все задачи для этой службы. Например, если бы у вас была другая служба с именем my-app-service, то выполнение команды docker task ls --filter name=my-app-service показало бы все задачи для my-app-service.

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

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

На этом этапе вы узнаете, как фильтровать список задач на основе их желаемого состояния. Желаемое состояние задачи - это то состояние, в котором Docker Swarm менеджер хочет, чтобы находилась задача (например, Running (запущена), Shutdown (остановлена), Accepted (принята)).

Мы продолжим использовать службу my-nginx-service, созданную на предыдущих этапах. В настоящее время желаемое состояние задачи для этой службы - Running.

Для фильтрации задач по желаемому состоянию вы можете использовать флаг --filter с ключом desired-state в команде docker task ls. Синтаксис: --filter desired-state=<state>.

Отфильтруем задачи так, чтобы показались только те, у которых желаемое состояние - Running.

docker task ls --filter desired-state=Running

Эта команда перечислит только те задачи, у которых желаемое состояние - Running. Вы должны увидеть задачу my-nginx-service.1 в списке.

Теперь уменьшим масштаб службы до 0 реплик. Это изменит желаемое состояние существующей задачи на Shutdown.

docker service scale my-nginx-service=0

После уменьшения масштаба задача в конечном итоге перейдет в состояние Shutdown. Обновление состояния может занять несколько секунд.

Теперь отфильтруем задачи так, чтобы показались те, у которых желаемое состояние - Shutdown.

docker task ls --filter desired-state=Shutdown

Теперь вы должны увидеть задачу my-nginx-service.1 в списке с желаемым состоянием Shutdown.

Другие возможные желаемые состояния включают Accepted (когда задача принята рабочим узлом, но еще не запущена) и Failed (если задача не смогла запуститься).

Фильтрация по желаемому состоянию полезна для мониторинга статуса ваших служб и выявления задач, которые не находятся в ожидаемом состоянии.

Форматирование вывода списка задач

На этом этапе вы узнаете, как форматировать вывод команды docker task ls для отображения определенной информации в пользовательском формате. Это полезно для написания скриптов или создания отчетов.

Мы продолжим использовать службу my-nginx-service и ее задачи.

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

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

docker task ls --format "{{.ID}}\t{{.Service}}\t{{.CurrentState}}"

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

  • {{.ID}} - это идентификатор задачи.
  • {{.Service}} - это имя службы.
  • {{.CurrentState}} - это текущее состояние задачи.
  • \t используется для вставки символа табуляции между полями для лучшей читаемости.

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

Вы также можете использовать формат table для отображения вывода в таблице с определенными столбцами.

docker task ls --format "table {{.ID}}\t{{.Service}}\t{{.CurrentState}}\t{{.Node}}"

Эта команда отобразит таблицу со столбцами "Task ID" (Идентификатор задачи), "Service" (Служба), "Current State" (Текущее состояние) и "Node" (Узел).

Для просмотра всех доступных полей, которые можно использовать в строке формата, вы можете проверить задачу с помощью команды docker task inspect и посмотреть JSON - вывод. Однако некоторые общие поля включают:

  • .ID: Идентификатор задачи
  • .Service: Имя службы
  • .Image: Имя образа
  • .Node: Имя узла
  • .DesiredState: Желаемое состояние задачи
  • .CurrentState: Текущее состояние задачи
  • .Error: Сообщение об ошибке, если задача завершилась с ошибкой
  • .CreatedAt: Временная метка создания задачи
  • .UpdatedAt: Временная метка последнего обновления задачи

Выведем идентификатор задачи, образ и узел, на котором она запущена.

docker task ls --format "{{.ID}}\t{{.Image}}\t{{.Node}}"

Эта команда покажет идентификатор задачи, образ, используемый задачей, и узел, на котором задача запущена.

Форматирование вывода позволяет настроить отображаемую командой docker task ls информацию в соответствии с вашими потребностями, будь то быстрый просмотр или использование в скриптах.

Наконец, удалим созданную нами службу.

docker service rm my-nginx-service

Эта команда удалит службу и связанные с ней задачи.

Резюме

В этом практическом занятии вы узнали, как использовать команду docker node ps для вывода списка задач, запущенных на определенном узле Docker Swarm. Вы начали с инициализации Docker Swarm и создания простой службы nginx с одним репликом. Затем вы использовали команду docker node ls для определения идентификатора текущего управляющего узла и затем docker node ps <node_id> для отображения всех задач, запущенных на этом узле.

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