Ab heute scheint es keine einfache Methode zu geben, um Bilder aus der Registrierung zu entfernen, und es scheint, als wäre dies eine Funktion für den Meilenstein von Registrierung 2.1 .
Eine der Optionen, die wir heute haben, funktioniert damit nicht
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]$
ist es manuell aus der Registrierung selbst zu entfernen. Um zu vermeiden, dass versehentlich falsche Dateien entfernt werden, habe ich sie mit diesem Skript von github getestet . Ich übernehme keine Garantie dafür, wie dieses Skript funktioniert (obwohl ich es schnell überprüft habe, bevor ich es getestet habe).
Also habe ich einen Test gemacht und das scheint zu funktionieren :)
[1] Ich gehe davon aus, dass Sie eine Registrierung mit Docker selbst ausführen.
[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] Ich habe eine minimale Docker-Datei mit nur FROM alpine
Inhalten erstellt und alpine: v1 erstellt und in meine private Registrierung verschoben, die auf localhost: 5000 ausgeführt wird. Beim Abfragen aus der Registrierung wurde es wie erwartet zurückgegeben.
[anovil@ubuntu-anovil remove-registry]$ curl -X GET localhost:5000/v2/alpine/tags/list
{"name":"alpine","tags":["v1"]}
[anovil@ubuntu-anovil remove-registry]$
[3] Dann melde ich mich bei der Registrierung an docker exec
und überprüfe die Festplattennutzung, bevor ich mein Experiment durchführe
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
2.5M /var/lib/registry/
2.5M total
root@88f8e1a1d7a7:/#
[4] Nachdem ich zu meinem Host zurückgekehrt war, kopierte ich eine schwere Datei (mongodb.tgz) in meinen Container und erstellte eine erstellte und gepusste Version 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] Nach erneuter Überprüfung der Größe in der Registrierung wurde diese auf 62 MB erhöht:
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
62M /var/lib/registry/
62M total
root@88f8e1a1d7a7:/#
[6] Um ausgeführt zu werden delete_docker_registry_image
, müssen Sie das Skript in den Container bringen, in dem sich die Registrierung befindet. Eine Option hierfür ist Curl. Auch dieses Skript erfordert jq
.
root@88f8e1a1d7a7:/# apt-get update && apt-get install -y curl jq
...
root@88f8e1a1d7a7:/#
[7] Führen Sie das Skript aus, versuchen Sie es zuerst mit der --dry-run
Option und vergessen Sie nicht das Versions-Tag (in diesem Fall v2). Es gibt auch ein gutes-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] Und voila !!
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
2.5M /var/lib/registry/
2.5M total
root@88f8e1a1d7a7:/#
Ich bin erst kürzlich selbst darauf gestoßen, habe dann aber gedacht, warum löschen, ich werde nur eine ältere Version erneut veröffentlichen:
Das kaputte Bild wird immer noch da sein, aber es ist unwahrscheinlich, dass jemand es verwenden wird, da eine "neuere" Version verfügbar ist. Natürlich ist es besser, vorwärts zu reparieren, aber zur Not ist dies eine schnelle Lösung.
Wenn der Grund, warum Sie es löschen möchten, darin besteht, dass es Geheimnisse oder etwas Enthülltes enthält, das Sie nicht herausholen wollten, sind die anderen Lösungen besser, aber nehmen Sie an, was auch immer jetzt bekannt ist, und ändern Sie es (Passwörter, Schlüssel, was auch immer).
quelle