Docker prune rimuove gli oggetti inutili come container arrestati, volumi inu­ti­liz­za­ti, reti o immagini vecchie. Così ottimizzi l’utilizzo del disco rigido e liberi spazio di ar­chi­via­zio­ne.

Cos’è Docker prune?

Docker prune o system prune è utile per pulire in modo si­ste­ma­ti­co le risorse Docker che non servono più, liberando spazio. Quando container, immagini, reti e volumi di Docker restano inu­ti­liz­za­ti a lungo, possono occupare inu­til­men­te una con­si­de­re­vo­le quantità di spazio. Con prune puoi eliminare ra­pi­da­men­te le risorse, man­te­nen­do il sistema pulito e per­for­man­te.

In par­ti­co­la­re negli ambienti di sviluppo in cui spesso vengono creati e testati nuovi container si può ac­cu­mu­la­re una grande quantità di oggetti obsoleti. Docker prune pulisce non solo i container e le immagini, ma anche le reti e i volumi che non servono più. Così è molto più semplice am­mi­ni­stra­re le risorse Docker e si riduce al minimo il rischio di avere un sistema di­sor­di­na­to e so­vrac­ca­ri­co.

Per cosa si usa Docker prune?

Il comando prune è adatto per diverse si­tua­zio­ni di lavoro quo­ti­dia­no con Docker. Di seguito ri­por­tia­mo quattro scenari tipici di utilizzo.

Ot­ti­miz­za­zio­ne dei processi di lavoro: gli ambienti Docker sono spesso uti­liz­za­ti in modo intensivo a scopi di sviluppo, test e pro­du­zio­ne. Senza una pulizia regolare si ac­cu­mu­la­no ra­pi­da­men­te risorse inutili. Questo so­vrac­ca­ri­co provoca non solo un aumento dello spazio ne­ces­sa­rio, ma può anche incidere ne­ga­ti­va­men­te sulle pre­sta­zio­ni del sistema. Ri­muo­ven­do le risorse inu­ti­liz­za­te, Docker prune consente un utilizzo più ef­fi­cien­te delle risorse di sistema. È im­por­tan­te so­prat­tut­to negli ambienti basati sul cloud, dove i costi salgono con l’aumentare del fab­bi­so­gno di risorse di ar­chi­via­zio­ne e di calcolo.

Aumento della sicurezza: le risorse Docker superflue e obsolete possono com­por­ta­re rischi per la sicurezza. Docker prune rimuove i container, le immagini, le reti e i volumi inu­ti­liz­za­ti, limitando il rischio che com­po­nen­ti obsoleti e po­ten­zial­men­te non sicuri restino senza pro­te­zio­ne. Un eco­si­ste­ma Docker pulito con­tri­bui­sce a mi­ni­miz­za­re la su­per­fi­cie di attacco e a mi­glio­ra­re le con­di­zio­ni di sicurezza dell’intera in­fra­strut­tu­ra IT.

In­cre­men­to delle pre­sta­zio­ni: un ambiente Docker so­vrac­ca­ri­co può com­pro­met­te­re il ren­di­men­to del sistema, sol­le­ci­tan­do inu­til­men­te risorse come la CPU e la memoria. Una pulizia regolare con Docker prune libera spazio e aumenta l’ef­fi­cien­za dell’am­mi­ni­stra­zio­ne e dell’ese­cu­zio­ne dei container. Ne con­se­guo­no tempi di ca­ri­ca­men­to no­te­vol­men­te ridotti, una di­stri­bu­zio­ne molto più rapida delle ap­pli­ca­zio­ni e, in generale, una migliore capacità di reazione del sistema.

Ma­nu­ten­zio­ne più semplice: eseguendo re­go­lar­men­te Docker prune sem­pli­fi­chi con­si­de­re­vol­men­te la ma­nu­ten­zio­ne del tuo ambiente Docker. Rimuovere le risorse inu­ti­liz­za­te riduce la com­ples­si­tà delle attività di ma­nu­ten­zio­ne per gli svi­lup­pa­to­ri e le svi­lup­pa­tri­ci. Consente inoltre di mantenere più fa­cil­men­te una visione d’insieme sui com­po­nen­ti Docker attivi e rilevanti, ac­ce­le­ran­do la diagnosi e l’eli­mi­na­zio­ne degli errori. In questo modo, non solo si risparmia tempo per l’am­mi­ni­stra­zio­ne: i team possono con­cen­trar­si sullo sviluppo e sul mi­glio­ra­men­to delle loro ap­pli­ca­zio­ni anziché dover fare i conti con risorse superflue.

Sintassi: come si usa Docker prune?

Vorresti ripulire le risorse nel tuo ambiente Docker per liberare spazio di ar­chi­via­zio­ne e sem­pli­fi­ca­re l’am­mi­ni­stra­zio­ne? In questo caso ti basta eseguire il comando seguente per accedere ai servizi di prune:

docker system prune
bash

Per im­po­sta­zio­ne pre­de­fi­ni­ta i container arrestati e le immagini, le reti e i volumi non più uti­liz­za­ti vengono iden­ti­fi­ca­ti, pro­po­nen­do­ne poi l’eli­mi­na­zio­ne. Docker ti chiede di con­fer­ma­re l’ope­ra­zio­ne. Inserisci y e premi il tasto Invio. In al­ter­na­ti­va puoi usare di­ret­ta­men­te anche l’opzione -f per saltare la conferma ed eseguire subito l’eli­mi­na­zio­ne:

docker system prune -f
bash

Consiglio: prima di usare Docker prune è utile con­trol­la­re le risorse Docker cor­ren­te­men­te presenti sul sistema. Esegui i comandi seguenti per ottenere una lista di tutti i container, immagini, reti e volumi:

docker ps -a
docker images
docker volume ls
docker network ls
bash

Opzioni di Docker prune

Nella tabella che segue trovi un riepilogo delle varie opzioni di docker system prune.

Opzione De­scri­zio­ne
--all, -a Rimuove tutte le risorse Docker inu­ti­liz­za­te.
--force, -f Esegue la pulizia senza ri­chie­de­re la conferma dell’utente.
--volumes Rimuove i volumi inu­ti­liz­za­ti.
--filter, -f Consente di filtrare per criteri le risorse da eliminare.
--help Vi­sua­liz­za una guida per l’uso del comando.

Docker prune: tutorial sull’utilizzo pratico del comando

Docker mette a di­spo­si­zio­ne vari comandi per eseguire una pulizia mirata di de­ter­mi­na­ti tipi di risorse. Puoi così con­trol­la­re con pre­ci­sio­ne quali risorse eliminare.

Docker prune --filter

Puoi applicare filtri per gestire la selezione delle risorse da eliminare, ad esempio container, immagini, reti e volumi. Sono utili negli ambienti di sviluppo dove si creano e di­men­ti­ca­no ra­pi­da­men­te tante risorse tem­po­ra­nee.

La sintassi generale si presenta come segue:

docker <command> prune --filter "filter=<value>"
bash

Tra la varie opzioni di filtro troviamo:

  • until: filtra le risorse in base alla data di creazione. <duration> può essere un valore numerico come h (ore), m (minuti) o s (secondi).
docker <command> prune --filter "until=<duration>"
bash

Esempio: rimuovere tutti i container arrestati che sono più vecchi di 24 ore

docker container prune --filter "until=24h"
bash
  • label: filtra le risorse in base all’etichetta Docker.
docker <command> prune --filter "label=<label>"
bash

Esempio: eliminare tutti i volumi inu­ti­liz­za­ti che con­ten­go­no l’etichetta mylabel

docker volume prune --filter "label=mylabel"
bash
  • dangling: filtra le risorse che non sono più usate da un container
docker <command> prune --filter "dangling=true"
bash

Esempio: rimuovere tutte le immagini non più uti­liz­za­te (dangling)

docker image prune --filter "dangling=true"
bash

Oltre ai filtri prin­ci­pa­li indicati sopra sono di­spo­ni­bi­li anche opzioni di filtro più spe­ci­fi­che, a seconda del tipo di risorsa:

  • before e since per le immagini: filtra le immagini in base alla data di creazione, prima o dopo un de­ter­mi­na­to momento.
  • exited per i container: filtra i container in base al loro stato Exit (ad esempio exited=0 per i container terminati cor­ret­ta­men­te).

Rimuovere risorse Docker

Primo passaggio: apri un terminale o una riga di comando nel tuo sistema.

Secondo passaggio: esegui Docker prune per pulire il sistema:

docker {resource} prune
bash

So­sti­tui­sci {resource} con il tipo di risorse che desideri eliminare. I valori validi sono container, image, volume e network.

Rimuovere container Docker

Per im­po­sta­zio­ne pre­de­fi­ni­ta Docker non libera au­to­ma­ti­ca­men­te i container al termine del loro ciclo di vita. Per mettere a di­spo­si­zio­ne dei container in ese­cu­zio­ne le risorse bloccate è quindi im­por­tan­te con­trol­la­re re­go­lar­men­te i container arrestati e se ne­ces­sa­rio eli­mi­nar­li. Per farlo sono previsti due metodi.

  • docker rm: il comando docker rm è pensato per eliminare ma­nual­men­te uno o più container Docker. È quindi adatto se sai con pre­ci­sio­ne quali container devono essere eliminati. Dovrai indicare espli­ci­ta­men­te gli ID o i nomi dei container da rimuovere. Saranno eliminati dal tuo ambiente solo de­ter­mi­na­ti container, senza intaccare gli altri.

Di seguito un esempio per eliminare i container de­no­mi­na­ti container1 e container2:

docker rm container1 container2
bash
  • docker container prune: il comando docker container prune permette invece di eliminare più container arrestati in una volta sola. Questo metodo è par­ti­co­lar­men­te adatto per liberare spazio in modo rapido ed ef­fi­cien­te, perché elimina tutti i container arrestati per cui non sono in corso processi.
docker container prune
bash

Vengono elencati tutti i container arrestati. Docker ti chiederà conferma prima di procedere all’eli­mi­na­zio­ne. È estre­ma­men­te pratico negli ambienti in cui vengono creati molti container tem­po­ra­nei che suc­ces­si­va­men­te non ser­vi­ran­no più.

Per l’am­mi­ni­stra­zio­ne e la ma­nu­ten­zio­ne quo­ti­dia­ne del tuo ambiente Docker è con­si­glia­bi­le usare docker container prune re­go­lar­men­te per eliminare in au­to­ma­ti­co i container arrestati. In questo modo, oltre a ri­spar­mia­re tempo, ti assicuri che risorse inutili non com­pro­met­ta­no le pre­sta­zio­ni del sistema. docker rm, invece, serve a eliminare de­ter­mi­na­ti container in modo mirato e con­trol­la­to, a pre­scin­de­re che si tratti di test, sviluppo o altri requisiti specifici.

Rimuovere immagini Docker

Le immagini Docker sono gli elementi co­sti­tu­ti­vi dei container. Nel corso del tempo possono avere diverse versioni e tag. Quando crei o aggiorni nuove immagini, spesso le immagini vecchie o non più uti­liz­za­te vengono mantenute. Queste immagini sospese (“dangling”) occupano spazio di ar­chi­via­zio­ne sul tuo sistema e possono com­pro­met­ter­ne le pre­sta­zio­ni, in par­ti­co­la­re se presenti in numero elevato.

Con Docker prune puoi iden­ti­fi­ca­re le immagini non più uti­liz­za­te e ri­muo­ver­le:

docker image prune [Options]
bash

Le opzioni possibili sono ad esempio:

  • -a, --all: questa opzione non solo rimuove le immagini dangling, ma anche quelle non più in uso. Le immagini inu­ti­liz­za­te sono quelle che non hanno più tag, pertanto non è più possibile fare ri­fe­ri­men­to di­ret­ta­men­te a esse con i tag.
docker image prune -a
bash
  • -f, --force: per im­po­sta­zio­ne pre­de­fi­ni­ta Docker richiede una conferma prima di eliminare ef­fet­ti­va­men­te le immagini. Con -f o --force puoi saltare questo passaggio di conferma ed eseguire subito la pulizia.
docker image prune -f
bash

Rimuovere tutte le immagini Docker

Puoi anche eliminare dal tuo sistema le immagini Docker che non servono più con una sola ope­ra­zio­ne. Per usare ef­fi­ca­ce­men­te Docker prune, per prima cosa apri il terminale o il prompt e inserisci il comando seguente:

docker image prune -a --force
bash

Prima di procedere con la pulizia as­si­cu­ra­ti di aver compreso quali immagini devono essere eliminate. L’opzione -a può eliminare anche immagini non in uso, ma che po­treb­be­ro servire ancora.

Rimuovere volumi Docker

I volumi sono per­si­sten­ti e salvano dati anche quando il relativo container non è più in ese­cu­zio­ne. Col passare del tempo, questi volumi possono crescere di di­men­sio­ni, occupando risorse inu­til­men­te.

docker volume prune
bash

Questo comando cerca tutti i volumi per cui non ci sono più container attivi. Ottieni così una lista con i volumi per cui è proposta l’eli­mi­na­zio­ne. Prima dell’effettiva can­cel­la­zio­ne è richiesta la conferma.

Invece, docker volume rm è un comando che rimuove singoli volumi Docker in modo mirato. Può essere utile se sai esat­ta­men­te quale volume eliminare, a pre­scin­de­re che sia usato da un container o meno. Per rimuovere un de­ter­mi­na­to volume Docker usa il comando docker volume rm seguito dal nome o dall’ID del volume:

docker volume rm volume_name
bash

As­si­cu­ra­ti anche di conoscere il nome preciso o l’ID del volume da eliminare: questo comando cancella i dati in modo per­ma­nen­te e non può essere annullato.

Rimuovere reti Docker

In Docker le reti sono un com­po­nen­te di base at­tra­ver­so cui i container co­mu­ni­ca­no fra loro, a pre­scin­de­re che si trovino sullo stesso host o siano di­stri­bui­ti tra più host. Le reti Docker vengono mantenute anche quando i container sono stati chiusi o rimossi. Col passare del tempo può quindi succedere che si ac­cu­mu­li­no reti che non sono più in uso, occupando risorse inu­til­men­te. Il comando docker prune network offre un modo semplice per in­di­vi­dua­re le reti inu­ti­liz­za­te e ri­muo­ver­le.

Il comando ha la forma seguente:

docker network prune [OPTIONS]
bash

Docker genera una lista di tutte le reti che non sono più usate dai container attivi o che sono prive di ri­fe­ri­men­ti. Dopo aver richiesto la conferma, procede all’effettiva eli­mi­na­zio­ne delle reti.

Docker prune: le migliori prassi

  • Pulizia au­to­ma­tiz­za­ta: usa strumenti o script au­to­ma­tiz­za­ti per eliminare le immagini, i container e i volumi Docker che non servono più. Così l’ambiente resta ordinato e le pre­sta­zio­ni vengono ot­ti­miz­za­te.
  • Patch di sicurezza e ag­gior­na­men­ti: controlla re­go­lar­men­te se ci sono patch di sicurezza e ag­gior­na­men­ti per i motori Docker, i sistemi operativi host e tutte le immagini Docker. Così ridurrai al minimo le po­ten­zia­li falle di sicurezza.
  • Mo­ni­to­rag­gio e re­gi­stra­zio­ne: usa strumenti di mo­ni­to­rag­gio e re­gi­stra­zio­ne per tenere sotto controllo le pre­sta­zio­ni dei container, ri­co­no­sce­re gli eventi im­pre­vi­sti e favorire la proat­ti­vi­tà nella ma­nu­ten­zio­ne.
  • Backup esterno: im­ple­men­ta routine per eseguire backup esterni dei dati im­por­tan­ti dei container Docker, ad esempio salvando re­go­lar­men­te i contenuti del database o i file di con­fi­gu­ra­zio­ne.
  • Controllo manuale prima dell’eli­mi­na­zio­ne: controlla at­ten­ta­men­te di non aver più bisogno delle risorse prima di eli­mi­nar­le. Così minimizzi il rischio di perdite ac­ci­den­ta­li di dati o di in­ter­ru­zio­ni dei processi in corso.
Consiglio

Se hai appena iniziato a usare Docker, ti con­si­glia­mo il nostro tutorial su Docker.

Compute Engine
La soluzione IaaS ideale per i tuoi carichi di lavoro
  • vCPU estre­ma­men­te van­tag­gio­se e potenti core dedicati
  • Massima fles­si­bi­li­tà senza periodo con­trat­tua­le minimo
  • Servizio di as­si­sten­za tecnica 24 ore su 24, 7 giorni su 7
Vai al menu prin­ci­pa­le