Como usar o comando docker service ps para listar tarefas de serviço

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar efetivamente o comando docker service ps para inspecionar e gerenciar tarefas dentro de um serviço Docker Swarm. Você começará listando as informações básicas das tarefas associadas a um serviço, compreendendo os detalhes-chave fornecidos na saída padrão.

A partir da listagem básica, você explorará como recuperar detalhes completos das tarefas do serviço usando a flag --no-trunc para obter informações abrangentes. O laboratório o guiará ainda mais sobre como filtrar tarefas com base em vários critérios, como nome, o nó em que estão sendo executadas e seu estado desejado, permitindo que você identifique tarefas específicas. Por fim, você aprenderá como formatar a saída do comando docker service ps para personalizar as informações exibidas de acordo com suas necessidades.

Listar tarefas de um serviço

Nesta etapa, você aprenderá como listar as tarefas associadas a um serviço específico em um Docker Swarm. As tarefas são as unidades fundamentais de agendamento no Swarm, representando uma instância em execução de um serviço.

Primeiro, vamos garantir que você tenha um serviço em execução. Criaremos um serviço simples usando a imagem nginx.

docker service create --name my-nginx nginx

Este comando cria um serviço chamado my-nginx usando a imagem nginx. O Docker Swarm criará e gerenciará automaticamente as tarefas para este serviço.

Agora, para listar as tarefas do serviço my-nginx, você pode usar o comando docker service ps seguido pelo nome do serviço.

docker service ps my-nginx

Você deve ver uma saída semelhante a esta, mostrando as tarefas associadas ao seu serviço:

ID             NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR   PORTS
<task_id>      my-nginx.1   nginx:latest   <node_name>   Running         Running 5 seconds ago

A saída fornece informações sobre cada tarefa, incluindo seu ID, nome, a imagem que está usando, o nó em que está sendo executada, seu estado desejado e seu estado atual.

Listar tarefas com detalhes completos

Na etapa anterior, você aprendeu como listar as informações básicas sobre as tarefas de um serviço. Às vezes, você precisa de informações mais detalhadas sobre cada tarefa, como o ID completo da tarefa, o ID do contêiner e muito mais.

Para obter os detalhes completos das tarefas, você pode usar a flag --no-trunc com o comando docker service ps. Essa flag impede que o Docker trunque a saída, mostrando os IDs completos e outras informações.

Vamos listar as tarefas do serviço my-nginx com detalhes completos:

docker service ps --no-trunc my-nginx

Você verá uma saída semelhante à etapa anterior, mas com o ID completo da tarefa e, possivelmente, informações mais detalhadas, dependendo do estado e da configuração da tarefa.

ID                                                           NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE            ERROR   PORTS
<full_task_id>                                               my-nginx.1   nginx:latest   <node_name>   Running         Running 10 seconds ago

Comparando esta saída com a etapa anterior, você pode ver o ID completo da tarefa em vez de uma versão truncada. Isso é útil quando você precisa referenciar uma tarefa específica com precisão, por exemplo, ao inspecionar uma tarefa.

Filtrar tarefas por nome ou nó

Em um cluster Swarm maior, você pode ter muitas tarefas em execução em vários nós. Para encontrar tarefas específicas, você pode filtrar a saída de docker service ps com base em vários critérios, como o nome da tarefa ou o nó em que ela está sendo executada.

A flag --filter é usada para filtragem. A sintaxe básica é --filter "chave=valor".

Para filtrar tarefas por nome, você pode usar a chave name. Por exemplo, para encontrar tarefas com um nome começando com my-nginx, você pode usar:

docker service ps --filter "name=my-nginx.1" my-nginx

Este comando mostrará apenas a tarefa chamada my-nginx.1 para o serviço my-nginx. Observe que os nomes das tarefas geralmente estão no formato nome_do_serviço.número_da_tarefa.

Para filtrar tarefas pelo nó em que estão sendo executadas, você pode usar a chave node. Primeiro, você precisa saber o nome do nó em que sua tarefa está sendo executada. Você pode obter isso na saída de docker service ps. Vamos supor que o nome do seu nó seja labex-node.

docker service ps --filter "node=labex-node" my-nginx

Este comando exibirá as tarefas do serviço my-nginx que estão sendo executadas no nó chamado labex-node. Substitua labex-node pelo nome real do seu nó, se for diferente.

Você pode combinar filtros usando várias flags --filter.

Filtrar tarefas por estado desejado

Além de filtrar por nome ou nó, você também pode filtrar tarefas com base em seu estado desejado. O estado desejado indica em que estado o gerenciador do Swarm deseja que a tarefa esteja (por exemplo, Running, Shutdown, Rejected).

Para filtrar tarefas por estado desejado, você usa a flag --filter com a chave desired-state.

Por exemplo, para listar apenas as tarefas que atualmente devem estar Running para o serviço my-nginx, você pode usar:

docker service ps --filter "desired-state=running" my-nginx

Como nosso serviço my-nginx está em execução, este comando mostrará as tarefas ativas.

Se você quisesse ver as tarefas que foram desligadas, você poderia usar:

docker service ps --filter "desired-state=shutdown" my-nginx

Atualmente, este comando pode não mostrar nenhuma saída, a menos que você tenha reduzido a escala ou removido tarefas.

Você também pode filtrar por tarefas que foram Rejected. Este estado indica que o gerenciador do Swarm não conseguiu iniciar a tarefa.

docker service ps --filter "desired-state=rejected" my-nginx

Compreender os estados desejados é crucial para monitorar a integridade e o status de seus serviços em um Swarm.

Formatar a saída das tarefas de serviço

Nesta etapa final, você aprenderá como personalizar o formato de saída do comando docker service ps. Isso é útil quando você deseja extrair informações específicas ou integrar a saída com outras ferramentas.

A flag --format permite que você especifique um template Go para formatar a saída. Você pode usar placeholders como .ID, .Name, .Image, .Node, .DesiredState, .CurrentState, .Error e .Ports para exibir os atributos de tarefa correspondentes.

Por exemplo, para exibir apenas o ID da tarefa, o nome e a imagem em um formato de tabela, você pode usar:

docker service ps --format "table {{.ID}}\t{{.Name}}\t{{.Image}}" my-nginx

Este comando produzirá uma saída semelhante a esta:

ID             NAME         IMAGE
<task_id>      my-nginx.1   nginx:latest

Você também pode formatar a saída como uma lista de valores, o que é útil para scripting. Por exemplo, para obter apenas os IDs das tarefas:

docker service ps --format "{{.ID}}" my-nginx

Isso exibirá apenas o(s) ID(s) da(s) tarefa(s).

Vamos tentar outro formato, exibindo o nome da tarefa e o nó em que ela está sendo executada:

docker service ps --format "Task: {{.Name}} is running on node: {{.Node}}" my-nginx

A saída será semelhante a esta:

Task: my-nginx.1 is running on node: <node_name>

Experimente com diferentes placeholders e opções de formatação para obter a saída que você precisa.

Finalmente, vamos limpar o serviço que criamos:

docker service rm my-nginx

Este comando remove o serviço my-nginx e suas tarefas associadas.

Resumo

Neste laboratório, você aprendeu como usar o comando docker service ps para listar as tarefas associadas a um serviço Docker Swarm. Você começou criando um serviço nginx simples e, em seguida, usou docker service ps <service_name> para visualizar suas tarefas, compreendendo as colunas básicas de saída, como ID, Name, Image, Node, Desired State e Current State.

Além disso, você explorou como obter informações de tarefa mais detalhadas usando a flag --no-trunc para evitar a truncagem da saída, permitindo que você veja IDs completos e outros detalhes abrangentes sobre cada tarefa.