GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So überprüfen Sie die Speicherplatznutzung für Docker-Images, Container und Volumes

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 Bandyopadhyay

Mithilfe 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


Docker
  1. So installieren Sie Docker und führen Docker-Container in Ubuntu aus

  2. So überprüfen Sie den Status und den von Bildern und Containern belegten Speicherplatz

  3. So sichern und wiederherstellen Sie Docker-Container

  4. So halten Sie Docker-Container an und setzen sie fort

  5. Wie überprüfe ich den Speicherplatz in Ubuntu 20.04 und 20.10?

So überprüfen Sie die Speicherplatznutzung in Linux mit Ncdu

So überprüfen Sie die Speicherplatznutzung mit dem Ncdu-Dienstprogramm

Wie überprüfe ich die Speicherplatznutzung des WHM-Reseller-Kontos?

So bereinigen und löschen Sie Docker-Images

So reduzieren Sie die Docker-Image-Größe in Docker-Containern

So überprüfen Sie die Größe von Dateien und Verzeichnissen unter Linux