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:

Informação Variável
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?