GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come controllare l'utilizzo dello spazio su disco per immagini Docker, contenitori e volumi

Ti chiedi quanto spazio occupa Docker sul tuo sistema Linux?

In primo luogo, tutte le immagini Docker, i contenitori e le altre entità correlate si trovano in /var/lib/docker . Puoi controllare la dimensione di questa directory e ottenere lo spazio su disco totale utilizzato da Docker:

[email protected]:~$ sudo du -sh /var/lib/docker
4.9G	/var/lib/docker

Ma non è molto descrittivo e potresti dover andare oltre in questa directory per vedere quale componente usa quale spazio.

Per fortuna, Docker ha fornito strumenti per ottenere queste informazioni in modo più utile.

Controllo dell'utilizzo dello spazio su disco Docker [The Docker Way]

Il modo più semplice, "Docker" per sapere quanto spazio viene utilizzato da immagini, contenitori, volumi locali o build cache è:

docker system df

Quando esegui questo comando (usa sudo se necessario), ottieni tutte le informazioni sull'utilizzo del disco raggruppate per componenti Docker.

[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

Questo è decisamente meglio che guardare la dimensione totale di /var/lib/docker. Puoi vedere quanto spazio viene consumato da immagini, contenitori e volumi.

Tuttavia, questo fornisce ancora un'immagine chiara su quale immagine o volume occupa più spazio.

In realtà, lo fa. Il docker system df comando ha l'opzione dettagliata -v che fornisce tutti questi dettagli.

docker system df -v

Ecco l'output dettagliato:

[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

È bello, vero? Ci sono anche altri modi.

Controllo delle dimensioni dell'immagine della finestra mobile

Se vuoi solo vedere le immagini Docker e le loro dimensioni, puoi anche usare questo comando:

docker image ls

Elenca tutte le immagini Docker sul tuo sistema con alcuni dettagli che includono le dimensioni:

[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

Controllo delle dimensioni dei container in esecuzione

Allo stesso modo, se vuoi conoscere le dimensioni dei contenitori Docker in esecuzione, puoi utilizzare il comando docker ps:

docker ps --size

Dovresti vedere una colonna SIZE aggiunta all'output del comando:

[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)

Noti come dice 0B e poi mostra 5,61 MB virtuali? La dimensione virtuale include l'immagine sottostante condivisa.

Torniamo all'approccio Linux in modo più specifico, con l'immagine e il contenitore Alpine come esempio pratico.

Utilizzo dei comandi Linux standard per analizzare l'utilizzo dello spazio su disco Docker

Ogni volta che usi il docker pull comando o esegui docker-compose up -d per preparare il lancio delle applicazioni, ecco come si cerca l'utilizzo dello spazio immagine, effettivamente memorizzato su un server Ubuntu 20.04:

sudo du -sh /var/lib/docker/overlay2/<hash-named-directory>/

Qui, Overlay2 è il driver di archiviazione Docker predefinito su Ubuntu. Puoi confermarlo eseguendo docker info comando e cercando il driver di archiviazione:

Storage Driver: overlay2

Se questo è diverso dal tuo, stai utilizzando un driver di archiviazione diverso per Docker. Allo stesso modo, la posizione della directory verrebbe denominata in base allo stesso driver di archiviazione. La disponibilità del driver di archiviazione dipende dal supporto del kernel.

Utilizzo specifico del disco immagine

Se stai cercando le posizioni di immagini specifiche, puoi utilizzare il comando Docker inspect per l'immagine estratta. Supponiamo, ad esempio, di aver estratto l'immagine alpine con docker pull alpine . Esegui il comando seguente per ispezionarlo:

$ docker inspect alpine

Una volta eseguito il comando, noterai tre campi all'interno dei Data sottosezione in GraphDriver :

...
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
                "UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
            },

...

Sulla base delle informazioni di cui sopra, puoi vedere che il (menzionato in precedenza nel du sintassi del comando) in questo caso è 64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e .

Qui puoi eseguire il seguente comando per rivelare la quantità di spazio utilizzata dall'immagine Alpine:

[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
6.0M	/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e

Allo stesso modo, come le immagini, anche i contenitori sono archiviati all'interno della stessa directory basata sul driver di archiviazione.

/var/lib/docker/overlay2

Utilizzo specifico del disco del contenitore

Se stai cercando le posizioni di contenitori specifici, puoi nuovamente utilizzare inspect comando su Docker per il contenitore in esecuzione. Supponiamo, ad esempio, di aver eseguito il container alpine con docker run -ti -d alpine . Quando esegui docker ps , vedrai che è in esecuzione:

$ docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED         STATUS         PORTS     NAMES
cb341d6a28fa   alpine    "/bin/sh"   6 seconds ago   Up 5 seconds             confident_banzai

Qui, il contenitore è stato chiamato casualmente confident_banzai . Quindi esaminiamolo:

$ docker inspect confident_banzai

Una volta eseguito il comando precedente, noterai tutti e quattro i campi menzionati in precedenza all'interno dei Data sottosezione in GraphDriver . Queste posizioni sono dove i dati del contenitore vengono archiviati fisicamente sul tuo sistema host proprio come hai visto per le immagini:

...
        "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"
        },
...

Ora puoi usare il du comando di nuovo:

[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
32K	/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3

A differenza delle immagini e dei contenitori Docker, le posizioni fisiche dei volumi sono piuttosto semplici. I volumi si trovano in:

/var/lib/docker/volumes/

Pertanto, puoi eseguire il comando seguente per conoscere l'intero utilizzo dello spazio su disco del volume Docker sul tuo sistema:

avimanyu @iborg-desktop:~$ sudo du -sh /var/lib/docker/volumes/
60K	/var/lib/docker/volumes/

Utilizzo disco specifico per volume

In questo caso, ci sono principalmente due tipi. Uno è i normali volumi Docker e l'altro è il bind mount.

Volumi Docker

Se stai cercando le posizioni di volumi specifici, puoi utilizzare il docker volume ls prima il comando e controllare il nome o l'ID del volume. Supponiamo, ad esempio, di aver eseguito il contenitore alpine con il seguente comando con un volume:

docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine

Ora, un volume chiamato test-data verrà creato automaticamente. Creiamo ora un file chiamato test.md all'interno di questa posizione:

$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"

Verifica che il file sia stato effettivamente creato:

$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit

Quando esegui docker volume ls , il volume denominato test-data verrebbe elencato:

$ docker volume ls
DRIVER    VOLUME NAME
local     d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local     e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local     test-data

Infine, puoi confermare la posizione effettiva del file sul tuo sistema host:

$ 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

Pertanto, il percorso per il volume montato si trova sempre all'interno di una directory denominata _data all'interno della rispettiva directory del volume.

Quindi puoi usare il du comando qui di nuovo per volumi specifici!:

[email protected]:~$ sudo du -sh /var/lib/docker/volumes/test-data/_data
4.0K	/var/lib/docker/volumes/test-data/_data

Ricorda sempre di annotare il nome del volume ogni volta che vuoi scoprire quanto spazio sta utilizzando il tuo volume.

Lega i supporti

Questa è l'unica eccezione in Docker in cui è necessario utilizzare un approccio Linux per monitorare l'utilizzo dello spazio su disco. Allo stesso tempo, è sempre preferibile arrestare prima i container in esecuzione.

$ mkdir /home/avimanyu/test-data
$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine

In questo caso, un volume montato in binding denominato test-data diventerà disponibile sul lato contenitore come /var/lib/app/content .

[email protected]:~$ sudo du -sh /home/avimanyu/test-data
4.0K	/home/avimanyu/test-data

Puoi anche testare la stessa cosa all'interno del contenitore:

[email protected]:~$ sudo docker exec -ti alpine-container sh
/ # du -sh /var/lib/app/content
4.0K	/var/lib/app/content

Come puoi vedere, entrambe le taglie sopra riportate sono le stesse perché in realtà sono montature vincolate.

I registri Docker sull'host sono sempre archiviati in volumi. Utilizzando il modo descritto in questa sezione, gli utenti possono anche navigare e scoprirlo esaminando l'utilizzo dello spazio su disco dei volumi Docker. Questo varia da un'app all'altra e dalla posizione dei file di registro nei volumi dell'app.

Suggerimenti bonus

Sulla base di ciò che hai imparato fino ad ora, ovviamente, puoi anche utilizzare il seguente comando per recuperare l'utilizzo del disco di immagini e contenitori insieme:

sudo du -sh /var/lib/docker/overlay2

I registri Docker sull'host sono sempre archiviati in volumi. Un volume Docker solitamente grande indicherebbe molto probabilmente che i log si sono accumulati e vengono gestiti in modo inefficiente.

Come controllare i registri Docker [Memorizzati o in tempo reale]Esplora e impara alcuni modi interessanti per semplificare la gestione dei registri su Docker. Manuale LinuxAvimanyu Bandyopadhyay

Utilizzando il modo descritto nella sezione dei volumi di questo articolo, gli utenti possono anche navigare e mitigare questo problema esaminando l'utilizzo dello spazio su disco dei volumi Docker. Questo varia da un'app all'altra e dalla posizione dei file di registro nei volumi dell'app.

Riepilogo

In questo tutorial, ho adottato un approccio generico basato su Linux per mostrarti come scoprire l'occupazione dello spazio su disco di immagini, contenitori e volumi Docker che risiedono sul tuo server Linux a livello di host. Hai anche imparato a farlo nel modo preferito (Docker).

Se desideri condividere feedback, commenti o suggerimenti su questo approccio, lascia i tuoi pensieri nella sezione commenti qui sotto


Docker
  1. Come rimuovere tutte le immagini Docker, i contenitori, i volumi, le reti e le risorse inutilizzate

  2. Come esportare e importare contenitori Docker

  3. Come trovare spazio libero su disco e analizzare l'utilizzo del disco?

  4. Come controllare l'utilizzo del disco della directory e dell'utilizzo della larghezza di banda?

  5. Come controllare lo spazio su disco in Ubuntu 20.04 e 20.10?

Come controllare l'utilizzo dello spazio su disco in Linux utilizzando Ncdu

Come controllare l'utilizzo dello spazio su disco con l'utilità Ncdu

Come controllare l'utilizzo dello spazio su disco dell'account rivenditore WHM?

Come ripulire ed eliminare le immagini Docker

Come ridurre le dimensioni dell'immagine Docker nei contenitori Docker

Come controllare la dimensione di file e directory su Linux