Filtrar imagens para prune com base em labels
Nesta etapa final, exploraremos outra opção de filtragem poderosa para docker image prune: a filtragem com base em labels. Labels são pares chave-valor que você pode anexar a objetos Docker, incluindo imagens, para adicionar metadados. Você pode então usar esses labels para filtrar e gerenciar seus recursos Docker.
A flag --filter com a chave label permite que você especifique quais imagens incluir ou excluir do processo de pruning com base em seus labels.
Primeiro, vamos criar algumas imagens com labels diferentes. Usaremos um Dockerfile simples e construiremos duas imagens com labels diferentes.
Crie um arquivo chamado Dockerfile.labeled em seu diretório ~/project com o seguinte conteúdo:
FROM alpine:latest
LABEL environment="development"
LABEL version="1.0"
RUN echo "This is a labeled image" >/app/info.txt
Agora, construa duas imagens a partir deste Dockerfile, aplicando labels diferentes durante o processo de construção usando a flag --label.
docker build -t my-labeled-app:dev --label project=myapp --label stage=dev ~/project -f Dockerfile.labeled
docker build -t my-labeled-app:prod --label project=myapp --label stage=prod ~/project -f Dockerfile.labeled
Agora construímos duas imagens, my-labeled-app:dev e my-labeled-app:prod, ambas baseadas no mesmo Dockerfile, mas com labels stage diferentes.
Vamos listar as imagens e inspecionar seus labels.
docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"
Você deve ver a saída mostrando as imagens e seus labels associados.
Agora, vamos usar docker image prune para remover imagens com base em seus labels. Suponha que queremos remover todas as imagens não utilizadas que possuem o label stage=dev. Podemos usar a flag --filter com label=stage=dev. Também usaremos a flag -a para considerar todas as imagens não utilizadas, não apenas as dangling.
docker image prune -a --filter "label=stage=dev"
O Docker mostrará as imagens que correspondem ao filtro e serão removidas. Confirme digitando y.
Após o pruning, liste as imagens novamente:
docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"
Você deve ver que a imagem my-labeled-app:dev foi removida, enquanto my-labeled-app:prod permanece porque não correspondeu ao filtro.
Você também pode usar a sintaxe label!=key=value para remover imagens que não possuem um label ou valor de label específico. Por exemplo, para remover todas as imagens não utilizadas que não possuem o label stage=prod:
docker image prune -a --filter "label!=stage=prod"
Este comando removeria my-labeled-app:dev (se ainda existisse) e quaisquer outras imagens não utilizadas que não tivessem o label stage=prod.
A filtragem por labels fornece uma maneira flexível de gerenciar e limpar suas imagens com base em seus próprios metadados definidos.