Werfen wir zunächst einen Blick auf die allgemeinen Praktiken im InternetStandardmäßig unterstützen private Bibliotheken das Löschen von Bildern nicht. Sie müssen die Konfigurationsdatei config.yml ändern, unter dem Speicherknoten delete: enabled: true hinzufügen und dann die private Bibliothek neu starten. Die von Docker bereitgestellte API zum Löschen von Bildern lautet: LÖSCHEN Sie ip:port/v2/<Repository>/manifests/<Referenz> Repository ist das gespiegelte Repository Referenz ist der Digest, der nach dem erfolgreichen Pushen des Images generiert wird: sha256-Wert Zusammenfassung abrufen:curl --header "Akzeptieren: application/vnd.docker.distribution.manifest.v2+json" -I -XGET <private Bibliotheks-IP>:Portnummer/v2/<Image-Repository>/Manifeste/<Image-Tag> Beachten: --header "Accept: application/vnd.docker.distribution.manifest.v2+json" Dieser Header muss hinzugefügt werden. Wenn er nicht hinzugefügt wird, ist der Content-Type v1+prettyjws und der erhaltene Digest ist falsch! ! Beispiel: curl --header "Akzeptieren: application/vnd.docker.distribution.manifest.v2+json" -I -XGET 192.168.120.107:5000/v2/my-registry/manifests/1.0 So löschen Sie ein Bild:Beispiel: curl -I -X LÖSCHEN http://192.168.120.107:5000/v2/my-repository/manifests/sha256:4d523adb3c653bab7dfd0326081860b3cba24dc393f69d6731daa513c435ec0c Nach dem Löschen überprüfen wir die private Bibliothek curl 192.168.120.107:5000/ v2/mein-Repository/Tags/Liste Sie werden feststellen, dass das Tag, das Sie gerade gelöscht haben, verschwunden ist. Wenn Sie jedoch vor und nach der Ausführung des Befehls die Dateigröße des Bildspeicherverzeichnisses der privaten Bibliothek in der Garage überprüfen, werden Sie feststellen, dass sich nicht viel geändert hat. Offensichtlich werden die Daten nicht wirklich gelöscht, wir müssen noch den von Docker bereitgestellten Garbage Collection-Befehl ausführen. SpeicherbereinigungWir müssen uns beim Server anmelden, auf dem sich die private Bibliothek befindet, und dann den Befehl ausführen: docker exec -it <Container-ID oder Containername der privaten Bibliothek> sh -c 'registry garbage-collect /etc/docker/registry/config.yml' Natürlich können Sie auch in den Container der privaten Bibliothek gehen und Folgendes ausführen: docker exec -it <Container-ID oder Containername der privaten Bibliothek> sh Speicherbereinigung der Registrierung /etc/docker/registry/config.yml Diese Methode ist sehr problematisch. Sie kann nur Tags, aber keine Repositorys löschen. Nach dem Löschen bleiben viele leere Ordner im Blobs-Verzeichnis zurück. Wenn sich außerdem mehrere Tags in einem Repository befinden und die Daten dieser Tags gleich sind, werden beim Löschen eines Tags alle Tags gleichzeitig gelöscht. Obwohl es im Internet Python-Skripte zum Löschen von Bildern aus privaten Bibliotheken gibt, halte ich sie für nicht benutzerfreundlich. Damit gebe ich mich nicht zufrieden und habe daher selbst ein SH-Skript geschrieben, um zunächst die Wirkung zu sehen. Das Skript enthält auch einige benutzerfreundliche Eingabeaufforderungen und das SH-Skript ist leicht zu verstehen und zu erweitern. Ich habe das Skript auch auf GitHub hochgeladen. Wenn Sie interessiert sind, können Sie es herunterladen und ausprobieren. GitHub-Adresse: https://github.com/hushuai86/docker-delete Herunterladen und ausführen:#Laden Sie zuerst das Skript in das Verzeichnis /usr/local/bin/ herunter curl https://raw.githubusercontent.com/hushuai86/docker-delete/master/docker-delete-2.0.sh | sudo tee /usr/local/bin/docker-delete >/dev/null #Ausführungsberechtigung erteilen chmod a+x /usr/local/bin/docker-delete #Globale Umgebungsvariable für den Pfad zum Speicherverzeichnis für private Bibliotheksbilder (dieser Pfad ist der Pfad zum Mounten des Verzeichnisses /var/lib/registry im Container für private Bibliotheken auf der lokalen Maschine mit dem Befehl -v beim Ausführen des Containers für private Bibliotheken) #Beispiel: /opt/data/registry ist das Verzeichnis, in dem das Speicherverzeichnis für private Bibliotheksbilder auf der lokalen Maschine gemountet wird, wenn ich den Container ausführe echo "export DOCKER_REGISTRY_DIR=/opt/data/registry" >>/etc/profile #Einstellung der globalen Umgebungsvariablen „ID des privaten Bibliothekscontainers ausführen“ (die ID des ausgeführten privaten Bibliothekscontainers) #Beispiel: 89b9b3c9054ay ist die ID meines privaten Bibliothekscontainers echo „export DOCKER_REGISTRY_CONTAINER_ID=89b9b3c9054a“ >>/etc/profile #Machen Sie die Konfiguration wirksamsource /etc/profile Anschließend können Sie den Befehl „docker-delete“ verwenden. Wenn Sie sich mit dem Skript nicht wohl fühlen, können Sie das Skript bearbeiten und selbst ändern. Prinzipanalyse:(Im folgenden Screenshot ist /opt/data/registry das Verzeichnis, in dem das private Bibliotheksbildspeicherverzeichnis in das lokale Verzeichnis eingebunden wird, wenn ich den Container ausführe) Es gibt zwei Ordner Blobs und Repositories unter dem privaten Bibliotheksbildspeicherverzeichnis Das Repository-Verzeichnis enthält mehrere Dateien, die nach dem Spiegel-Repository benannt sind. Mit anderen Worten: Wenn Sie wissen möchten, welche Bilder sich in der privaten Bibliothek befinden, schauen Sie sich einfach die Unterordner in diesem Ordner an. In jedem Image-Repository-Ordner/_manifests/tags-Verzeichnis können Sie sehen, welche Tags das Image hat Die eigentlichen Daten des Bildes befinden sich jedoch nicht im Verzeichnis „repositories“, sondern werden in Form von Datenblöcken im Verzeichnis „blobs“ gespeichert. Ein Bild wird in mehrere Datenblöcke aufgeteilt, was der Assoziationsbeziehung entspricht, die beim Ausführen des Garbage Collection-Befehls ausgegeben wird, wie „marking blob ...“. Die Assoziation zwischen dem Bild und dem Datenblock ist der sha256-Wert im Verzeichnis „repositories/mirrorrepository/_manifests/revisions/sha256/“. Im Verzeichnis, das nach dem SHA256-Wert benannt ist, befindet sich eine Linkdatei, und der Inhalt ist dieser SHA256-Wert Nach meinem Test habe ich festgestellt, dass, solange diese Linkdatei gelöscht und der Garbage Collection-Befehl „registry garbage-collect /etc/docker/registry/config.yml“ im privaten Bibliothekscontainer ausgeführt wird, die mit diesem SHA256-Wert verknüpften Blobs vollständig gelöscht werden. Ein Bild kann jedoch viele Tags haben. Zu welchem Tag gehören also die mit diesem SHA256-Wert verknüpften Blob-Daten? Wenn wir in ein Verzeichnis „tag/index/sha256/“ des Bildes gehen, finden wir einen Ordner, der nach dem SHA256-Wert benannt ist, und dieser SHA256-Wert existiert unter den vorherigen Revisionen/sha256/. In diesem Ordner befindet sich auch eine Linkdatei, die den SHA256-Wert speichert. Nach meinem Verständnis erhalten wir also, wenn wir die von Docker bereitgestellte API aufrufen, um ein Tag zu löschen, den SHA256-Wert in der Datei tag/index/sha256/<sha256 value>/link dieses Images und prüfen dann, ob andere Tags mit diesem SHA256-Wert verknüpft sind. Wenn ja, löschen Sie nur diesen Tag-Ordner. Wenn nicht, wird beim Löschen der Tag-Datei auch die Link-Datei gelöscht, die dem geänderten SHA256 im Verzeichnis revisions/sha256/ entspricht. Auf diese Weise werden die mit dem SHA256-Wert verknüpften Blob-Daten vollständig gelöscht, wenn der Garbage Collection-Befehl im Container ausgeführt wird. Besonderer Hinweis:Nachdem Sie die Daten eines Bildes vollständig gelöscht haben, müssen Sie den privaten Bibliothekscontainer neu starten. Wenn Sie ihn nicht neu starten, wird beim erneuten Pushen des Bildes in die private Bibliothek immer „Ebene ist bereits vorhanden“ ausgegeben, was wie ein Pushen aussieht. Wenn Sie jedoch das lokale Bild löschen und es dann erneut abrufen, wird eine Fehlermeldung angezeigt. Natürlich gibt es diesen Schritt in dem Skript, das ich geschrieben habe Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur. Das könnte Sie auch interessieren:
|
<<: Semantische Webseiten XHTML semantische Auszeichnung
>>: Beispielcode zum Konvertieren des Mysql-Abfrageergebnissatzes in JSON-Daten
In diesem Artikel wird der spezifische Code von V...
Wenn Sie DApps auf Ethereum entwickelt haben, hab...
Rendern Definieren Sie das Skelett, schreiben Sie...
Zusammenfassen Dieser Artikel endet hier. Ich hof...
Welchen Parameter verwendet der RPM-Befehl zum In...
1. Zweck Schreiben Sie lokal eine Flask-Anwendung...
Inhaltsverzeichnis Partitionierungsmechanismus SE...
Inhaltsverzeichnis Hintergrund erreichen 1. Gekap...
Verfahren: Nach Beschreibung: Beides kann nicht e...
Die Datei shutdown.bat enthält einen Satz wenn ni...
Vorwort Wenn sich unser Geschäft in einem sehr fr...
Um mehrere Datenbanken zu sichern, können Sie den...
Inhaltsverzeichnis Fertighaus So erstellen Sie ei...
Upgrade der Linux-Version: 1. Stellen Sie zunächs...
Inhaltsverzeichnis Vorwort 1. Anwendungskomponent...