Como filtrar containers Docker por nome

DockerBeginner
Pratique Agora

Introdução

O Docker tornou-se uma ferramenta essencial para desenvolvedores e profissionais de TI, fornecendo uma plataforma poderosa para a conteinerização de aplicações. Neste tutorial, exploraremos como filtrar containers Docker por nome, uma habilidade crucial para gerenciar efetivamente seu ambiente Docker. Ao final deste guia, você será capaz de localizar e gerenciar eficientemente containers específicos com base em seus nomes, capacitando você a otimizar seus fluxos de trabalho Docker.

Visualizando Containers Docker com docker ps

Antes de podermos filtrar containers Docker, precisamos primeiro entender como visualizar os containers que estão sendo executados em nosso sistema. O comando mais fundamental para este propósito é docker ps.

Entendendo o Comando docker ps

O comando docker ps lista todos os containers Docker em execução no seu sistema. Quando você executa este comando, você verá informações sobre cada container, incluindo:

  • Container ID: Um identificador único para o container
  • Image: A imagem Docker usada para criar o container
  • Command: O comando que está sendo executado dentro do container
  • Created: Quando o container foi criado
  • Status: O status atual do container
  • Ports: Quaisquer mapeamentos de portas
  • Names: O nome do container

Vamos executar o comando docker ps para ver todos os containers em execução:

docker ps

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

CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"             About a minute ago   Up About a minute             db-server
26f8c661f7a5   alpine    "sleep 1000"             About a minute ago   Up About a minute             utility-alpine
a3bb567cc561   redis     "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp  cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-frontend

Visualizando Todos os Containers

Por padrão, docker ps mostra apenas os containers em execução. Para ver todos os containers, incluindo aqueles que foram parados, use a flag -a:

docker ps -a

Este comando exibirá todos os containers, independentemente do seu status. Isso é útil quando você deseja ver containers que foram finalizados ou estão pausados.

Visualizando Apenas os IDs dos Containers

Se você precisar apenas dos IDs dos containers, você pode usar a flag -q:

docker ps -q

Isso produz apenas os IDs dos containers, o que pode ser útil quando você precisa passá-los para outros comandos.

Experimente esses comandos no seu terminal para se familiarizar com a funcionalidade básica de listagem de containers antes de passarmos para a filtragem no próximo passo.

Filtragem Básica de Containers por Nome

Agora que entendemos como listar containers Docker, vamos aprender como filtrá-los por nome. Quando você tem múltiplos containers em execução, encontrar um específico pode ser desafiador. O Docker fornece capacidades de filtragem que tornam essa tarefa muito mais fácil.

Usando a Opção --filter

O comando docker ps suporta filtragem através da opção --filter ou -f. A sintaxe básica para filtrar por nome é:

docker ps --filter name=<container-name>

Vamos tentar filtrar por containers que tenham "web" em seu nome:

docker ps --filter name=web

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

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-frontend

Observe que ambos os containers web-frontend e web-backend são exibidos, pois ambos contêm a palavra "web" em seus nomes.

Filtrando por Nomes Exatos

Para filtrar por um container com um nome exato, você pode usar o nome completo:

docker ps --filter name=web-frontend

Este comando mostrará apenas o container chamado exatamente "web-frontend":

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
d6fe891c1f04   nginx     "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   80/tcp    web-frontend

Usando Múltiplos Filtros

Você pode aplicar múltiplos filtros adicionando múltiplas opções --filter. Por exemplo, para encontrar todos os containers com "web" em seu nome E construídos a partir da imagem "nginx":

docker ps --filter name=web --filter ancestor=nginx

O resultado deve ser o mesmo que nosso primeiro filtro, pois ambos os containers "web" usam a imagem nginx:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-frontend

Filtrando Containers pelo Início do Nome

Se você quiser filtrar containers cujos nomes começam com uma string específica, você pode usar um padrão como este:

docker ps --filter name=^db

Este comando mostrará containers cujos nomes começam com "db":

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"  16 minutes ago   Up 16 minutes             db-server

Experimente esses comandos de filtragem no seu terminal para praticar a busca de containers específicos por seus nomes.

Filtragem Avançada e Formatação da Saída

Agora que dominamos a filtragem básica por nome, vamos explorar algumas técnicas mais avançadas para filtrar e formatar a saída do comando docker ps. Essas habilidades ajudarão você a gerenciar seu ambiente Docker de forma mais eficiente.

Combinando Múltiplos Critérios de Filtragem

O Docker permite que você combine múltiplos critérios de filtragem para restringir seus resultados. Por exemplo, para encontrar todos os containers com "web" em seu nome que estão atualmente em execução:

docker ps --filter name=web --filter status=running

Isso exibirá todos os containers em execução que têm "web" em seu nome:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-frontend

Usando a Opção --format para Saída Personalizada

O comando docker ps suporta formatação de saída personalizada usando a opção --format com templates Go. Isso permite que você exiba apenas as informações que você precisa no formato que você deseja.

Por exemplo, para exibir apenas os nomes dos containers e seus status:

docker ps --format "table {{.Names}}\t{{.Status}}"

Você verá uma saída simplificada como esta:

NAMES               STATUS
db-server           Up 26 minutes
utility-alpine      Up 26 minutes
cache-server        Up 26 minutes
web-backend         Up 26 minutes
web-frontend        Up 26 minutes

Combinando Filtragem e Formatação

Você pode combinar filtragem e formatação para obter exatamente as informações que você precisa:

docker ps --filter name=web --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"

Isso exibirá uma tabela com nomes, imagens e status para containers com "web" em seu nome:

NAMES               IMAGE               STATUS
web-backend         nginx               Up 27 minutes
web-frontend        nginx               Up 27 minutes

Usando Filtragem Semelhante a Regex

O sistema de filtragem do Docker suporta alguns padrões semelhantes a regex. Por exemplo, para encontrar containers cujos nomes contêm "web" OU "cache":

docker ps --filter name=web --filter name=cache

Isso exibirá tanto os containers web quanto os containers cache:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
a3bb567cc561   redis     "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes   6379/tcp   cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-frontend

Exemplo Prático: Script de Gerenciamento de Containers

Vamos criar um script simples que demonstra como a filtragem pode ser usada em um cenário prático. Crie um novo arquivo chamado container-stats.sh com o seguinte conteúdo:

nano container-stats.sh

Adicione o seguinte script:

#!/bin/bash
## This script displays container names, images and status for a filtered set of containers

echo "Web containers:"
docker ps --filter name=web --format "{{.Names}} - {{.Image}} - {{.Status}}"

echo -e "\nCache and database containers:"
docker ps --filter name=cache --filter name=db --format "{{.Names}} - {{.Image}} - {{.Status}}"

Salve o arquivo (Ctrl+O, Enter, então Ctrl+X) e torne-o executável:

chmod +x container-stats.sh

Agora execute o script para ver informações de containers filtradas e formatadas:

./container-stats.sh

Você deve ver uma saída semelhante a:

Web containers:
web-backend - nginx - Up 35 minutes
web-frontend - nginx - Up 35 minutes

Cache and database containers:
cache-server - redis - Up 35 minutes
db-server - alpine - Up 35 minutes

Este script demonstra como a filtragem de containers pode ser usada para organizar e apresentar informações sobre seu ambiente Docker de uma forma mais legível e útil.

Aplicações Práticas da Filtragem de Containers

Nesta etapa, exploraremos aplicações práticas da filtragem de containers para realizar tarefas comuns de gerenciamento do Docker. Esses exemplos demonstram como a filtragem pode ser usada em cenários do mundo real para tornar o gerenciamento de containers mais eficiente.

Encontrando e Reiniciando Containers Específicos

Digamos que você precise reiniciar todos os containers relacionados à web. Você pode usar a filtragem por nome para identificá-los e, em seguida, reiniciá-los:

## Primeiro, identifique os containers web
docker ps --filter name=web

## Agora, reinicie-os um por um
docker restart web-frontend
docker restart web-backend

Após executar esses comandos, você deve ver a confirmação de que cada container foi reiniciado:

web-frontend
web-backend

Encontrando e Removendo Todos os Containers com um Padrão de Nome Específico

Se você precisar remover todos os containers com um determinado padrão de nome, pode combinar a filtragem com a remoção de containers:

## AVISO: Isso é apenas para demonstração. Em um ambiente real,
## certifique-se de saber o que você está removendo!

## Liste os containers com "utility" em seus nomes
docker ps -a --filter name=utility

Você deve ver seu container de utilidade:

CONTAINER ID   IMAGE     COMMAND         CREATED          STATUS          PORTS     NAMES
26f8c661f7a5   alpine    "sleep 1000"    45 minutes ago   Up 45 minutes             utility-alpine

Para removê-lo, você normalmente usaria:

## Nós não executaremos este comando para preservar nosso ambiente de laboratório
## docker rm -f $(docker ps -aq --filter name=utility)

Em vez disso, vamos ver como este comando funciona:

## Apenas obtenha os IDs que seriam afetados
docker ps -aq --filter name=utility

Isso exibirá o ID do container:

26f8c661f7a5

Usando a Filtragem para Monitorar Grupos Específicos de Containers

A filtragem de containers é útil para monitoramento direcionado. Vamos criar um script de monitoramento simples que verifica o status de nossos containers web:

nano web-monitor.sh

Adicione o seguinte script:

#!/bin/bash
## This script checks the status of web containers and reports if any are not running

echo "=== Web Container Status Check ==="
docker ps -a --filter name=web --format "{{.Names}}: {{.Status}}"

## Count stopped web containers
STOPPED=$(docker ps -a --filter name=web --filter status=exited --format "{{.Names}}" | wc -l)

if [ $STOPPED -gt 0 ]; then
  echo -e "\nWARNING: $STOPPED web containers are not running!"
else
  echo -e "\nAll web containers are running normally."
fi

Salve o arquivo (Ctrl+O, Enter, então Ctrl+X) e torne-o executável:

chmod +x web-monitor.sh

Agora, execute o script para ver o status de seus containers web:

./web-monitor.sh

Você deve ver uma saída semelhante a:

=== Web Container Status Check ===
web-backend: Up 50 minutes
web-frontend: Up 50 minutes

All web containers are running normally.

Filtragem em Pipelines CI/CD

Em pipelines CI/CD, a filtragem de containers pode ser essencial para testes e implantação automatizados. Vamos criar um script que simula um processo de implantação que visa apenas containers com um padrão de nome específico:

nano deploy-update.sh

Adicione o seguinte script:

#!/bin/bash
## This script simulates updating all containers of a specific type

TARGET_CONTAINERS=$1

if [ -z "$TARGET_CONTAINERS" ]; then
  echo "Usage: $0 <container-name-pattern>"
  exit 1
fi

echo "Preparing to update containers matching pattern: $TARGET_CONTAINERS"
echo "Containers affected:"
docker ps --filter name=$TARGET_CONTAINERS --format "{{.Names}}"

echo -e "\nIn a real deployment, this would:"
echo "1. Pull the latest images"
echo "2. Stop each container"
echo "3. Start new containers with the updated images"
echo "4. Verify the containers are running correctly"

echo -e "\nSimulation completed successfully!"

Salve o arquivo (Ctrl+O, Enter, então Ctrl+X) e torne-o executável:

chmod +x deploy-update.sh

Agora, vamos simular a atualização de nossos containers web:

./deploy-update.sh web

Você deve ver uma saída semelhante a:

Preparing to update containers matching pattern: web
Containers affected:
web-backend
web-frontend

In a real deployment, this would:
1. Pull the latest images
2. Stop each container
3. Start new containers with the updated images
4. Verify the containers are running correctly

Simulation completed successfully!

Esses exemplos práticos demonstram como a filtragem de containers pode ser integrada ao seu fluxo de trabalho Docker para tornar o gerenciamento de containers mais eficiente e automatizado.

Resumo

Neste laboratório, você aprendeu a filtrar efetivamente os containers Docker por nome, uma habilidade essencial para gerenciar ambientes Docker de qualquer tamanho. Vamos revisar o que cobrimos:

  1. Listagem Básica de Containers: Você aprendeu a usar o comando docker ps para visualizar os containers em execução e suas várias opções, como -a para mostrar todos os containers.

  2. Filtragem Básica por Nome: Você descobriu como usar a opção --filter name= para encontrar containers por nome, tanto correspondências exatas quanto parciais.

  3. Filtragem e Formatação Avançadas: Você explorou como combinar múltiplos filtros e personalizar a saída usando a opção --format para exibir apenas as informações que você precisa.

  4. Aplicações Práticas: Você criou scripts que demonstram usos do mundo real da filtragem de containers para tarefas de monitoramento, gerenciamento e implantação.

Essas habilidades ajudarão você a gerenciar ambientes Docker de forma mais eficiente, especialmente à medida que o número de containers cresce. A filtragem de containers é particularmente valiosa em ambientes de desenvolvimento, teste e produção, onde você precisa identificar e gerenciar rapidamente containers específicos.

À medida que você continua sua jornada no Docker, considere explorar outras opções de filtragem além da filtragem por nome, como filtragem por volume, rede ou label. Essas técnicas de filtragem adicionais podem aprimorar ainda mais suas capacidades de gerenciamento de containers.