Sie fragen sich, wie viel Speicherplatz Docker auf Ihrem Linux-System verbraucht?
In erster Linie befinden sich alle Docker-Images, Container und andere zugehörige Entitäten unter /var/lib/docker
. Sie können die Größe dieses Verzeichnisses überprüfen und den gesamten von Docker belegten Speicherplatz abrufen:
[email protected]:~$ sudo du -sh /var/lib/docker
4.9G /var/lib/docker
Aber das ist nicht sehr aussagekräftig und Sie müssen vielleicht weiter in diesem Verzeichnis gehen, um zu sehen, welche Komponente welchen Platz belegt.
Zum Glück hat Docker Tools bereitgestellt, um diese Informationen auf nützlichere Weise zu erhalten.
Überprüfen der Speicherplatznutzung von Docker [The Docker Way]
Die einfachste „Docker“-Methode, um zu erfahren, wie viel Speicherplatz von Images, Containern, lokalen Volumes oder dem Build-Cache verbraucht wird, ist:
docker system df
Wenn Sie diesen Befehl ausführen (verwenden Sie sudo
falls erforderlich), erhalten Sie alle Informationen zur Festplattennutzung gruppiert nach Docker-Komponenten.
[email protected]:~$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 4 1.065GB 0B (0%)
Containers 4 4 5.705kB 0B (0%)
Local Volumes 7 7 1.108GB 0B (0%)
Build Cache 0 0 0B 0B
Dies ist definitiv besser, als sich die Gesamtgröße von /var/lib/docker anzusehen. Sie können sehen, wie viel Speicherplatz von Images, Containern und Volumes verbraucht wird.
Dies liefert jedoch immer noch ein klares Bild darüber, welches Bild oder Volumen mehr Platz einnimmt.
Tatsächlich tut es das. Das docker system df
Befehl hat die ausführliche Option -v
das gibt all diese Details.
docker system df -v
Hier ist die ausführliche Ausgabe:
[email protected]:~$ docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
ghost 4.32.0 b40265427368 8 weeks ago 468.8MB 0B 468.8MB 1
jrcs/letsencrypt-nginx-proxy-companion latest 037cc4751b5a 13 months ago 24.35MB 0B 24.35MB 1
jwilder/nginx-proxy latest 509ff2fb81dd 15 months ago 165MB 0B 165MB 1
mariadb 10.5.3 f5d2bcaf057b 20 months ago 407MB 0B 407MB 1
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
899cc90e85d9 ghost:4.32.0 "docker-entrypoint.s…" 1 0B 8 weeks ago Up 8 weeks ghost_ghost_6
17b58fdafbce jrcs/letsencrypt-nginx-proxy-companion "/bin/bash /app/entr…" 4 571B 3 months ago Up 2 months letsencrypt-proxy-companion
58f99f46ee03 jwilder/nginx-proxy "/app/docker-entrypo…" 5 5.13kB 3 months ago Up 2 months jwilder-nginx-proxy
fb907286b60e mariadb:10.5.3 "docker-entrypoint.s…" 1 2B 3 months ago Up 2 months ghost_db_1
Local Volumes space usage:
VOLUME NAME LINKS SIZE
ghostdb 1 434.7MB
jwilder-nginx-with-ssl_acme 2 36.09kB
jwilder-nginx-with-ssl_certs 2 25.12kB
jwilder-nginx-with-ssl_dhparam 1 1.525kB
jwilder-nginx-with-ssl_html 2 1.106kB
jwilder-nginx-with-ssl_vhost 2 556B
ghost 1 674MB
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
Das ist schön, oder? Es gibt auch andere Möglichkeiten.
Überprüfen der Docker-Bildgrößen
Wenn Sie nur die Docker-Bilder und ihre Größe sehen möchten, können Sie auch diesen Befehl verwenden:
docker image ls
Es listet alle Docker-Images auf Ihrem System mit einigen Details auf, darunter die Größe:
[email protected]:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 6 weeks ago 1.24MB
ubuntu latest fb52e22af1b0 5 months ago 72.8MB
alpine latest 49f356fa4513 10 months ago 5.61MB
hello-world latest d1165f221234 11 months ago 13.3kB
Überprüfen der laufenden Containergrößen
Wenn Sie die Größe laufender Docker-Container wissen möchten, können Sie auf ähnliche Weise den Befehl docker ps verwenden:
docker ps --size
Sie sollten eine SIZE-Spalte sehen, die der Ausgabe des Befehls hinzugefügt wurde:
[email protected]:~$ docker ps --size
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
1171dcfb7e06 alpine "sleep 10" 10 months ago Up 9 seconds always-policy 0B (virtual 5.61MB)
Merkst du, wie es 0B sagt und dann virtuelle 5,61 MB anzeigt? Die virtuelle Größe enthält das gemeinsam genutzte zugrunde liegende Bild.
Lassen Sie uns noch einmal genauer auf den Linux-Ansatz zurückkommen, mit dem Alpine-Image und dem Container als praktisches Beispiel.
Verwenden von Standard-Linux-Befehlen zum Analysieren der Docker-Festplattennutzung
Wann immer Sie den docker pull
verwenden Befehl oder führen Sie docker-compose up -d
aus Um den Start von Anwendungen vorzubereiten, suchen Sie wie folgt nach der Nutzung des Bildspeicherplatzes, der tatsächlich auf einem Ubuntu 20.04-Server gespeichert ist:
sudo du -sh /var/lib/docker/overlay2/<hash-named-directory>/
Hier ist Overlay2 der standardmäßige Docker-Speichertreiber auf Ubuntu. Sie können dies bestätigen, indem Sie docker info
ausführen Befehl und suchen Sie nach dem Speichertreiber:
Storage Driver: overlay2
Wenn dies anders ist als bei Ihnen, verwenden Sie einen anderen Speichertreiber für Docker. Ebenso würde der Verzeichnisort nach demselben Speichertreiber benannt werden. Die Verfügbarkeit des Speichertreibers hängt von der Kernel-Unterstützung ab.
Spezielle Image-Festplattennutzung
Wenn Sie nach den Speicherorten bestimmter Images suchen, können Sie den Docker-Befehl inspect für das gezogene Image verwenden. Nehmen wir zum Beispiel an, ich habe das Alpine-Image mit docker pull alpine
gezogen . Führen Sie den folgenden Befehl aus, um ihn zu untersuchen:
$ docker inspect alpine
Sobald Sie den Befehl ausführen, werden Sie drei Felder innerhalb der Data
bemerken Unterabschnitt unter GraphDriver
:
...
"GraphDriver": {
"Data": {
"MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
"UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
"WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
},
...
Anhand der obigen Informationen können Sie erkennen, dass die (vorher im du
erwähnten Befehlssyntax) ist in diesem Fall 64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
.
Hier können Sie den folgenden Befehl ausführen, um den Speicherplatz anzuzeigen, der vom Alpine-Bild verwendet wird:
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
6.0M /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
Ähnlich wie Bilder werden auch Container im gleichen speichertreiberbasierten Verzeichnis gespeichert.
/var/lib/docker/overlay2
Spezielle Container-Festplattennutzung
Wenn Sie nach den Standorten bestimmter Container suchen, können Sie wieder den inspect
verwenden Befehl auf Docker für den laufenden Container. Sagen wir zum Beispiel, ich habe den Alpine-Container mit docker run -ti -d alpine
ausgeführt . Wenn Sie docker ps
ausführen , sehen Sie, dass es ausgeführt wird:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb341d6a28fa alpine "/bin/sh" 6 seconds ago Up 5 seconds confident_banzai
Hier wurde der Container zufällig confident_banzai
genannt . Untersuchen wir es also:
$ docker inspect confident_banzai
Sobald Sie den obigen Befehl ausgeführt haben, werden Sie alle vier zuvor erwähnten Felder innerhalb der Data
bemerken Unterabschnitt unter GraphDriver
. An diesen Orten werden die Containerdaten physisch auf Ihrem Hostsystem gespeichert, genau wie Sie es bei Bildern gesehen haben:
...
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3-init/diff:/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
"MergedDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/merged",
"UpperDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/diff",
"WorkDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/work"
},
"Name": "overlay2"
},
...
Jetzt können Sie den du
verwenden Befehl erneut:
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
32K /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
Im Gegensatz zu Docker-Images und -Containern sind die physischen Speicherorte für Volumes ziemlich einfach. Volumes befinden sich unter:
/var/lib/docker/volumes/
Daher können Sie den folgenden Befehl ausführen, um die gesamte Speicherplatznutzung des Docker-Volumes auf Ihrem System zu erfahren:
avimanyu @iborg-desktop:~$ sudo du -sh /var/lib/docker/volumes/
60K /var/lib/docker/volumes/
Festplattennutzung eines bestimmten Volumes
In diesem Fall gibt es hauptsächlich zwei Typen. Das eine sind reguläre Docker-Volumes und das andere bind mounts.
Docker-Volumes
Wenn Sie nach den Speicherorten bestimmter Volumes suchen, können Sie das docker volume ls
verwenden Befehl zuerst und überprüfen Sie den Namen oder die ID des Volumes. Nehmen wir zum Beispiel an, ich habe den Alpine-Container mit dem folgenden Befehl mit einem Volume ausgeführt:
docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine
Jetzt ein Volume namens test-data
wird automatisch erstellt. Lassen Sie uns nun eine Datei mit dem Namen test.md
erstellen an diesem Ort:
$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"
Überprüfen Sie, ob die Datei tatsächlich erstellt wurde:
$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit
Wenn Sie docker volume ls
ausführen , das Volume mit dem Namen test-data
aufgeführt werden:
$ docker volume ls
DRIVER VOLUME NAME
local d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local test-data
Schließlich können Sie den tatsächlichen Speicherort der Datei auf Ihrem Hostsystem bestätigen:
$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct 6 23:20 test.md
Daher befindet sich der Pfad für das gemountete Volume immer in einem Verzeichnis namens _data
innerhalb des jeweiligen Volume-Verzeichnisses.
Sie können also den du
verwenden Befehl hier nochmal für bestimmte Volumes!:
[email protected]:~$ sudo du -sh /var/lib/docker/volumes/test-data/_data
4.0K /var/lib/docker/volumes/test-data/_data
Denken Sie immer daran, den Volume-Namen jedes Mal zu notieren, wenn Sie herausfinden möchten, wie viel Speicherplatz Ihr Volume belegt.
Reittiere binden
Dies ist die einzige Ausnahme in Docker, bei der Sie einen Linux-Ansatz verwenden müssen, um die Speicherplatznutzung zu überwachen. Gleichzeitig ist es immer vorzuziehen, zuerst die laufenden Container zu stoppen.
$ mkdir /home/avimanyu/test-data
$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine
In diesem Fall ein per Bind gemountetes Volume mit dem Namen test-data
wird auf der Containerseite als /var/lib/app/content
verfügbar sein .
[email protected]:~$ sudo du -sh /home/avimanyu/test-data
4.0K /home/avimanyu/test-data
Sie können dasselbe auch innerhalb des Containers testen:
[email protected]:~$ sudo docker exec -ti alpine-container sh
/ # du -sh /var/lib/app/content
4.0K /var/lib/app/content
Wie Sie sehen können, sind die beiden oben angegebenen Größen gleich, da es sich tatsächlich um Bindungshalterungen handelt.
Docker-Protokolle auf dem Host werden immer in Volumes gespeichert. Auf die in diesem Abschnitt beschriebene Weise können Benutzer auch navigieren und dies herausfinden, indem sie sich die Speicherplatznutzung von Docker-Volumes ansehen. Dies variiert von App zu App und vom Speicherort der Protokolldateien in den App-Volumes.
Bonustipps
Basierend auf dem, was Sie bisher gelernt haben, können Sie ganz offensichtlich auch den folgenden Befehl verwenden, um die Festplattennutzung von Bildern und Containern zusammen abzurufen:
sudo du -sh /var/lib/docker/overlay2
Docker-Protokolle auf dem Host werden immer in Volumes gespeichert. Ein normalerweise großes Docker-Volume weist höchstwahrscheinlich darauf hin, dass sich Protokolle angehäuft haben und ineffizient verwaltet werden.
So überprüfen Sie Docker-Protokolle [gespeichert oder in Echtzeit]Erkunden und lernen Sie einige interessante Möglichkeiten kennen, um die Protokollverwaltung in Docker zu vereinfachen. Linux-HandbuchAvimanyu BandyopadhyayMithilfe der im Abschnitt „Volumes“ dieses Artikels beschriebenen Methode können Benutzer auch navigieren und dies abmildern, indem sie sich die Speicherplatznutzung von Docker-Volumes ansehen. Dies variiert von App zu App und vom Speicherort der Protokolldateien in den App-Volumes.
Zusammenfassung
In diesem Tutorial habe ich einen generischen Linux-basierten Ansatz gewählt, um Ihnen zu zeigen, wie Sie die Speicherplatzbelegung von Docker-Images, Containern und Volumes ermitteln können, die sich auf Hostebene auf Ihrem Linux-Server befinden. Sie haben auch gelernt, wie Sie dies auf die bevorzugte Weise (Docker) tun.
Wenn Sie uns Feedback, Kommentare oder Vorschläge zu diesem Ansatz mitteilen möchten, hinterlassen Sie bitte Ihre Gedanken im Kommentarbereich unten