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
.