1. docker ps -a zeigt den laufenden Image-Prozess an[root@mylinux~]# docker ps -a CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 98acb9dcb2a2 redis:5 "docker-entrypoint.s..." vor 8 Minuten Vor 8 Minuten 0.0.0.0:6379->6379/tcp redis 1b1ff7f08583 mysql:5.7 "docker-entrypoint.s…" vor 8 Minuten Vor 8 Minuten 0.0.0.0:3306->3306/tcp, 33060/tcp mysql 035129f60a64 mongo:3.6 "docker-entrypoint.s..." vor 8 Minuten Vor 8 Minuten 0.0.0.0:27017->27017/tcp mongo 2.docker stop CONTAINER ID Um beispielsweise das MySQL-Image zu löschen, stoppen Sie den Image-ProzessDocker-Stopp 035129f60a64 3.docker rm CONTAINER ID-Image deinstallierenDocker RM 035129f60a64 4.Docker-Images Zeigen Sie die aktuelle Bild-ID des Docker-Images an[root@mylinux ~]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE redis 5 a4fe14ff1981 vor 25 Stunden 95 MB mysql 5.7 7faa3c53e6d6 vor 29 Stunden 373 MB mongo 3.6 0f29e46dab41 vor 2 Tagen 432 MB 5. Docker RMI IMAGE ID Bild löschen[root@mylinux ~]# docker rmi 7faa3c53e6d6 Ohne Tag:mysql:5.7 Ohne Tag: mysql@sha256:204f5c77fe589c202e2ebc8b6b7dcdc442d67c07168916a302ede26b3e9ab168 Gelöscht: sha256:7faa3c53e6d699fe92d49a361e427c3af937c6cea9517f092e8013b1fff1c4d9 Gelöscht: sha256:bada5edfe9c6f4637d3ef1f4797561867be56282a750c0f1d4a83c227bc7a153 Gelöscht: sha256:cb6436acc7f930ab22d387016b2296e6c191fc4ebbb1611f84e3e15073588fc7 Gelöscht: sha256:1716d22cd68158fa78c60cf78d8e25457fb384de45de7775abf3a31502b6f00e Gelöscht: sha256:daeb1195813697ab0182eb75de7f5a0f5bbfc4f8eb91be9f844777841e759984 Gelöscht: sha256:64ffa0ccfe7f5ecb4fb721913499a8e0b1af9897b69a0dbec0922f5b70666e76 Gelöscht: sha256:3b3af32bd87b74f389198eab8514d9f32f3e513dae313748b165333b286bd171 Gelöscht: sha256:c75ab456a585af40ca2ec8488164230deb81a1739d868604cb7b6661c24e37b5 Gelöscht: sha256:50a75eb6a0b2254fe5d96f999cc2087e72d515c93509a816bbd9ffb707a3b1b0 Gelöscht: sha256:1ae6616333a66450738a72a75c03bdf0236e0425ba0336ac5cdbe470ab6f4a3e Gelöscht: sha256:68e318bd9263aedd19d9d73b051a262fa57e2a16f9c81c8b39163601020cd405 Gelöscht: sha256:6270adb5794c6987109e54af00ab456977c5d5cc6f1bc52c1ce58d32ec0f15f4 Ergänzung: Docker löscht private Bibliotheksimages vollständig 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! !
So löschen Sie ein Bild:
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 Verzeichnispfad zur Speicherung von Bildern privater Bibliotheken (dieser Pfad ist der Pfad zum Einbinden des Verzeichnisses /var/lib/registry im Container privater Bibliothek auf dem lokalen Computer mit dem Befehl -v beim Ausführen des Containers privater Bibliotheken) #Beispiel: /opt/data/registry ist das Verzeichnis, in dem das private Bibliotheksbildspeicherverzeichnis in das lokale Verzeichnis eingebunden wird, wenn ich den Container echo "export DOCKER_REGISTRY_DIR=/opt/data/registry" >>/etc/profile ausführe #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/Profil #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 „Repositorys“, sondern werden als Datenblöcke im Verzeichnis „Blobs“ gespeichert. Ein Bild wird in mehrere Datenblöcke aufgeteilt, wobei die Assoziationsbeziehung der Ausgabe „Marking Blob ...“ beim Ausführen des Garbage Collection-Befehls entspricht. Die Assoziation zwischen dem Bild und dem Datenblock befindet sich im Verzeichnis „Repositorys/Image“. Der SHA256-Wert im Verzeichnis repository/_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. Besondere Aufmerksamkeit: 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:
|
<<: Hexadezimale Farbcodes (vollständig)
Eine mit HTML und CSS implementierte Registrierun...
Docker verfügt über viele Log-Plugins. Standardmä...
Inhaltsverzeichnis 1 Einführung in Benutzervariab...
Das Erstellen neuer Images aus vorhandenen Images...
Ich habe vor, eine Reihe von Haftnotizwänden zu r...
Vorwort Vergessene Passwörter sind ein Problem, d...
In diesem Artikel wird der spezifische Code des n...
Was sind Routing und Routing-Tabellen in Linux? U...
[LeetCode] 183.Kunden, die nie bestellen Angenomm...
In den vorherigen Artikeln wurde erläutert, wie S...
Weil ich ein Datenbank-Tutorial habe, das auf SQL...
Problembeschreibung: Wenn der SFTP-Host von phpst...
Inhaltsverzeichnis denken 1. Bild mit dem gierige...
Inhaltsverzeichnis Vorwort Einführung in SessionS...
Inhaltsverzeichnis 1. So funktioniert das Bootstr...