Sí, no lo hicieron fácil y todavía no es perfecto, pero la API de registro v2 ahora tiene la capacidad de eliminar imágenes.
¿Puedo eliminar de forma sencilla y segura la carpeta v2 / repositories/IMAGE_NAME/_manifests/tags / VERSION
Los datos de la imagen real se almacenan en el directorio de blobs en el disco, pero se comparten entre diferentes manifiestos, por lo que no es seguro purgar ese directorio a menos que haya considerado todas las imágenes que pueden compartir los blobs.
Aquí está el método para eliminar una imagen usando la API de docker v2:
En primer lugar, su registro debe tener la eliminación habilitada. Establezca la var env:
REGISTRY_STORAGE_DELETE_ENABLED: "true"
o en la configuración.yml tiene que establecer
storage: delete: enabled: true
A continuación, ejecute la eliminación a través de llamadas a la API (Puede probar fácilmente a través de Postman o simplemente usando curl / etc)
NOTA: En las llamadas a continuación, agregue "Accept: application/vnd.docker.distribution.manifest.v2+json"
al encabezado HTTP
-
Resumen de imágenes de Gather:
HEAD https://myprivateregistry:5001/v2/<image_name>/manifests/<image_tag>
Esta llamada devuelve la clave de encabezado Docker-Content-Digest
con un valor como este: sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
-
Usando ese valor del paso 2, ejecute el DELETE
llamada http:
DELETE https://myprivateregistry:5001/v2/<image_name>/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
Devoluciones de API 202 Accepted
-
Ejecute la recolección de elementos no utilizados manualmente si no desea esperar a su próxima ejecución programada: registry garbage-collect /etc/docker/registry/config.yml
Ejemplo si se ejecuta el registro como contenedor: docker exec -t registry-test ./bin/registry garbage-collect /etc/docker/registry/config.yml
El recolector de elementos no utilizados elimina los blobs y los manifiestos asociados del disco por usted.
En este punto, la etiqueta image:se elimina por completo del disco y se purga del registro. Los blobs se eliminan y verá que los manifiestos se han ido de v2/repositories/<image_name>/_manifests
NOTA: Si esta fue la última imagen en su repositorio, aún debe eliminar manualmente la lista de repositorios del disco (v2/repositories/<image_name>/_layers
)- sin embargo, esto es solo metadatos. Los datos de imagen reales ya se han eliminado. Creo que esto podría ser un error en el recolector de basura. Tengo una pregunta al respecto aquí: Registro privado de Docker: se eliminaron todas las imágenes, pero aún se muestran en el catálogo
MÁS DETALLES:
https://docs.docker.com/registry/spec/api/#deleting-an-imagehttps://jsosic.wordpress.com/2017/01/23/deleting-images-from-docker-registry/