Come controllare l'utilizzo dello spazio su disco per le immagini e i contenitori Docker

0
37

Con applicazioni containerizzate in esecuzione in ambienti isolati, può essere più difficile del solito rintracciare i problemi con le applicazioni che utilizzano troppo spazio di archiviazione. Fortunatamente, Docker fornisce comandi per la gestione dell'utilizzo del disco del contenitore.

Fare un controllo rapido

E se vuoi controllare quanto spazio Docker sta utilizzando, puoi utilizzare il comando integrato docker system df, nonché il comando Linux du per ottenere le dimensioni dell'intera directory.

docker system df sudo du -sh /var/lib/docker/< p>

Questo comando mostra immagini statiche, contenitori che hanno apportato modifiche al loro filesystem (es. file) e volumi associati ai contenitori.

Tuttavia, questo non è del tutto accurato—qui, ho molti contenitori in esecuzione, ma tutti memorizzano dati in montaggi di associazione sul sistema operativo host, non sui volumi.

Pulizia delle immagini Docker

Le immagini Docker sono diverse dai contenitori in esecuzione; sono i file che scarichi dall'hub Docker per avviare un contenitore. Di solito sono piuttosto grandi e contengono tutto il codice necessario per eseguire un sistema operativo di base e la tua applicazione.

Pubblicità

Ogni versione di un'immagine è separata, ma è memorizzata in layer, quindi più nuove versioni non occuperanno il doppio dello spazio di archiviazione. Puoi visualizzare tutte le immagini con image ls:

docker image ls

La pulizia di questi è facile; non vuoi rimuovere le immagini dei contenitori in esecuzione, ovviamente, ma rimuovere le vecchie immagini va bene—saranno semplicemente riscaricate quando necessario.

Puoi sfoltire tutto immagini o eliminarne manualmente una per ID:

immagine docker prune -a immagine docker rm 3a8d8f76e7f8f

Verifica dell'utilizzo del contenitore in esecuzione

I container sono un po' più complicati da rintracciare, poiché possono utilizzare i dati in molti modi diversi:

  • Immagine sottostante: ogni contenitore dovrà memorizzare la sua immagine, ma questa viene riutilizzata tra i contenitori.
  • Livello di modifica: se un contenitore scrive nel suo filesystem, come i file di registro, sarà salvato in un nuovo livello sopra l'immagine sottostante. Questo è unico per ogni contenitore.
  • Volumi: i contenitori possono avere unità virtuali montate su di essi, che memorizzano i dati direttamente su disco all'esterno del sistema di archiviazione Docker.
  • Supporti per rilegatura: i contenitori possono facoltativamente accedere direttamente alle directory sull'host.

Tutto tranne i montaggi di bind verrà visualizzato nell'output di docker system df. Se desideri visualizzare le statistiche per ogni contenitore, Docker fornisce un flag per il comando ps per elencare l'utilizzo:

docker ps –size

Qui, questo mostra la dimensione su disco, così come la dimensione virtuale (che include l'immagine sottostante condivisa). Poiché questi contenitori non utilizzano alcuno spazio di archiviazione al di fuori dei loro montaggi di associazione, la dimensione è zero byte.

Montaggi di debug (bind e volumi)

Per visualizzare l'utilizzo dei montaggi, sia per i montaggi con collegamento diretto che per i volumi gestiti, dovrai ottenere le dimensioni di questi dal sistema operativo host. Se non sai dove si trovano, puoi eseguire docker container ls per ottenere l'ID di un container, quindi eseguire docker inspect per acquisire le informazioni di montaggio:

docker inspect a1c904020044 -f '{{json .Mounts}}' [{“Type”:”bind”,”Source”:”/home/daemon-data/921ff235-5075-4d64-b977-8d02cc3dacc9″,”Destination” :”/home/container”,”Mode”:””,”RW”:true,”Propagation”:”rprivate”}] Pubblicità

Poi, puoi controllare la dimensione totale con du -sh:

sudo du -sh /path/to/mount/

Eliminazione di contenitori e volumi

Docker non rimuove mai contenitori o volumi (a meno che tu non eseguire contenitori con il flag –rm ), in quanto ciò potrebbe perdere i dati. Tuttavia, potresti avere un backup di dati obsoleti che devono essere raccolti nella spazzatura.

Proprio come le immagini, Docker fornisce un comando prune per contenitori e volumi:

docker container prune docker volume prune

Debug manuale

Se hai accesso diretto al server che esegue Docker, puoi aprire una shell nel contenitore:

sudo docker exec – it containerID /bin/bash

ed esegui du -sh sull'intera cosa, che restituirà tutti i dati, inclusa la dimensione dell'immagine, i dati sui montaggi di bind e i dati nei volumi.

sudo du -sh /