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 BandyopadhyayUtilizzando 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