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:
Listagem Básica de Containers: Você aprendeu a usar o comando
docker pspara visualizar os containers em execução e suas várias opções, como-apara mostrar todos os containers.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.Filtragem e Formatação Avançadas: Você explorou como combinar múltiplos filtros e personalizar a saída usando a opção
--formatpara exibir apenas as informações que você precisa.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.



