Filtrar imágenes para eliminar según etiquetas (labels)
En este último paso, exploraremos otra poderosa opción de filtrado para docker image prune: filtrar según etiquetas (labels). Las etiquetas son pares clave-valor que puedes adjuntar a objetos de Docker, incluyendo imágenes, para agregar metadatos. Luego, puedes utilizar estas etiquetas para filtrar y gestionar tus recursos de Docker.
La bandera --filter con la clave label te permite especificar qué imágenes incluir o excluir del proceso de eliminación (pruning) según sus etiquetas.
Primero, creemos un par de imágenes con diferentes etiquetas. Utilizaremos un simple Dockerfile y construiremos dos imágenes con diferentes etiquetas.
Crea un archivo llamado Dockerfile.labeled en tu directorio ~/project con el siguiente contenido:
FROM alpine:latest
LABEL environment="development"
LABEL version="1.0"
RUN echo "This is a labeled image" >/app/info.txt
Ahora, construye dos imágenes a partir de este Dockerfile, aplicando diferentes etiquetas durante el proceso de construcción utilizando la bandera --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
Ahora hemos construido dos imágenes, my-labeled-app:dev y my-labeled-app:prod, ambas basadas en el mismo Dockerfile pero con diferentes etiquetas stage.
Listemos las imágenes e inspeccionemos sus etiquetas.
docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"
Deberías ver una salida que muestra las imágenes y sus etiquetas asociadas.
Ahora, usemos docker image prune para eliminar imágenes según sus etiquetas. Supongamos que queremos eliminar todas las imágenes no utilizadas que tienen la etiqueta stage=dev. Podemos usar la bandera --filter con label=stage=dev. También usaremos la bandera -a para considerar todas las imágenes no utilizadas, no solo las huérfanas (dangling).
docker image prune -a --filter "label=stage=dev"
Docker mostrará las imágenes que coinciden con el filtro y se eliminarán. Confirma escribiendo y.
Después de la eliminación, lista las imágenes nuevamente:
docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"
Deberías ver que la imagen my-labeled-app:dev se ha eliminado, mientras que my-labeled-app:prod permanece porque no coincidió con el filtro.
También puedes usar la sintaxis label!=key=value para eliminar imágenes que no tienen una etiqueta o valor de etiqueta específico. Por ejemplo, para eliminar todas las imágenes no utilizadas que no tienen la etiqueta stage=prod:
docker image prune -a --filter "label!=stage=prod"
Este comando eliminaría my-labeled-app:dev (si aún existiera) y cualquier otra imagen no utilizada que no tenga la etiqueta stage=prod.
Filtrar por etiquetas proporciona una forma flexible de gestionar y limpiar tus imágenes según tus propios metadatos definidos.