Corso
Se lavori ogni giorno con Docker, sai quanto velocemente può consumare spazio su disco.
Col tempo, il sistema accumula immagini, container, volumi e network inutilizzati. Per lo più restano lì inattivi, occupando prezioso spazio di archiviazione e potenzialmente impedendoti di lavorare al progetto attuale. Per fortuna, Docker offre dei comandi di pulizia integrati che rimuovono facilmente le risorse non necessarie.
Questi comandi di pulizia fanno parte della famiglia docker prune e oggi li vedrai nel dettaglio. Diventeranno presto la tua soluzione di riferimento per liberare spazio su disco.
Iniziamo con una breve panoramica prima di passare agli esempi pratici.
Sei alle prime armi con Docker? Dai un'occhiata alla nostra guida su imparare Docker da zero per i data professional per metterti subito in pari.
Che cos'è Docker Prune?
Il termine "Docker Prune" in genere si riferisce a una serie di comandi pensati per aiutarti a rimuovere le risorse Docker inutilizzate e non necessarie.
Col tempo, soprattutto se lavori su più progetti, creerai innumerevoli immagini, eseguirai container e imposterai volumi e network. Tutto questo si accumula sul sistema, occupando una quantità significativa di spazio su disco. Lo scopo di docker prune è ripulire questo disordine e recuperare spazio.
Detto questo, c'è più in docker prune di quanto sembri a prima vista.
Non è solo un singolo comando da eseguire. Beh, potresti farlo, ma a volte ti serve un controllo granulare su ciò che viene rimosso. È qui che entra in gioco questo articolo. Ti mostrerà come gestire il pruning in modo efficace, assicurandoti di eliminare solo ciò che intendi e come fare pratica in un ambiente sicuro per evitare di rimuovere per errore dati importanti.
Vale anche la pena notare che i comandi di prune rimuovono solo le risorse non attivamente in uso. Immagini, volumi e network referenziati da container in esecuzione non verranno eliminati. In altre parole, il pruning non interferisce con i carichi di lavoro attivi.
Nella prossima sezione ti guideremo tra i diversi tipi di comandi di pruning e spiegheremo come inserirli nel tuo flusso di lavoro.
Vuoi aggiungere Docker al tuo CV o al tuo portfolio? Queste 10 idee per progetti Docker ti porteranno pronto per il lavoro.
Tutti i comandi Docker Prune con esempi pratici
Docker fornisce diversi comandi prune che ti permettono di ripulire le risorse inutilizzate singolarmente o tutte insieme. In questa sezione li conoscerai—sia in teoria che con esempi pratici.
docker system prune
Questo è il comando più completo per recuperare spazio su disco. Rimuove in un'unica operazione tutti i container, i network, le immagini e la cache di build inutilizzati.
Se cerchi un modo rapido per liberare spazio su disco con un solo comando, questo è quello da usare.
Puoi passare opzioni al comando docker system prune:
-ao--allrimuove tutte le immagini inutilizzate invece delle sole "dangling" (immagini non taggate o non referenziate da alcun container).--filterconsente di specificare valori di filtro.-fo--forcesalta la richiesta di conferma.--volumeseffettua il prune anche dei volumi anonimi insieme a container, network, immagini e cache di build.
Per impostazione predefinita, docker system prune chiede conferma perché è un'operazione potenzialmente distruttiva:

Immagine 1 - Prompt di conferma di docker system prune
Per bypassare il prompt e rimuovere con un solo comando tutte le immagini, i container, i network e i volumi inutilizzati, esegui:
docker system prune -a -f --volumes

Immagine 2 - Rimuovi tutto con un singolo comando docker system prune
Ma se ti serve un controllo più granulare? Vediamolo subito.
docker container prune
In poche parole, questo comando rimuove tutti i container arrestati.
I container arrestati restano sul sistema finché non vengono rimossi manualmente. Possono occupare spazio su disco ed essere difficili da individuare a meno che tu non usi uno strumento come la Dashboard di Docker Desktop.
Come docker system prune, anche questo comando supporta opzioni:
--filterti permette di specificare coppie chiave-valore per controllare quali container rimuovere.-fo--forcesalta la richiesta di conferma.
Ecco un elenco di container non in esecuzione:

Immagine 3 - Elenco di container non in esecuzione
Per rimuovere code-server (e qualsiasi altro container arrestato), esegui:
docker container prune -f
Non verrà richiesto conferma e, in pochi secondi, vedrai un output simile a questo:

Immagine 4 - Messaggio di output del pruning dei container
E proprio così, non ci sono più container arrestati:

Immagine 5 - Elenco di container non in esecuzione (2)
Ora occupiamoci delle immagini inutilizzate.
docker image prune
Analogamente al comando precedente, docker image prune rimuove le immagini inutilizzate.
Per impostazione predefinita, rimuove solo le immagini dangling—immagini non taggate e non associate a un container. Puoi usare un flag opzionale per rimuovere tutte le immagini inutilizzate, non solo quelle dangling.
Ecco l'elenco delle opzioni disponibili
-ao--allrimuove tutte le immagini inutilizzate invece delle sole dangling.--filterti permette di specificare coppie chiave-valore per controllare quali immagini rimuovere.-fo--forcesalta la richiesta di conferma.
Ora vediamolo in azione!
Ecco l'elenco delle immagini attualmente presenti sul sistema:

Immagine 6 - Elenco delle immagini Docker
Per rimuoverle tutte con un solo comando, esegui:
docker image prune -a -f
Vedrai un output simile a questo nel terminale:

Immagine 7 - Messaggio di output del pruning delle immagini
Dopodiché, non resterà alcuna immagine in Docker Desktop:

Immagine 8 - Elenco delle immagini Docker (2)
Poi, occupiamoci dei volumi inutilizzati.
docker volume prune
Come suggerisce il nome, il comando docker volume prune rimuove tutti i volumi locali inutilizzati. In altre parole, elimina i volumi che non sono referenziati da alcun container.
Per impostazione predefinita, il comando rimuove solo i volumi anonimi - volumi senza nome creati da Docker all'avvio di un container. Per rimuovere i volumi nominati esplicitamente, devi passare un'opzione aggiuntiva.
Queste sono le opzioni disponibili:
-ao--allrimuove tutti i volumi inutilizzati invece dei soli anonimi.--filterti permette di specificare coppie chiave-valore per controllare quali volumi rimuovere.-fo--forcesalta la richiesta di conferma.
Sul nostro sistema abbiamo un singolo volume creato dall'utente da un file docker-compose.yml:

Immagine 9 - Elenco dei volumi Docker
Il seguente comando rimuove tutti i volumi locali:
docker volume prune -a -f
Dopo l'esecuzione, vedrai un output simile a questo:

Immagine 10 - Messaggio di output del pruning dei volumi
Ora non resta alcun volume:

Immagine 11 - Elenco dei volumi Docker (2)
Infine, vediamo come eliminare i network inutilizzati.
docker network prune
Quando i container Docker comunicano tra loro, spesso usano network definiti dall'utente. Tuttavia, questi network di solito restano sul sistema una volta rimossi quei container.
Il comando docker network prune rimuove i network che non sono più in uso da alcun container.
Come gli altri comandi di prune, include alcune opzioni:
--filterti permette di specificare coppie chiave-valore per controllare quali network rimuovere.-fo--forcesalta la richiesta di conferma.
A differenza di immagini, container o volumi, non puoi ispezionare visivamente i network tramite Docker Desktop, quindi dovrai lavorare da riga di comando. Ecco l'elenco dei network disponibili:

Immagine 12 - Elenco dei network Docker
Per rimuovere tutti i network non associati all'installazione predefinita di Docker, esegui:
docker network prune -a -f
Dopo l'esecuzione del comando, vedrai un output come questo:

Immagine 13 - Messaggio di output del pruning dei network
Eventuali network associati a container precedentemente in esecuzione ora sono stati rimossi:

Immagine 14 - Elenco dei network Docker
Tieni però presente che i tre network rimanenti sono essenziali per il corretto funzionamento di Docker e non possono essere rimossi.
E questo è tutto per l'uso di base dei comandi docker prune! A seguire, tratteremo argomenti avanzati come l'uso sicuro di questi comandi e le best practice per ambienti di produzione e sensibili.
Usare Docker Prune in sicurezza
I comandi docker prune aiutano a recuperare rapidamente spazio su disco, ma vanno usati con cautela, soprattutto in ambienti di produzione.
Eliminare per errore container, immagini o volumi importanti può causare perdita di dati e interrompere flussi di lavoro critici. Per evitarlo, è meglio capire cosa verrà rimosso prima di eseguire qualsiasi comando di prune.
Questa sezione spiega le principali precauzioni da adottare per eseguire in sicurezza docker prune.
Capire cosa verrà rimosso
I comandi prune sono progettati per rimuovere solo le risorse non attivamente in uso.
Ad esempio, docker image prune elimina solo le immagini dangling e docker volume prune rimuove solo i volumi non collegati ad alcun container. Tuttavia, aggiungendo opzioni come -a -f verranno rimossi tutti i volumi o le immagini senza richiesta di conferma.
Inoltre, in ambienti complessi, le dipendenze possono sfuggire facilmente, quindi un doppio controllo prima del pruning è sempre una buona pratica.
Prima di eseguire qualsiasi comando prune, dovresti ispezionare il sistema per vedere quali risorse sono attualmente in uso. Ci sono diversi modi per farlo e in questa sezione vedremo i più comuni.
Usa questo comando per visualizzare tutti i container, inclusi quelli arrestati:
docker ps -a
Dovresti vedere un output simile a questo:

Immagine 15 - Elenco di tutti i container Docker
Allo stesso modo, usa questo comando per elencare tutte le immagini, incluse quelle inutilizzate:
docker images
L'output sarà strutturato in modo simile al precedente:

Immagine 16 - Elenco di tutte le immagini Docker
Per controllare i volumi, esegui questo comando per elencare tutti i volumi:
docker volume ls

Immagine 17 - Elenco di tutti i volumi Docker
Esamina con attenzione questi output per assicurarti che nessuna risorsa critica venga eliminata per errore.
Dry run per sicurezza
Purtroppo, Docker non ha ancora un'opzione integrata per un dry run dei comandi di prunings, anche se è stata richiesta anni fa.
Per questo motivo, devi ispezionare manualmente le risorse usando i comandi elencati nella sezione precedente prima di eseguire un comando di prune.
Se lavori in un ambiente sensibile in cui la persistenza dei dati è fondamentale, dovresti sempre creare un backup prima di eseguire comandi di prune che interessano i volumi.
Certo, queste sono solo misure precauzionali, ma speriamo di vedere presto implementata un'opzione di dry run.
Best practice per Docker Prune
Per mantenere il tuo ambiente Docker libero da ingombri inutili, è importante eseguire regolarmente i comandi prune—magari persino automatizzandoli.
Questa sezione ti guida attraverso le best practice per eseguire i comandi docker prune in ambienti di produzione.
Usa docker prune regolarmente
Col tempo, Docker accumula immagini inutilizzate, container arrestati e volumi non necessari—tutti elementi che consumano notevole spazio su disco.
Eseguire regolarmente i comandi di pruning mantiene pulito l'ambiente e previene un uso eccessivo del disco. Dovresti includerli nel tuo piano di manutenzione.
Ogni poche settimane è un buon punto di partenza, ma se la tua configurazione prevede creazione e rimozione frequenti di container, valuta una cadenza più ravvicinata.
Fai attenzione in produzione
Qualsiasi lavoro in produzione richiede attenzione extra, e il pruning di Docker non fa eccezione.
Un attimo di disattenzione può portare a downtime o perdita di dati, e non vuoi esserne responsabile. Prima di eseguire comandi docker prune in produzione, ispeziona sempre le risorse di sistema usando docker ps -a, docker images e docker volume ls, come spiegato nella sezione precedente.
Inoltre, è una buona idea usare comandi di pruning specifici invece del completo docker system prune, dato che può essere più semplice recuperare da eliminazioni indesiderate.
Automatizza docker prune
Un'altra buona pratica è ottimizzare le attività di pulizia automatizzando i comandi docker prune con attività pianificate.
Su Linux puoi configurare un cron job per eseguire i comandi a intervalli regolari, mentre su Windows puoi usare l'Utilità di pianificazione per un'automazione simile. Questo aiuta a mantenere il sistema in ordine senza interventi manuali. Tuttavia, in produzione, assicurati che il pruning automatico non interferisca con carichi di lavoro critici.
Ad esempio, questo cron job su Linux esegue un comando di pruning completo ogni domenica a mezzanotte:
0 0 * * 0 docker system prune -a -f
Risoluzione dei problemi con Docker Prune
I comandi docker prune sono una soluzione di riferimento per recuperare spazio su disco, ma potrebbero non bastare sempre a garantire spazio sufficiente per scaricare nuove immagini o eseguire nuovi container.
Inoltre, potresti rimuovere per errore risorse importanti, quindi è fondamentale parlare di strategie di recupero.
Entrambi gli argomenti saranno trattati in questa sezione.
Problemi di spazio su disco
Le immagini Docker possono essere grandi—di recente ne avevamo una oltre i 13 GB—e siamo sicuri che ce ne siano di ancora più grandi. Quindi, anche dopo aver eseguito docker prune, potresti scoprire che il sistema è ancora a corto di spazio su disco.
Per vedere esattamente quanto spazio è utilizzato da immagini, container e volumi, esegui questo comando:
docker system df

Immagine 18 - Spazio utilizzato da Docker
Quando recuperi spazio su disco con i comandi docker prune, aggiungi il flag -a per rimuovere tutte le immagini, i volumi o i container inutilizzati—non solo quelli dangling o anonimi. Ovviamente, tieni a mente i potenziali svantaggi di questo approccio.
Se il problema di spazio persiste, l'unica opzione è aumentare lo spazio disco disponibile.
Recupero da rimozioni accidentali
Il recupero è più facile a dirsi che a farsi—ecco perché consigliamo di capire cosa verrà rimosso dal pruning prima di eseguire il comando vero e proprio.
Detto ciò, se ti trovi nella situazione di aver potato per errore container, immagini o volumi importanti, inizia controllando i log per identificare cosa è stato rimosso.
Su macOS, puoi farlo eseguendo i seguenti due comandi (opzioni per Windows e Linux):
pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")'
/usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred"
/usr/bin/log show --debug --info --style syslog --last 30m --predicate "$pred" >/tmp/logs.txt
Eseguendo questi comandi salverai gli ultimi 30 minuti di log relativi a Docker in /tmp/logs.txt. Dovresti ispezionare questi log per determinare quali container o immagini sono stati eliminati.
Per le immagini eliminate, probabilmente puoi riscaricarle da un registry come Docker Hub. Un comando come questo dovrebbe bastare:
docker pull <image_name>
E per i container eliminati, puoi sempre ricrearli se erano basati su immagini persistenti:
docker run --name <container_name> <image_name>
In alternativa, puoi ripristinare dai backup se disponibili, che possono essere usati per recuperare sia i dati dei volumi che dei container. In futuro, valuta l'uso di strumenti per snapshot dei volumi per prevenire la perdita di dati.
Tuttavia, la strategia migliore è ispezionare le risorse che verranno eliminate prima di eseguire un comando di pruning e procedere solo se sei assolutamente certo che non impatterà sul tuo flusso di lavoro.
Riepilogo su Docker Prune
In conclusione, la famiglia di comandi docker prune è un modo potente per recuperare spazio su disco, ma comporta il rischio di eliminare per errore risorse necessarie, con conseguente perdita di dati. Questo rischio è ancora maggiore quando si usano i flag opzionali -a -f, che rimuovono tutto in modo forzato.
Ciononostante, il pruning resta un metodo di riferimento per mantenere il sistema pulito e organizzato.
Devi solo fare attenzione, soprattutto in ambienti di produzione. Usa comandi come docker ps -a, docker images e docker volume ls prima del pruning per elencare tutti i container, le immagini e i volumi. Esegui il comando di pruning solo dopo essere sicuro di poter eliminare le risorse elencate (supponendo che non siano usate da un container in esecuzione).
Se vuoi saperne di più su Docker, containerizzazione e orchestrazione dei container, dai un'occhiata a questi corsi su DataCamp:
FAQs
Docker prune è sicuro?
In generale sì, ma va usato con cautela. Rimuove solo le risorse non in uso, ma eseguirlo senza controllare può portare a eliminazioni accidentali, soprattutto in produzione. Flag aggiuntivi come -a -f rimuoveranno forzatamente tutte le risorse inutilizzate.
Qual è la differenza tra docker prune e docker rm?
docker prune rimuove tutte le risorse inutilizzate di un tipo specifico, mentre docker rm viene usato per eliminare manualmente container o immagini specifici.
Docker system prune rimuove tutto?
No, docker system prune rimuove container, network, immagini e cache di build inutilizzati, ma non elimina i volumi nominati a meno che non si specifichi il flag --volumes dopo il comando.
Che cos'è una dangling image in Docker?
Una "dangling image" è un'immagine non taggata o non referenziata da alcun container. Di solito sono immagini intermedie residue dai processi di build e possono essere rimosse in sicurezza con il comando docker image prune.


