Il ne semble pas y avoir de méthode simple pour supprimer des images du registre à ce jour et ressemble à une fonctionnalité pour le jalon 2.1 du registre .
L'une des options que nous avons aujourd'hui avec cela ne fonctionne pas
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]$
consiste à le supprimer manuellement du registre lui-même. Juste pour éviter de supprimer accidentellement un mauvais fichier, je l'ai testé avec ce script dans github . Je ne prends aucune garantie sur le fonctionnement de ce script (même si je l'ai vérifié rapidement avant de le tester).
J'ai donc fait un test et ça semble marcher :)
[1] Je suppose que vous exécutez un registre avec Docker lui-même.
[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] J'ai créé un Dockerfile minimal avec juste du FROM alpine
contenu et créé alpine: v1 et poussé vers mon registre privé fonctionnant sur localhost: 5000. L'interroger à partir du Registre, il est revenu comme prévu.
[anovil@ubuntu-anovil remove-registry]$ curl -X GET localhost:5000/v2/alpine/tags/list
{"name":"alpine","tags":["v1"]}
[anovil@ubuntu-anovil remove-registry]$
[3] Ensuite, je me connecte au registre avec docker exec
et vérifie l'utilisation du disque avant de faire mon expérience
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
2.5M /var/lib/registry/
2.5M total
root@88f8e1a1d7a7:/#
[4] Après être revenu sur mon hôte, j'ai copié un fichier lourd (mongodb.tgz) dans mon conteneur et créé une version v2 construite et poussée.
[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] Après avoir vérifié à nouveau la taille dans le registre, elle est passée à 62 Mo:
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
62M /var/lib/registry/
62M total
root@88f8e1a1d7a7:/#
[6] Pour fonctionner delete_docker_registry_image
, vous devez placer le script dans le conteneur qui héberge le registre, une option pour ce faire est avec curl. En outre, ce script nécessite jq
.
root@88f8e1a1d7a7:/# apt-get update && apt-get install -y curl jq
...
root@88f8e1a1d7a7:/#
[7] Exécutez le script, essayez d' --dry-run
abord avec l' option et n'oubliez pas la balise de version (v2 dans ce cas), il y a aussi une bonne-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] Et le tour est joué !!
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
2.5M /var/lib/registry/
2.5M total
root@88f8e1a1d7a7:/#
Récemment, j'ai moi-même rencontré cela, mais j'ai pensé, pourquoi supprimer, je vais juste rééditer une version plus ancienne:
L'image cassée sera toujours là, mais il est peu probable que quelqu'un l'utilise car une version "plus récente" est disponible. De toute évidence, il est préférable de fixer en avant, mais à la rigueur, c'est une solution rapide.
Si la raison pour laquelle vous voulez le supprimer est qu'il a des secrets ou quelque chose exposé que vous ne vouliez pas sortir, les autres solutions sont meilleures, mais supposez que ce qu'il était est maintenant connu et changez-le (mots de passe, clés, peu importe).
la source