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.