Introduzione

Docker semplifica il confezionamento di applicazioni e servizi in contenitori in modo da poterli eseguire ovunque. Mentre lavori con Docker, tuttavia, è anche facile accumulare un numero eccessivo di immagini, contenitori e volumi di dati inutilizzati che ingombrano l'output e consumano spazio su disco.

Docker offre tutti gli strumenti necessari per ripulire il sistema dalla riga di comando. Questa guida in stile cheat sheet fornisce un rapido riferimento ai comandi che sono utili per liberare spazio su disco e mantenere organizzato il sistema rimuovendo immagini, contenitori e volumi Docker inutilizzati.

Come usare questa guida:

  • Questa guida è in formato cheat sheet con frammenti di riga di comando autonomi
  • Passa a qualsiasi sezione pertinente all'attività che stai tentando di completare.

La sintassi di sostituzione dei comandi command $(command), utilizzata nei comandi è disponibile in molte shell popolari come bash, zsh e Windows Powershell.

Eliminare tutte le immagini, i contenitori, i volumi e le reti non utilizzati o sospese

Docker fornisce un singolo comando che pulirà tutte le risorse (immagini, contenitori, volumi e reti) che pendono (non associate a un contenitore):

docker system prune

Per rimuovere ulteriormente eventuali contenitori fermi e tutte le immagini inutilizzate (non solo le immagini pendenti), aggiungi il flag -a al comando:

docker system prune -a

Rimozione delle immagini Docker

Rimuovi una o più immagini specifiche.

Utilizzare il comando docker images con il flag -a per individuare l'ID delle immagini che si desidera rimuovere. Questo ti mostrerà ogni immagine, compresi i livelli intermedi dell'immagine. Quando hai individuato le immagini che desideri eliminare, puoi passare il loro ID o tag a docker rmi:

Elencare le immagini:

docker images -a

Rimuovere le immagini:

docker rmi Image Image

Rimuovere immagini dangling (pendenti)

Le immagini Docker sono composte da più livelli. Le immagini pendenti sono livelli che non hanno alcuna relazione con alcuna immagine taggata. Non servono più a uno scopo e consumano spazio su disco. Possono essere individuati aggiungendo il flag di filtro, -f con un valore di dangling=true al comando docker images. Quando sei sicuro di volerli eliminare, puoi usare il comando docker images purge:

Nota: se si costruisce un'immagine senza etichettarla, l'immagine apparirà nell'elenco delle immagini pendenti perché non ha alcuna associazione con un'immagine contrassegnata. Puoi evitare questa situazione fornendo un tag durante la creazione e puoi etichettare retroattivamente un'immagine con il comando tag docker.

Elencare le immagini pendenti:

docker images -f dangling=true

Rimuovere  le immagini pendenti:

docker image prune

Rimuovere le immagini secondo uno schema

Puoi trovare tutte le immagini che corrispondono a un modello usando una combinazione di docker images e grep. Una volta che sei sicuro, puoi eliminarli usando awk per passare gli ID a docker rmi. Si noti che queste utilità non sono fornite da Docker e non sono necessariamente disponibili su tutti i sistemi:

Elencare le immagini con grep:

docker images -a |  grep "pattern"

Rimuovere le immagini con grep e awk:

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

Rimuovi tutte le immagini

Tutte le immagini Docker su un sistema possono essere elencate aggiungendo -a al comando docker images. Una volta che sei sicuro di volerli eliminare tutti, puoi aggiungere il flag -q per passare l'ID immagine a docker rmi:

Elencare tutte le immagini:

docker images -a

Rimuovere tutte le immagini:

docker rmi $(docker images -a -q)

Rimuovere i contenitori

Rimuovere uno o più contenitori specifici.

Utilizzare il comando docker ps con il flag -a per individuare il nome o l'ID dei contenitori che si desidera rimuovere:

Elencare tutti i contenitori:

docker ps -a

Rimuovere tutti i contenitori:

docker rm ID_or_Name ID_or_Name

Rimuovere un contenitore all'uscita

Se sai quando stai creando un contenitore che non vorrai tenerlo in giro una volta che hai finito, puoi utilizzare il comando docker run --rm per eliminarlo automaticamente quando esce.

Esegui e rimuovi:

docker run --rm image_name

Rimuovere tutti i contenitori usciti (spenti)

È possibile individuare i contenitori utilizzando docker ps -a e filtrarli in base al loro stato: creati, riavviati, in esecuzione, in pausa o usciti (exited). Per rivedere l'elenco dei contenitori usciti, utilizzare il flag -f per filtrare in base allo stato. Dopo aver verificato, desideri rimuovere quei contenitori, usare il flag -q per passare gli ID al comando docker rm.

Elencare  tutti i contenitori "usciti" (Exited):

docker ps -a -f status=exited

Rimuovere tutti i contenitori "usciti" (Exited):

docker rm $(docker ps -a -f status=exited -q)

Rimuovere i contenitori utilizzando più di un filtro

I filtri docker possono essere combinati ripetendo il flag di filtro con un valore aggiuntivo. Ciò si traduce in un elenco di contenitori che soddisfano entrambe le condizioni. Ad esempio, se si desidera eliminare tutti i contenitori contrassegnati come Created (uno stato che può risultare quando si esegue un contenitore con un comando non valido) o Exited, è possibile utilizzare due filtri:

Elencare i contenitori filtrati:

docker ps -a -f status=exited -f status=created

Rimuovere i contenitori filtrati:

docker rm $(docker ps -a -f status=exited -f status=created -q)

Rimuovere i contenitori secondo uno schema

Puoi trovare tutti i contenitori che corrispondono a un modello usando una combinazione di docker ps e grep. Quando sei soddisfatto di avere l'elenco che desideri eliminare, puoi utilizzare awk e xargs per fornire l'ID al comando docker rmi. Si noti che queste utilità non sono fornite da Docker e non sono necessariamente disponibili su tutti i sistemi:

Elenco i contenitori secondo uno schema:

docker ps -a |  grep "pattern"

Rimuovere i contenitori secondo uno schema:

docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

Arrestare e rimuovere tutti i contenitori

È possibile rivedere i contenitori sul proprio sistema con docker ps. L'aggiunta del flag -a mostrerà tutti i contenitori. Quando sei sicuro di volerli eliminare, puoi aggiungere il flag -q per fornire gli ID ai comandi docker stop e docker rm:

Elencare:

docker ps -a

Rimuovere:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Rimuovere uno o più volumi specifici: Docker 1.9 e versioni successive

Utilizzare il comando docker volume ls per individuare il nome del volume o i nomi che si desidera eliminare. Quindi è possibile rimuovere uno o più volumi con il comando docker volume rm:

Elencare i volumi:

docker volume ls

Rimuovere i volumi:

docker volume rm volume_name

Rimuovere i volumi sospesi - Docker 1.9 e versioni successive

Poiché il punto dei volumi deve essere indipendente dai contenitori, quando un contenitore viene rimosso, un volume non viene rimosso automaticamente allo stesso tempo. Quando esiste un volume e non è più collegato a nessun contenitore, viene chiamato volume pendente (dangling). Per individuarli e per confermare che si desidera rimuoverli, è possibile utilizzare il comando docker volume ls con un filtro per limitare i risultati ai volumi sospesi. Quando sei sicuro dell'elenco, puoi rimuoverli tutti con docker volume prune:

Elencare i volumi sospesi:

docker volume ls -f dangling=true

Rimuovere i volumi sospesi:

docker volume prune

Rimuovere un contenitore e il suo volume

Se hai creato un volume senza nome, può essere eliminato contemporaneamente al contenitore con il flag -v. Si noti che funziona solo con volumi senza nome. Quando il contenitore viene rimosso correttamente, viene visualizzato il suo ID. Si noti che non viene fatto alcun riferimento alla rimozione del volume. Se è senza nome, viene rimosso silenziosamente dal sistema. Se è nominato, rimane silenziosamente presente.

Rimuovere un contenitore e il suo volume:

docker rm -v container_name

Conclusione

Questa guida copre alcuni dei comandi più comuni utilizzati per rimuovere immagini, contenitori e volumi con Docker. Ci sono molte altre combinazioni e flag che possono essere utilizzati con ciascuno. Per una guida completa per ciò che è disponibile, consultare la documentazione per Docker docker system prune, docker rmi, docker rm e docker volume rm.