Introdução
Neste laboratório, você aprenderá como usar o comando docker node ps para listar e filtrar tarefas em execução em um nó do Docker Swarm. Você começará inicializando um Docker Swarm e criando um serviço simples para gerar tarefas.
Em seguida, você explorará como listar todas as tarefas em um nó específico, filtrar tarefas com base em seus nomes e estados desejados e, finalmente, formatar a saída da lista de tarefas para melhor legibilidade e extração de informações. Essa experiência prática fornecerá a você habilidades práticas para monitorar e gerenciar tarefas dentro do seu cluster Docker Swarm.
Listar todas as tarefas em um nó
Nesta etapa, você aprenderá como listar todas as tarefas em execução em um nó do Docker Swarm. Docker Swarm é uma ferramenta de orquestração de contêineres que permite gerenciar um cluster de nós Docker. Uma tarefa (task) é uma instância em execução de um serviço.
Antes de listar as tarefas, precisamos ter um serviço Docker Swarm em execução. Para este laboratório, usaremos um serviço nginx simples.
Primeiro, vamos inicializar um Docker Swarm neste nó.
docker swarm init
Você deve ver uma saída indicando que o swarm foi inicializado e fornecendo um token de entrada (join token).
Agora, vamos criar um serviço simples chamado my-nginx-service usando a imagem nginx. Vamos primeiro fazer o pull da imagem nginx para garantir que ela esteja disponível.
docker pull nginx:latest
docker service create --name my-nginx-service --replicas 1 nginx
O comando docker service create cria um novo serviço com uma réplica (uma tarefa). O Docker puxará automaticamente a imagem nginx se ela ainda não estiver presente, mas nós a puxamos explicitamente antes.
Após a criação do serviço, o Docker iniciará uma tarefa para este serviço em um dos nós do swarm (neste caso, o nó atual).
Para listar todas as tarefas em execução no nó, você pode usar o comando docker node ps seguido pelo ID ou hostname do nó. Como estamos no nó gerenciador (manager node) onde o serviço foi criado, podemos usar o ID do nó deste nó.
Para encontrar o ID do nó, você pode usar o comando docker node ls.
docker node ls
Este comando listará todos os nós no swarm. A saída mostrará o ID do nó, hostname, status, disponibilidade e status do gerenciador. Copie o ID do nó atual (aquele com Leader em MANAGER STATUS).
Agora, use o comando docker node ps com o ID do nó que você copiou para listar as tarefas nesse nó. Substitua <node_id> pelo ID real do nó.
docker node ps <node_id>
Este comando exibirá uma lista de tarefas em execução no nó especificado, incluindo o ID da tarefa, nome do serviço, imagem, nó, estado desejado, estado atual e erro. Você deve ver a tarefa my-nginx-service.1 listada com o estado Running.
Alternativamente, você pode listar todas as tarefas no swarm usando o comando docker task ls. Este comando é útil para ver tarefas em todos os nós do swarm.
docker task ls
Este comando mostrará informações semelhantes ao docker node ps, mas lista as tarefas de todos os nós no swarm. Como temos apenas um nó e uma tarefa, a saída será semelhante ao docker node ps.
Nesta etapa, você aprendeu como listar tarefas em um nó específico usando docker node ps e listar todas as tarefas no swarm usando docker task ls.
Filtrar tarefas por nome
Nesta etapa, você aprenderá como filtrar a lista de tarefas por seus nomes. Isso é útil quando você tem muitos serviços e tarefas em execução e deseja ver apenas as tarefas relacionadas a um serviço específico.
Continuaremos usando o my-nginx-service criado na etapa anterior.
Para filtrar tarefas por nome, você pode usar a flag --filter com a chave name no comando docker task ls. A sintaxe é --filter name=<service_name>.
Vamos filtrar as tarefas para mostrar apenas aquelas pertencentes ao my-nginx-service.
docker task ls --filter name=my-nginx-service
Este comando listará apenas as tarefas cujo nome do serviço é my-nginx-service. Você deve ver a tarefa my-nginx-service.1 listada.
Você também pode filtrar pelo nome completo da tarefa, que inclui o nome do serviço e o número da tarefa (por exemplo, my-nginx-service.1).
docker task ls --filter name=my-nginx-service.1
Este comando listará especificamente a tarefa com o nome exato my-nginx-service.1.
Se você tivesse vários serviços em execução, a filtragem por nome do serviço mostraria todas as tarefas para esse serviço. Por exemplo, se você tivesse outro serviço chamado my-app-service, executar docker task ls --filter name=my-app-service mostraria todas as tarefas para my-app-service.
A filtragem por nome é uma maneira poderosa de restringir a saída do comando docker task ls e se concentrar nas tarefas que lhe interessam.
Filtrar tarefas por estado desejado
Nesta etapa, você aprenderá como filtrar a lista de tarefas com base em seu estado desejado. O estado desejado de uma tarefa é o estado em que o gerenciador do Docker Swarm deseja que a tarefa esteja (por exemplo, Running, Shutdown, Accepted).
Continuaremos usando o my-nginx-service criado nas etapas anteriores. Atualmente, o estado desejado da tarefa para este serviço é Running.
Para filtrar tarefas por estado desejado, você pode usar a flag --filter com a chave desired-state no comando docker task ls. A sintaxe é --filter desired-state=<state>.
Vamos filtrar as tarefas para mostrar apenas aquelas com o estado desejado Running.
docker task ls --filter desired-state=Running
Este comando listará apenas as tarefas cujo estado desejado é Running. Você deve ver a tarefa my-nginx-service.1 listada.
Agora, vamos reduzir o serviço para 0 réplicas. Isso mudará o estado desejado da tarefa existente para Shutdown.
docker service scale my-nginx-service=0
Após a redução, a tarefa eventualmente fará a transição para o estado Shutdown. Pode levar alguns instantes para que o estado seja atualizado.
Agora, vamos filtrar as tarefas para mostrar aquelas com o estado desejado Shutdown.
docker task ls --filter desired-state=Shutdown
Você deve agora ver a tarefa my-nginx-service.1 listada com o estado desejado Shutdown.
Outros estados desejados possíveis incluem Accepted (quando uma tarefa é aceita por um nó de trabalho, mas ainda não está em execução) e Failed (se uma tarefa falhou ao iniciar).
A filtragem por estado desejado é útil para monitorar o status de seus serviços e identificar tarefas que não estão no estado esperado.
Formatar a saída de tarefas no Docker
Nesta etapa, você aprenderá como formatar a saída do comando docker task ls para exibir informações específicas em um formato personalizado. Isso é útil para scripting ou geração de relatórios.
Continuaremos usando o my-nginx-service e sua tarefa.
Para formatar a saída, você pode usar a flag --format com uma string de template Go. A string de template permite que você especifique quais campos exibir e como formatá-los.
Vamos exibir apenas o ID da tarefa, o nome do serviço e o estado atual das tarefas.
docker task ls --format "{{.ID}}\t{{.Service}}\t{{.CurrentState}}"
Neste comando:
{{.ID}}se refere ao ID da tarefa.{{.Service}}se refere ao nome do serviço.{{.CurrentState}}se refere ao estado atual da tarefa.\té usado para inserir um caractere de tabulação entre os campos para melhor legibilidade.
A saída mostrará o ID da tarefa, o nome do serviço e o estado atual para cada tarefa.
Você também pode usar o formato table para exibir a saída em uma tabela com colunas específicas.
docker task ls --format "table {{.ID}}\t{{.Service}}\t{{.CurrentState}}\t{{.Node}}"
Este comando exibirá uma tabela com colunas para ID da Tarefa, Serviço, Estado Atual e Nó.
Para ver todos os campos disponíveis que você pode usar na string de formato, você pode inspecionar uma tarefa usando o comando docker task inspect e olhar para a saída JSON. No entanto, alguns campos comuns incluem:
.ID: ID da Tarefa.Service: Nome do serviço.Image: Nome da imagem.Node: Nome do host do nó.DesiredState: Estado desejado da tarefa.CurrentState: Estado atual da tarefa.Error: Mensagem de erro se a tarefa falhou.CreatedAt: Timestamp quando a tarefa foi criada.UpdatedAt: Timestamp quando a tarefa foi atualizada pela última vez
Vamos exibir o ID da tarefa, a imagem e o nó em que ela está sendo executada.
docker task ls --format "{{.ID}}\t{{.Image}}\t{{.Node}}"
Este comando mostrará o ID da tarefa, a imagem usada pela tarefa e o nó onde a tarefa está sendo executada.
A formatação da saída permite que você personalize as informações exibidas por docker task ls para atender às suas necessidades, seja para inspeção rápida ou para uso em scripts.
Finalmente, vamos limpar o serviço que criamos.
docker service rm my-nginx-service
Este comando removerá o serviço e suas tarefas associadas.
Resumo
Neste laboratório, você aprendeu como usar o comando docker node ps para listar as tarefas em execução em um nó específico do Docker Swarm. Você começou inicializando um Docker Swarm e criando um serviço nginx simples com uma réplica. Em seguida, você usou docker node ls para identificar o ID do nó do nó gerenciador atual e, subsequentemente, usou docker node ps <node_id> para exibir todas as tarefas em execução nesse nó.
O laboratório também abordou como refinar a saída de docker node ps filtrando tarefas com base em seus nomes e estado desejado, e como formatar a saída para melhor legibilidade. Essas etapas demonstram a flexibilidade do comando docker node ps para monitorar e gerenciar tarefas dentro de um cluster Docker Swarm.



