Wo werden Docker-Bilder gespeichert? Docker-Containerpfade erklärt

Docker ist weit verbreitet und wird zum Ausführen und Skalieren von Anwendungen in der Produktion verwendet. Darüber hinaus können damit Anwendungen schnell gestartet werden, indem ein einzelner Docker-Befehl ausgeführt wird.

Unternehmen investieren auch immer mehr Anstrengungen in die Verbesserung der Entwicklung lokaler und entfernter Docker-Container, was ebenfalls viele Vorteile mit sich bringt.

Sie können die grundlegenden Informationen zu Ihrer Docker-Konfiguration abrufen, indem Sie Folgendes ausführen:

$ docker info ... Storage Driver: overlay2 Docker Root Dir: /var/lib/docker ... 

Die Ausgabe enthält Informationen zu Ihrem Speichertreiber und Ihrem Docker-Stammverzeichnis.

Der Speicherort von Docker-Images und -Containern

Ein Docker-Container besteht aus Netzwerkeinstellungen, Volumes und Images. Der Speicherort der Docker-Dateien hängt von Ihrem Betriebssystem ab. Hier ist eine Übersicht für die am häufigsten verwendeten Betriebssysteme:

  • Ubuntu: /var/lib/docker/
  • Fedora: /var/lib/docker/
  • Debian: /var/lib/docker/
  • Windows: C:\ProgramData\DockerDesktop
  • Mac OS: ~/Library/Containers/com.docker.docker/Data/vms/0/

Unter MacOS und Windows führt Docker Linux-Container in einer virtuellen Umgebung aus. Daher gibt es einige zusätzliche Dinge zu wissen.

Docker für Mac

Docker ist nicht nativ mit macOS kompatibel, daher wird Hyperkit zum Ausführen eines virtuellen Images verwendet. Die virtuellen Bilddaten befinden sich in:  

~/Library/Containers/com.docker.docker/Data/vms/0

Innerhalb des virtuellen Images ist der Pfad der Standard-Docker-Pfad /var/lib/docker.

Sie können Ihr Docker-Stammverzeichnis untersuchen, indem Sie eine Shell in der virtuellen Umgebung erstellen:

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

Sie können diese Sitzung beenden , indem Sie Strg + a drücken, gefolgt von k und y .

Docker für Windows

Unter Windows ist Docker etwas fraktioniert. Es gibt native Windows-Container, die ähnlich wie Linux-Container funktionieren. Linux-Container werden in einer minimalen Hyper-V-basierten virtuellen Umgebung ausgeführt.

Die Konfiguration und das virtuelle Image zum Ausführen von Linux-Images werden im Standard-Docker-Stammordner gespeichert.

C:\ProgramData\DockerDesktop

Wenn Sie normale Bilder überprüfen, erhalten Sie Linux-Pfade wie:

$ docker inspect nginx ... "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff" ... 

Sie können eine Verbindung zum virtuellen Image herstellen, indem Sie:

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh

Dort können Sie zum angegebenen Speicherort gehen:

$ cd /var/lib/docker/overlay2/585...9eb/ $ ls -lah drwx------ 4 root root 4.0K Feb 6 06:56 . drwx------ 13 root root 4.0K Feb 6 09:17 .. drwxr-xr-x 3 root root 4.0K Feb 6 06:56 diff -rw-r--r-- 1 root root 26 Feb 6 06:56 link -rw-r--r-- 1 root root 57 Feb 6 06:56 lower drwx------ 2 root root 4.0K Feb 6 06:56 work

Die interne Struktur des Docker-Stammordners

Im Inneren /var/lib/dockerwerden verschiedene Informationen gespeichert. Zum Beispiel Daten für Container, Volumes, Builds, Netzwerke und Cluster.

$ ls -la /var/lib/docker total 152 drwx--x--x 15 root root 4096 Feb 1 13:09 . drwxr-xr-x 13 root root 4096 Aug 1 2019 .. drwx------ 2 root root 4096 May 20 2019 builder drwx------ 4 root root 4096 May 20 2019 buildkit drwx------ 3 root root 4096 May 20 2019 containerd drwx------ 2 root root 12288 Feb 3 19:35 containers drwx------ 3 root root 4096 May 20 2019 image drwxr-x--- 3 root root 4096 May 20 2019 network drwx------ 6 root root 77824 Feb 3 19:37 overlay2 drwx------ 4 root root 4096 May 20 2019 plugins drwx------ 2 root root 4096 Feb 1 13:09 runtimes drwx------ 2 root root 4096 May 20 2019 swarm drwx------ 2 root root 4096 Feb 3 19:37 tmp drwx------ 2 root root 4096 May 20 2019 trust drwx------ 15 root root 12288 Feb 3 19:35 volumes 

Docker-Bilder

Die schwersten Inhalte sind normalerweise Bilder. Wenn Sie den Standardspeichertreiber overlay2 verwenden, werden Ihre Docker-Images in gespeichert /var/lib/docker/overlay2. Dort finden Sie verschiedene Dateien, die schreibgeschützte Ebenen eines Docker-Bildes darstellen, und eine Ebene darüber, die Ihre Änderungen enthält.

Lassen Sie uns den Inhalt anhand eines Beispiels untersuchen:

$ docker image pull nginx $ docker image inspect nginx [ { "Id": "sha256:207...6e1", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "[email protected]:ad5...c6f" ], "Parent": "", ... "Architecture": "amd64", "Os": "linux", "Size": 126698063, "VirtualSize": 126698063, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff: /var/lib/docker/overlay2/585...9eb/diff", "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged", "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff", "WorkDir": "/var/lib/docker/overlay2/585...9eb/work" }, ... 

Das LowerDir enthält die schreibgeschützten Ebenen eines Bildes. Die Lese- / Schreibschicht, die Änderungen darstellt, ist Teil des UpperDir . In meinem Fall enthält der Ordner NGINX UpperDir die Protokolldateien:

$ ls -la /var/lib/docker/overlay2/585...9eb/diff total 8 drwxr-xr-x 2 root root 4096 Feb 2 08:06 . drwxr-xr-x 3 root root 4096 Feb 2 08:06 .. lrwxrwxrwx 1 root root 11 Feb 2 08:06 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Feb 2 08:06 error.log -> /dev/stderr

Das MergedDir repräsentiert das Ergebnis von UpperDir und LowerDir , die von Docker zum Ausführen des Containers verwendet werden. Das WorkDir ist ein internes Verzeichnis für overlay2 und sollte leer sein.

Docker-Volumes

Es ist möglich, Containern einen dauerhaften Speicher hinzuzufügen, um Daten länger als der Container zu speichern, oder um das Volume für den Host oder andere Container freizugeben. Ein Container kann mit einem Volume mit der Option -v gestartet werden :

$ docker run --name nginx_container -v /var/log nginx

Informationen zum Standort des angeschlossenen Volumes erhalten Sie über:

$ docker inspect nginx_container ... "Mounts": [ { "Type": "volume", "Name": "1e4...d9c", "Source": "/var/lib/docker/volumes/1e4...d9c/_data", "Destination": "/var/log", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ... 

Das Verzeichnis, auf das verwiesen wird, enthält Dateien vom Speicherort /var/logdes NGINX-Containers.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data total 88 drwxr-xr-x 4 root root 4.0K Feb 3 21:02 . drwxr-xr-x 3 root root 4.0K Feb 3 21:02 .. drwxr-xr-x 2 root root 4.0K Feb 3 21:02 apt -rw-rw---- 1 root 43 0 Jan 30 00:00 btmp -rw-r--r-- 1 root root 34.7K Feb 2 08:06 dpkg.log -rw-r--r-- 1 root root 3.2K Feb 2 08:06 faillog -rw-rw-r-- 1 root 43 29.1K Feb 2 08:06 lastlog drwxr-xr-x 2 root root 4.0K Feb 3 21:02 nginx -rw-rw-r-- 1 root 43 0 Jan 30 00:00 w 

Bereinigen Sie den von Docker genutzten Speicherplatz

Es wird empfohlen, den Docker-Befehl zu verwenden, um nicht verwendete Container zu bereinigen. Container, Netzwerke, Images und der Build-Cache können wie folgt bereinigt werden:

$ docker system prune -a

Darüber hinaus können Sie nicht verwendete Volumes entfernen, indem Sie Folgendes ausführen:

$ docker volumes prune

Zusammenfassung

Docker ist ein wichtiger Bestandteil der Umgebung und der Werkzeuge vieler Menschen. Manchmal fühlt sich Docker ein bisschen wie Magie an, indem es Probleme auf sehr intelligente Weise löst, ohne dem Benutzer zu sagen, wie die Dinge hinter den Kulissen gemacht werden. Dennoch ist Docker ein reguläres Tool, das seine schweren Teile an Orten aufbewahrt, die geöffnet und geändert werden können.

Manchmal kann sich der Speicher schnell füllen. Daher ist es nützlich, den Stammordner zu überprüfen, es wird jedoch nicht empfohlen, Dateien manuell zu löschen oder zu ändern. Stattdessen können die Bereinigungsbefehle verwendet werden, um Speicherplatz freizugeben.

Ich hoffe dir hat der Artikel gefallen. Wenn es Ihnen gefällt und Sie Applaus brauchen, folgen Sie mir auf Twitter.

Ich bin Mitbegründer unserer revolutionären Reiseplattform Explore The World. Wir sind ein junges Startup mit Sitz in Dresden und werden zuerst den deutschen Markt ansprechen. Kontaktieren Sie mich, wenn Sie Feedback und Fragen zu einem Thema haben.

Happy Docker beim Erkunden :)

Verweise

  • Docker Storagediver-Dokumentation

    //docs.docker.com/storage/storagedriver/

  • Dokumentations-Overlay-Dateisystem

    //www.kernel.org/doc/Documentation/filesystems/overlayfs.txt