Como usar o comando docker node ls para listar nós do Swarm

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar efetivamente o comando docker node ls para gerenciar e inspecionar nós dentro de um Docker Swarm. Começaremos inicializando um Docker Swarm e listando todos os nós.

Posteriormente, você explorará várias opções de filtragem para restringir a lista de nós com base em critérios como ID do nó, função (manager ou worker) e rótulos de nó personalizados. Por fim, você aprenderá como formatar a saída para exibir apenas as informações específicas que você precisa, aprimorando sua capacidade de recuperar rapidamente detalhes relevantes do nó.

Listar todos os nós no swarm

Nesta etapa, aprenderemos como listar todos os nós em um Docker Swarm. Antes de podermos listar os nós, precisamos inicializar um Docker Swarm.

Primeiro, vamos inicializar o swarm na máquina atual. Esta máquina se tornará o nó manager.

docker swarm init

Você deve ver uma saída indicando que o swarm foi inicializado e fornecendo um comando para ingressar outros nós no swarm.

Agora que o swarm está inicializado, podemos listar os nós no swarm usando o comando docker node ls.

docker node ls

Este comando exibirá uma tabela com informações sobre os nós no swarm, incluindo seu ID, hostname, status, disponibilidade, status do manager e versão do engine. Como só temos um nó (o nó manager que acabamos de inicializar), você verá uma única entrada na lista.

A saída será semelhante a esta:

ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
<node_id> *                   <hostname>          Ready     Active         Leader           20.10.21

O * próximo ao ID indica que este é o nó atual em que você está executando o comando. A coluna MANAGER STATUS mostra que este nó é o Leader do swarm.

Filtrar nós por ID

Nesta etapa, aprenderemos como filtrar a lista de nós em um Docker Swarm com base em seu ID. Isso é útil quando você tem muitos nós e deseja visualizar informações sobre um específico.

Primeiro, vamos listar todos os nós novamente para obter o ID do nó manager.

docker node ls

Identifique o ID do nó na saída. Será uma longa sequência de caracteres.

Agora, podemos usar a flag --filter com a chave id para filtrar a saída e mostrar apenas o nó com o ID especificado. Substitua <node_id> pelo ID real que você obteve do comando anterior.

docker node ls --filter id=<node_id>

Este comando exibirá apenas a linha correspondente ao nó com o ID fornecido. Esta é uma maneira simples de encontrar rapidamente informações sobre um nó específico quando você conhece seu ID.

Por exemplo, se o ID do seu nó for 24ifihg345h345h345h345h34, o comando seria:

docker node ls --filter id=24ifihg345h345h345h345h34

A saída será a mesma da linha única para o seu nó manager do comando docker node ls na etapa anterior.

Filtrar nós por função (role)

Nesta etapa, aprenderemos como filtrar a lista de nós em um Docker Swarm com base em sua função (role). Em um Docker Swarm, os nós podem ter uma de duas funções: manager ou worker. Os nós manager gerenciam o swarm, enquanto os nós worker executam os serviços.

Como atualmente só temos um nó em nosso swarm, e ele é o nó manager, vamos filtrar para mostrar apenas os nós manager. Usamos a flag --filter com a chave role e o valor manager.

docker node ls --filter role=manager

Este comando exibirá apenas os nós que têm a função manager. Em nossa configuração atual, isso mostrará o mesmo nó único de antes.

Se você tivesse nós worker em seu swarm, poderia filtrar para mostrar apenas os nós worker usando:

docker node ls --filter role=worker

Atualmente, este comando não mostrará nenhuma saída porque não há nós worker no swarm.

Compreender como filtrar por função é importante para gerenciar swarms maiores com múltiplos nós manager e worker.

Filtrar nós por rótulo (label) do nó

Nesta etapa, aprenderemos como filtrar nós com base em rótulos (labels) atribuídos a eles. Os rótulos de nó são pares chave-valor que você pode anexar aos nós para fins organizacionais ou para controlar a colocação de serviços.

Primeiro, vamos adicionar um rótulo ao nosso nó manager. Adicionaremos um rótulo location=datacenter1. Para fazer isso, usamos o comando docker node update seguido pelo ID do nó e a flag --label-add.

Obtenha o ID do nó novamente usando docker node ls -q:

NODE_ID=$(docker node ls -q)
echo $NODE_ID

Agora, atualize o nó com o rótulo:

docker node update --label-add location=datacenter1 $NODE_ID

Você deve ver a saída confirmando a atualização do nó.

Para verificar se o rótulo foi adicionado, você pode inspecionar o nó:

docker node inspect $NODE_ID

Procure a seção Labels na saída. Você deve ver "location": "datacenter1".

Agora, vamos filtrar os nós com base neste rótulo. Usamos a flag --filter com a chave label e o rótulo no formato chave=valor.

docker node ls --filter label=location=datacenter1

Este comando exibirá apenas os nós que têm o rótulo location com o valor datacenter1. Em nosso caso, ele mostrará nosso nó manager.

Você também pode filtrar por nós que têm uma chave de rótulo específica, independentemente de seu valor, simplesmente fornecendo a chave:

docker node ls --filter label=location

Isso mostrará todos os nós que têm o rótulo location definido.

Formatar a saída para exibir informações específicas

Nesta etapa, aprenderemos como formatar a saída do comando docker node ls para exibir apenas as informações que nos interessam. Isso é útil para scripting ou quando você só precisa de uma visualização rápida de detalhes específicos.

Usamos a flag --format para especificar o formato de saída. Você pode usar a sintaxe de template Go para definir a saída desejada. Campos comuns que você pode acessar incluem .ID, .Hostname, .Status, .Availability, .ManagerStatus e .EngineVersion.

Vamos exibir apenas o ID e o hostname do nó.

docker node ls --format "{{.ID}}\t{{.Hostname}}"

{{.ID}} e {{.Hostname}} são espaços reservados para o ID e o hostname do nó, respectivamente. O \t insere um caractere de tabulação para separação.

A saída terá esta aparência:

<node_id> <hostname>

Agora, vamos exibir o hostname e o status do manager.

docker node ls --format "Hostname: {{.Hostname}}, Manager Status: {{.ManagerStatus}}"

Isso produzirá a saída:

Hostname: <hostname>, Manager Status: Leader

Você pode combinar filtragem e formatação. Por exemplo, vamos filtrar por nós manager e exibir seu ID e hostname.

docker node ls --filter role=manager --format "{{.ID}}\t{{.Hostname}}"

Este comando primeiro filtra os nós para incluir apenas managers e, em seguida, formata a saída para mostrar seu ID e hostname.

Usar a flag --format oferece flexibilidade na forma como você visualiza e processa informações sobre seus nós Docker Swarm.

Resumo

Neste laboratório, aprendemos como usar o comando docker node ls para gerenciar e visualizar informações sobre nós em um Docker Swarm. Começamos inicializando um Docker Swarm na máquina atual, tornando-a o nó manager. Em seguida, usamos docker node ls para listar todos os nós no swarm, observando a saída padrão que inclui ID, hostname, status, disponibilidade, status do manager e versão do engine.

Em seguida, exploramos como filtrar a lista de nós usando a flag --filter. Especificamente, aprendemos como filtrar nós com base em seu ID exclusivo, permitindo que localizemos e visualizemos rapidamente informações sobre um nó específico dentro de um swarm maior. O laboratório também aborda a filtragem por função (role) e rótulo (label) de nó, e a formatação da saída para exibir apenas informações específicas, embora o conteúdo fornecido detalhe apenas a filtragem por ID.