Se você usa Docker, provavelmente o terceiro comando que aprendeu foi listar eles, mas você sabe que dá pra tunar a listagem de containers?

Pois bem, a colinha de hoje é para mostrar dois truques que eu uso muito:

  1. filtragem da lista;
  2. formatação da lista.

Vamos ver esses dois casos com carinho.

Filtrando a lista de containers

Acho que o primeiro comando “mais avançado” que eu tive que fazer foi filtrar um conjunto de containers. Logo ao começar a mexer com Docker é muito comum ficar com o ambiente “sujo”, ou seja, ter muitos containers com status de exited parados sem serem removidos.

Por isso, eu aprendi a filtrar tais containers pelo status. Dentro do comando tradicional de listar containers (docker ps), existe uma flag chamada de --filter ou -f. Essa flag permite que você indique filtros a serem feitos, por exemplo:

docker ps -a -f status=exited

O resultado desse comando vai ser uma lista de containers que deixaram de executar, mas não foram removidos. Como eu falei antes, é bem fácil perder o controle e ter muitos containers parados “sujando” o seu ambiente. Então listar aqueles que não estão em execução pode ser uma mão na roda para remover eles mais facilmente. Eu gosto usar esse comando assim:

docker rm -v $(docker ps -a -q -f status=exited)

Passando a flag -q faz com que, o resultado do docker ps mostre apenas os IDs dos containers, colocando esse comando completo dentro do $() faz com que passemos a lista de IDs para o docker rm e assim removendo todos os containers parados com apenas um comando. Ah a flag -v ali é só pra ter um feedback do que está rolando com o comando, ele vai mostrar o ID de cada container que estiver sendo excluído.

Formatando a lista de containers

Além de remover os containers que ficam sujando nosso ambiente, às vezes eu preciso de algumas informações sobre algum dos containers que estão rodando. Normalmente quando usamos o docker ps vemos informações como ID do container, o comando que você rodou para iniciar ele, a imagem que está sendo usada e outras coisas mais… Mas às vezes ver todas essas informações na tela pode ser uma sobrecarga de informações.

Aí que entra a mágica de formatar o resultado do docker ps. A flag --format que comanda o show dessa vez. Ela aceita um template Go. Se você não conhece templates Go, aqui vai uma explicação super rápida e superficial: muito utilizados para criação de sites estáticos, um template é uma string que é “preenchida” com informações sendo guiada por variáveis.

Por exemplo, o template:

poderia ser preenchido com qualquer nome que estivesse contido na variável Name. Para identificar variáveis em templates basta encontrar a palavra precedida por um ponto e dentro de chaves duplas. Se quiser saber mais sobre templates Go da uma olhada nesse artigo do grupo de estudos que fala muito bem sobre o tema.

Então, pra começar cada uma das informações que aparecem na tela você pode chamar seguindo esse mapa:

  • CONTAINER ID: ID
  • IMAGE: Image
  • COMMAND: Command
  • CREATED: RunningFor
  • STATUS: Status
  • PORTS: Ports
  • NAMES: Names

Como eu geralmente só quero ver o nome, a imagem e o ID dos containers que estão rodando, meu comando acaba sendo esse:

Que me da um resultado assim:

    CONTAINER ID        IMAGE                          NAMES
    11b8af1aeb43        jupyter/datascience-notebook   relaxed_hypatia

Legal né? E aí, você já listou os seus containers hoje?