Como usar o comando docker stack ps para listar tarefas da pilha

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar efetivamente o comando docker stack ps para listar e gerenciar tarefas dentro de uma pilha Docker (Docker stack). Você começará implantando uma pilha de exemplo usando o Docker Compose, uma ferramenta poderosa para definir e executar aplicações com múltiplos contêineres.

Após a implantação da pilha, você explorará as várias capacidades do docker stack ps. Isso inclui listar todas as tarefas na pilha, filtrar tarefas com base em seus nomes, formatar a saída para exibir campos específicos de interesse e, finalmente, exibir apenas os IDs das tarefas para uma visualização concisa. Essa experiência prática o equipará com as habilidades para monitorar e entender o estado das suas tarefas da pilha Docker.

Implantar uma pilha de exemplo

Nesta etapa, você aprenderá como implantar uma pilha de exemplo usando o Docker Compose. O Docker Compose é uma ferramenta para definir e executar aplicações Docker com múltiplos contêineres. Com o Compose, você usa um arquivo YAML para configurar os serviços da sua aplicação. Em seguida, com um único comando, você cria e inicia todos os serviços a partir da sua configuração.

Como o Docker Compose não está pré-instalado no ambiente LabEx, você precisa instalá-lo primeiro. Vamos instalar a versão 1.29.2 do Docker Compose, que é compatível com a versão do Docker instalada.

Primeiro, baixe o binário do 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

Este comando baixa o binário do Docker Compose do repositório oficial do GitHub e o salva em /usr/local/bin/docker-compose. As partes $(uname -s) e $(uname -m) detectam automaticamente o seu sistema operacional e arquitetura.

Em seguida, aplique permissões de execução ao binário:

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

Este comando torna o arquivo baixado executável.

Agora, verifique a instalação verificando a versão do Docker Compose:

docker-compose --version

Você deve ver uma saída semelhante a docker-compose version 1.29.2, build 5becea4c.

Agora que o Docker Compose está instalado, vamos criar um arquivo Docker Compose simples para definir nossa pilha. Criaremos um arquivo chamado docker-compose.yml no diretório ~/project.

Use o editor nano para criar e editar o arquivo:

nano ~/project/docker-compose.yml

Cole o seguinte conteúdo no arquivo docker-compose.yml:

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

Este arquivo docker-compose.yml define dois serviços:

  • web: Usa a imagem nginx:latest e mapeia a porta 80 no host para a porta 80 no contêiner.
  • app: Usa a imagem alpine:latest e executa um comando echo simples.

Salve o arquivo pressionando Ctrl + S e saia do editor pressionando Ctrl + X.

Antes de implantar a pilha, vamos baixar as imagens necessárias. Embora o Docker Compose possa baixar imagens automaticamente durante a implantação, baixá-las explicitamente com antecedência pode, às vezes, ser útil.

Baixe a imagem nginx:latest:

docker pull nginx:latest

Baixe a imagem alpine:latest:

docker pull alpine:latest

Agora, implante a pilha usando o comando docker-compose up. A flag -d executa os contêineres em modo detached (em segundo plano).

Navegue até o diretório ~/project onde você criou o arquivo docker-compose.yml:

cd ~/project

Em seguida, execute o comando:

docker-compose up -d

Este comando lê o arquivo docker-compose.yml e cria e inicia os serviços definidos. Você deve ver a saída indicando a criação e o início dos serviços web e app.

Para verificar se os serviços estão em execução, você pode listar os contêineres em execução:

docker ps

Você deve ver dois contêineres em execução, um para o serviço web (baseado em nginx) e um para o serviço app (baseado em alpine).

Listar todas as tarefas na pilha

Nesta etapa, você aprenderá como listar todas as tarefas (contêineres) associadas à pilha que você implantou na etapa anterior. No Docker Swarm ou Kubernetes, o termo "tarefa" (task) é frequentemente usado para se referir a uma instância em execução de um serviço. Embora estejamos usando o Docker Compose aqui, que tecnicamente não usa o conceito de "tarefa" da mesma forma que o Swarm, ainda podemos listar os contêineres que compõem nossa pilha implantada.

O comando docker-compose ps é usado para listar os contêineres gerenciados pelo Docker Compose para o projeto atual (o diretório que contém o arquivo docker-compose.yml).

Certifique-se de que você ainda está no diretório ~/project onde seu arquivo docker-compose.yml está localizado:

cd ~/project

Agora, execute o comando docker-compose ps:

docker-compose ps

Este comando exibirá uma lista de contêineres definidos em seu arquivo docker-compose.yml, juntamente com seu estado atual, comando e portas.

Você deve ver uma saída semelhante a esta (os nomes e IDs dos contêineres variarão):

      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

Esta saída mostra os dois serviços definidos em seu docker-compose.yml: app e web. A coluna State indica se o contêiner está em execução (Up) ou foi finalizado (Exit 0). A coluna Ports mostra o mapeamento de portas para o serviço web.

O contêiner app foi finalizado porque seu comando echo "Hello from Alpine" terminou a execução. O contêiner web ainda está em execução porque o servidor Nginx foi projetado para ser executado continuamente.

Este comando é útil para ver rapidamente quais serviços em sua pilha estão em execução e seu status básico.

Filtrar tarefas por nome

Nesta etapa, você aprenderá como filtrar a lista de contêineres gerenciados pelo Docker Compose com base no nome do serviço. Isso é útil quando você tem uma pilha grande com muitos serviços e deseja ver apenas o status de um serviço específico.

O comando docker-compose ps permite que você especifique o nome do serviço como um argumento para filtrar a saída.

Certifique-se de que você está no diretório ~/project:

cd ~/project

Para listar apenas o contêiner para o serviço web, execute o seguinte comando:

docker-compose ps web

Este comando mostrará apenas as informações para o contêiner associado ao serviço web definido em seu docker-compose.yml.

Você deve ver uma saída semelhante a esta:

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

Da mesma forma, para listar apenas o contêiner para o serviço app, execute:

docker-compose ps app

Isso mostrará as informações para o contêiner app:

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

A filtragem por nome de serviço é uma maneira simples, mas eficaz, de gerenciar e monitorar componentes individuais dentro de sua pilha Docker Compose.

Formatar a saída para mostrar campos específicos

Nesta etapa, você aprenderá como formatar a saída do comando docker-compose ps para exibir apenas campos específicos. Isso é útil quando você precisa extrair informações específicas sobre seus serviços, como seus nomes ou status, para scripting ou processamento posterior.

O comando docker-compose ps suporta a flag --format, que permite que você especifique o formato de saída usando templates Go.

Certifique-se de que você está no diretório ~/project:

cd ~/project

Para exibir apenas o nome do serviço e o estado do contêiner, você pode usar o seguinte comando:

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

Vamos detalhar a flag --format:

  • "table": Isso especifica que a saída deve estar em um formato de tabela com cabeçalhos.
  • {{.Service}}: Este é um placeholder de template Go que representa o nome do serviço.
  • \t: Este é um caractere de tabulação, usado aqui para separar as colunas.
  • {{.State}}: Este é um placeholder de template Go que representa o estado do contêiner.

A saída terá esta aparência:

SERVICE         STATE
app             Exit 0
web             Up

Você também pode incluir outros campos na string de formato. Por exemplo, para exibir o nome do serviço, a imagem e o estado:

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

A saída será:

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

Usar a flag --format oferece flexibilidade na forma como você visualiza e processa as informações sobre seus serviços Docker Compose.

Exibir apenas IDs das tarefas

Nesta etapa, você aprenderá como exibir apenas os IDs dos contêineres para os serviços em sua pilha Docker Compose. Isso é particularmente útil quando você precisa passar os IDs dos contêineres para outros comandos para fins de automação ou scripting.

Usaremos novamente a flag --format com o comando docker-compose ps, mas desta vez especificaremos apenas o campo ID do contêiner.

Certifique-se de que você está no diretório ~/project:

cd ~/project

Para exibir apenas os IDs dos contêineres, use o seguinte comando:

docker-compose ps -q

A flag -q é uma abreviação de --quiet, que imprime apenas os IDs dos contêineres.

Alternativamente, você pode obter o mesmo resultado usando a flag --format:

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

Este comando usa o template Go {{.ID}} para extrair apenas o ID do contêiner para cada serviço.

A saída de qualquer um dos comandos será uma lista de IDs de contêineres, um por linha:

<container_id_for_app>
<container_id_for_web>

(Os IDs reais serão diferentes em seu ambiente).

Exibir apenas os IDs é um requisito comum quando você precisa interagir programaticamente com seus contêineres, por exemplo, para pará-los ou removê-los.

Finalmente, vamos limpar a pilha implantada, derrubando-a. Isso irá parar e remover os contêineres e redes criados por docker-compose up.

Certifique-se de que você está no diretório ~/project:

cd ~/project

Execute o seguinte comando:

docker-compose down

Este comando irá parar e remover os contêineres para os serviços web e app. Você deve ver a saída indicando que os contêineres e a rede estão sendo removidos.

Após executar docker-compose down, você pode verificar se os contêineres não estão mais em execução usando docker ps:

docker ps

Este comando agora não deve mostrar nenhum contêiner em execução.

Resumo

Neste laboratório, você aprendeu como implantar uma pilha de exemplo usando Docker Compose. Isso envolveu a instalação do Docker Compose, a criação de um arquivo docker-compose.yml para definir os serviços e, em seguida, a implantação da pilha.

Após a implantação, você aprenderá como usar o comando docker stack ps para listar todas as tarefas dentro da pilha implantada. Você também explorará como filtrar essas tarefas por nome, formatar a saída para exibir campos específicos e exibir apenas os IDs das tarefas, demonstrando a flexibilidade do comando docker stack ps para monitorar e gerenciar as tarefas da pilha.