Parece que no hay un método simple para eliminar imágenes del registro a partir de hoy y parece que es una característica para el registro 2.1 hito.
Una de las opciones que tenemos hoy en día con esto no funciona
anovil@ubuntu-anovil remove-registry]$ curl -X DELETE localhost:5000/v2/alpine/manifests/v1{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}[anovil@ubuntu-anovil remove-registry]$
es eliminarlo manualmente del registro. Solo para evitar eliminar accidentalmente el archivo incorrecto, lo probé con este script de github. No asumo ninguna garantía sobre cómo funciona este script (aunque lo verifiqué rápidamente antes de probarlo).
Entonces, hice una prueba y parece que funciona :)
[1] Supongo que está ejecutando un registro con docker.
[anovil@ubuntu-anovil remove-registry]$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES88f8e1a1d7a7 registry:2 "/bin/registry /etc/d" 37 minutes ago Up 37 minutes 0.0.0.0:5000->5000/tcp registry[anovil@ubuntu-anovil remove-registry]$
[2] Creé un Dockerfile mínimo con solo FROM alpine
creé alpine:v1 y lo envié a mi registro privado que se ejecuta en localhost:5000. Al consultarlo desde el registro, se devolvió como se esperaba.
[anovil@ubuntu-anovil remove-registry]$ curl -X GET localhost:5000/v2/alpine/tags/list{"name":"alpine","tags":["v1"]}[anovil@ubuntu-anovil remove-registry]$
[3] Luego inicio sesión en el registro con docker exec
y verifiqué el uso del disco antes de hacer mi experimento
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/ 2.5M /var/lib/registry/2.5M totalroot@88f8e1a1d7a7:/#
[4] Después de regresar a mi host, copié un archivo pesado (mongodb.tgz) en mi contenedor y creé una versión v2 incorporada y empujada.
[anovil@ubuntu-anovil remove-registry]$ docker build -t localhost:5000/alpine:v2 .Sending build context to Docker daemon 61.99 MBStep 1 : FROM alpine ---> 2314ad3eeb90Step 2 : COPY mongodb.tgz /mongodb.tgz ---> d7c7645a3fe2Successfully built d7c7645a3fe2[anovil@ubuntu-anovil remove-registry]$ docker push localhost:5000/alpine:v2The push refers to a repository [localhost:5000/alpine] (len: 1)d7c7645a3fe2: Pushed 5ff05309724e: Image already exists v2: digest: sha256:7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774 size: 4467[anovil@ubuntu-anovil remove-registry]$
[5] Después de verificar el tamaño nuevamente en el registro, ha aumentado a 62 MB:
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/ 62M /var/lib/registry/62M totalroot@88f8e1a1d7a7:/#
[6] Para correr delete_docker_registry_image
, necesita obtener el script en el contenedor que aloja el registro, una opción para hacerlo es con curl. Además, este script requiere jq
.
root@88f8e1a1d7a7:/# apt-get update && apt-get install -y curl jq...root@88f8e1a1d7a7:/#
[7] Ejecute el script, pruebe con --dry-run
opción primero y no olvide la etiqueta de versión (v2 en este caso), también hay una buena -h
root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2 --dry-runDRY_RUN: would have deleted tag directory: repositories/alpine/_manifests/tags/v2DRY_RUN: would have deleted manifest revision: repositories/alpine/_manifests/revisions/sha256/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774DRY_RUN: would have deleted directory: blobs/sha256/e2/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6DRY_RUN: would have deleted directory: blobs/sha256/7a/7ada67971e952e353ab14d8f9bdd4e41e4c41099b05a5da09f2700b51d93908aDRY_RUN: would have deleted directory: blobs/sha256/7b/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774DRY_RUN: would have deleted layer metadata directory: repositories/alpine/_layers/sha256/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2 root@88f8e1a1d7a7:/#
[8] ¡Y listo !!
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/ 2.5M /var/lib/registry/2.5M totalroot@88f8e1a1d7a7:/#