Parece que no existe un método simple para eliminar imágenes del registro a partir de hoy y parece que es una característica para el hito del registro 2.1 .
Una de las opciones que tenemos hoy 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 mismo. Solo para evitar eliminar accidentalmente un archivo incorrecto, lo probé con este script de github . No garantizo cómo funciona este script (aunque lo revisé rápidamente antes de probarlo).
Entonces, hice una prueba y eso parece funcionar :)
[1] Supongo que está ejecutando un registro con docker.
[anovil@ubuntu-anovil remove-registry]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88f8e1a1d7a7 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
contenido y creé alpine: v1 y lo envié a mi registro privado ejecutándose en localhost: 5000. Al consultarlo desde el registro, regresó 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 docker exec
y compruebo el uso del disco antes de hacer mi experimento
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
2.5M /var/lib/registry/
2.5M total
root@88f8e1a1d7a7:/#
[4] Después de regresar a mi host, copié un archivo pesado (mongodb.tgz) en mi contenedor y creé una versión compilada y empujada v2.
[anovil@ubuntu-anovil remove-registry]$ docker build -t localhost:5000/alpine:v2 .
Sending build context to Docker daemon 61.99 MB
Step 1 : FROM alpine
---> 2314ad3eeb90
Step 2 : COPY mongodb.tgz /mongodb.tgz
---> d7c7645a3fe2
Successfully built d7c7645a3fe2
[anovil@ubuntu-anovil remove-registry]$ docker push localhost:5000/alpine:v2
The 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 62MB:
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
62M /var/lib/registry/
62M total
root@88f8e1a1d7a7:/#
[6] Para poder ejecutarlo delete_docker_registry_image
, necesitas 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, intente con la --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-run
DRY_RUN: would have deleted tag directory: repositories/alpine/_manifests/tags/v2
DRY_RUN: would have deleted manifest revision: repositories/alpine/_manifests/revisions/sha256/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774
DRY_RUN: would have deleted directory: blobs/sha256/e2/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6
DRY_RUN: would have deleted directory: blobs/sha256/7a/7ada67971e952e353ab14d8f9bdd4e41e4c41099b05a5da09f2700b51d93908a
DRY_RUN: would have deleted directory: blobs/sha256/7b/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774
DRY_RUN: would have deleted layer metadata directory: repositories/alpine/_layers/sha256/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6
root@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 total
root@88f8e1a1d7a7:/#
Hace poco me encontré con esto, pero luego pensé, ¿por qué eliminarlo? Solo volveré a lanzar una versión anterior:
La imagen rota seguirá estando allí, pero es poco probable que alguien la use ya que hay una versión "más nueva" disponible. Obviamente, es mejor solucionarlo, pero en caso de apuro, esta es una solución rápida.
Si la razón por la que desea eliminarlo es que tiene secretos o algo expuesto que no quería revelar, las otras soluciones son mejores, pero suponga que lo que era ahora es conocido y cámbielo (contraseñas, claves, lo que sea).
fuente