Vai al contenuto principale

Docker Remove Image: come eliminare immagini inutilizzate e dangling

Questa guida ti mostra esattamente come rimuovere in modo sicuro ed efficace le immagini Docker per recuperare spazio su disco, evitare il disordine nelle build e prevenire errori legati allo storage!
· 10 min leggi

Scopri con l'IA

Usi Docker e ti ritrovi spesso senza spazio su disco? Non sei il solo.

Le immagini Docker sono i mattoni dei container Docker, ma possono accumularsi rapidamente e consumare spazio su disco. Le loro dimensioni vanno da pochi megabyte a diversi gigabyte, quindi una procedura di pulizia regolare è essenziale per mantenere prestazioni ottimali del sistema.

C'è però una nota positiva: Docker fornisce un paio di comandi per aiutarti a rimuovere le immagini non necessarie e recuperare spazio su disco. Capire questi comandi e quando usarli ti aiuterà a dire addio agli avvisi di spazio esaurito.

In questo tutorial ti guiderò attraverso diversi metodi per rimuovere le immagini Docker, ti mostrerò come gestire gli errori più comuni durante il processo e condividerò le best practice per mantenere un ambiente Docker pulito.

>Sei completamente nuovo a Docker? Questa guida pratica ai container ti farà partire in un attimo.

Cos'è un'immagine Docker?

Un'immagine Docker è un pacchetto software leggero, autonomo ed eseguibile che contiene tutto il necessario per eseguire un'applicazione: codice, runtime, librerie, variabili d'ambiente e file di configurazione. 

Pensala come uno snapshot o un modello usato per creare container.

>Docker non è usato solo dai Software Engineer - è amato anche dai Data Scientist!

Le immagini Docker sono costruite a layer, con ogni layer che rappresenta un insieme di modifiche al filesystem. Quando effettui il pull di un'immagine da Docker Hub o ne costruisci una usando un Dockerfile, stai in realtà scaricando o creando una pila di questi layer che lavorano insieme. I layer vengono messi in cache, il che rende più efficiente la creazione e la condivisione delle immagini, ma significa anche che consumano spazio di archiviazione sulla tua macchina.

Le immagini diventano particolarmente problematiche quando stai sviluppando attivamente applicazioni. Spesso ricostruirai immagini ripetutamente con piccole modifiche, creerai varie versioni per i test e farai pull di dipendenze che potrebbero non essere mai ripulite automaticamente. 

Prima che te ne accorga, avrai decine o addirittura centinaia di immagini che si mangiano gigabyte di prezioso - e limitato - spazio su SSD.

>Se ti occupi di Data Science e Machine Learning, devi conoscere queste 12 immagini Docker.

Perché rimuovere le immagini Docker?

In parole povere, le immagini Docker possono essere dei veri divoratori di spazio, e lo spazio su disco che puoi concedere è limitato.

Rimuovere le immagini Docker non necessarie ha diversi obiettivi importanti:

  • Prima di tutto, recupera spazio di archiviazione, particolarmente critico se lavori su un laptop con capacità limitata o in un ambiente CI/CD con vincoli di storage. In qualche modo, quegli errori "No space left on device" spuntano sempre nel momento peggiore.
  • La pulizia delle immagini inoltre rimuove versioni obsolete che potrebbero confondere sviluppatori o processi di deployment. Non c'è niente di peggio che usare per sbaglio un'immagine vecchia perché il tag latest puntava a qualcosa di inaspettato. 
  • Inoltre, un elenco di immagini disordinato rende più difficile identificare ciò che ti serve davvero. Quando esegui docker images e vedi uno schermo pieno di repository, tag e ID, trovare l'immagine specifica che cerchi diventa un processo che fa perdere tempo. Una pulizia regolare mantiene il tuo ambiente di lavoro gestibile e gli output dei comandi leggibili. È un piccolo miglioramento alla qualità della vita che paga nel tempo.

A seguire, ti mostrerò un paio di modi per rimuovere le immagini Docker.

Rimuovere le immagini Docker

Ora che sai cosa sono le immagini Docker e perché è importante tenerle sotto controllo, passiamo al processo di rimozione vero e proprio. 

Docker fornisce un paio di comandi per aiutarti a gestire le immagini, dall'elenco di ciò che hai alla rimozione di ciò che non ti serve.

Verificare le immagini Docker esistenti

Prima di iniziare a eliminare le immagini, devi sapere cosa sta effettivamente occupando spazio sul tuo sistema. Il comando docker images è il primo passo in questo processo di pulizia.

docker images

Questo comando elenca tutte le immagini Docker con informazioni utili come:

  • Nome del repository
  • Tag
  • ID immagine
  • Data di creazione 
  • Dimensione

Immagine 1 - Immagini Docker disponibili

Immagine 1 - Immagini Docker disponibili

Dare un'occhiata alla colonna delle dimensioni può aprire gli occhi. Come puoi vedere nella Immagine 1, l'immagine del database Oracle occupa più di 15 GB!

Se vuoi ordinare le immagini per dimensione per identificare quelle che occupano più spazio:

docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h

Immagine 2 - Immagini Docker disponibili ordinate per dimensione

Immagine 2 - Immagini Docker disponibili ordinate per dimensione

Questa è una panoramica più compatta, perché non include tutte le proprietà dell'immagine.

Rimuovere una specifica immagine Docker

Una volta identificate le immagini che non ti servono, puoi rimuoverle una alla volta con il comando docker rmi (dove rmi sta per "remove image").

Puoi rimuovere un'immagine sia tramite il suo ID sia tramite la combinazione repository:tag:

# Rimuovi per ID immagine
docker rmi 4e7024df2f20

# Rimuovi per repository:tag
docker rmi nginx:latest

Immagine 3 - Due modi per rimuovere singole immagini Docker

Immagine 3 - Due modi per rimuovere singole immagini Docker

Vale anche la pena menzionare che Docker non ti permetterà di rimuovere immagini attualmente in uso da container. Vedrai un messaggio di errore come questo:

Immagine 4 - Tentativo di rimuovere immagini Docker in uso

Immagine 4 - Tentativo di rimuovere immagini Docker in uso

Se succede, devi prima fermare e rimuovere i container dipendenti prima di rimuovere l'immagine, oppure usare l'opzione force (di cui parlerò più avanti).

Rimuovere più immagini Docker

Rimuovere le immagini una per una può essere noioso, soprattutto durante una pulizia importante. Per fortuna, Docker ti consente di rimuovere più immagini con un unico comando.

Puoi fornire un elenco di ID immagine separati da spazi:

docker rmi postgres:latest mariadb:latest

Immagine 5 - Rimuovere più immagini Docker

Immagine 5 - Rimuovere più immagini Docker

Oppure, per scenari più avanzati, puoi combinare docker images con filtri e pipe. Ad esempio, questo comando rimuove tutte le immagini con il tag latest:

docker rmi $(docker images --filter=reference="*:latest" -q)

Immagine 6 - Rimuovere tutte le immagini Docker con un tag specifico

Immagine 6 - Rimuovere tutte le immagini Docker con un tag specifico

Beh, tutte tranne quelle attualmente in uso da container in esecuzione.

Fai attenzione con questi comandi di rimozione massiva, perché non chiedono conferma. Controlla sempre due volte i criteri del filtro prima di premere Invio.

Rimuovere immagini dangling e inutilizzate

Quando ricostruisci un'immagine, Docker crea nuovi layer per tutto ciò che è cambiato e riutilizza i layer in cache per le parti invariate. I layer unici della versione precedente diventano "dangling": esistono sul disco ma non fanno parte di alcuna immagine nominata.

Puoi identificare le immagini dangling con:

docker images -f "dangling=true"

Immagine 7 - Elenco delle immagini Docker dangling

Immagine 7 - Elenco delle immagini Docker dangling

Ora esegui il comando prune per rimuoverle tutte in una volta:

docker image prune

Immagine 8 - Pruning delle immagini Docker

Immagine 8 - Pruning delle immagini Docker

Questo comando chiederà conferma prima di procedere. Se sei sicuro di volerle rimuovere tutte:

docker image prune -f

Per una pulizia più aggressiva, puoi rimuovere sia le immagini dangling sia quelle inutilizzate (non usate da alcun container):

docker image prune -a

Immagine 9 - Rimozione di tutte le immagini inutilizzate

Immagine 9 - Rimozione di tutte le immagini inutilizzate

Quest'ultimo comando può liberare molto spazio, ma usalo con cautela, perché rimuoverà tutte le immagini non referenziate da container in esecuzione o fermati.

>Che cos'è esattamente il comando Docker Prune? Gli abbiamo dedicato un intero articolo, pieno di esempi.

Ora che sai come rimuovere le immagini Docker, vediamo alcuni errori comuni che potresti incontrare e come gestirli.

Gestire gli errori durante la rimozione delle immagini Docker

Come in ogni cosa nello sviluppo software, a volte incontrerai errori quando proverai a rimuovere immagini Docker. 

La maggior parte di questi errori si verifica per buone ragioni: le protezioni di Docker sono progettate per evitare che tu rompa accidentalmente qualcosa di importante. Esploriamo gli errori più comuni e come risolverli.

Errore: l'immagine è utilizzata da un container

L'errore più comune che incontrerai rimuovendo immagini Docker assomiglia a questo:

Error response from daemon: conflict: unable to delete 64ba095c0f0e (cannot be forced) - image is being used by running container 0284660ca006

Succede perché l'architettura di Docker ha una relazione di dipendenza rigorosa tra container e immagini. Un container è essenzialmente un'istanza in esecuzione di un'immagine con il proprio layer scrivibile sopra. 

Perché Docker impedisce l'eliminazione? È semplice: se rimuovessi un'immagine mentre un container basato su di essa è ancora in esecuzione, quel container andrebbe subito in crash. Anche i container fermati mantengono riferimenti alle immagini padre perché potrebbero essere riavviati in seguito.

Per rimuovere un'immagine del genere, inizia elencando tutti i container (inclusi quelli fermati) che usano l'immagine:

docker ps -a --filter ancestor=64ba095c0f0e

Immagine 10 - Tutti i container che usano l'immagine

Immagine 10 - Tutti i container che usano l'immagine

Puoi quindi fermare tutti i container:

docker stop 0284660ca006

Immagine 11 - Arresto dei container

Immagine 11 - Arresto dei container

Successivamente, puoi rimuovere i container fermati:

docker rm 0284660ca006

Immagine 12 - Rimozione dei container

Immagine 12 - Rimozione dei container

E infine, usa il noto comando rmi per rimuovere l'immagine:

docker rmi 64ba095c0f0e

Immagine 13 - Rimozione dell'immagine Docker

Immagine 13 - Rimozione dell'immagine Docker

Oppure, se preferisci un singolo comando shell, usa questo:

docker ps -a --filter ancestor=090040f97aa1 -q | xargs docker rm -f && docker rmi 090040f97aa1

Immagine 14 - Fare tutto con un singolo comando shell

Immagine 14 - Fare tutto con un singolo comando shell

Molto più semplice, vero?

Forzare la rimozione delle immagini Docker

Se sei assolutamente certo di voler rimuovere un'immagine indipendentemente dalle dipendenze, Docker fornisce il flag -f o --force:

docker rmi -f 64ba095c0f0e

Immagine 15 - Eliminazione forzata delle immagini Docker

Immagine 15 - Eliminazione forzata delle immagini Docker

L'opzione force dice a Docker di rimuovere l'immagine anche se è referenziata da container o da altre immagini. 

Tuttavia, non rimuoverà le immagini referenziate da container in esecuzione.

La rimozione forzata dovrebbe essere l'ultima risorsa, ad esempio quando stai facendo debug di Docker stesso o quando sei assolutamente sicuro che le dipendenze possano essere interrotte in sicurezza. In ambienti di produzione, quasi mai è la scelta giusta.

Ricorda, i controlli di dipendenza di Docker esistono per un motivo. Lavorare con essi, e non contro di essi, porta a un'esperienza Docker più stabile e prevedibile.

Best practice per gestire le immagini Docker

Gestire le immagini Docker non è un'attività una tantum: è una responsabilità continua. 

Stabilire buone abitudini e seguire le best practice ti eviterà pulizie d'emergenza quando lo spazio su disco scende improvvisamente a zero. In questa sezione, ti illustrerò alcune strategie per mantenere un ambiente Docker pulito.

>Cerchi una guida completa per imparare Docker? La nostra guida per i data professional è un buon punto di partenza.

Pulizia regolare

Così come non lasceresti i piatti accumularsi nel lavandino per settimane, non dovresti lasciare che immagini Docker inutilizzate si accumulino indefinitamente sul tuo sistema.

Una pianificazione di manutenzione regolare è il modo più semplice per prevenire l'accumulo di immagini. A seconda di quanto usi Docker, può essere settimanale, mensile o trimestrale. 

Durante queste sessioni di pulizia, dovresti:

  1. Rivedere le immagini con docker images e identificare le candidate alla rimozione.
  2. Controllare le immagini che non riconosci o che non hai usato di recente.
  3. Cercare versioni duplicate della stessa applicazione.
  4. Rimuovere le immagini non necessarie usando i comandi visti in precedenza.

Molti team di sviluppo integrano anche la pulizia delle immagini nelle pipeline CI/CD. Ad esempio, puoi configurare Jenkins o GitHub Actions per pulire automaticamente le immagini di build più vecchie di una certa età.

Questo comando mostrerà solo le immagini più vecchie di 30 giorni:

docker images --format "{{.ID}}\t{{.CreatedAt}}" | awk '$2 < "'$(date -d '30 days ago' +'%Y-%m-%d')'"' | cut -f1

Usare il pruning delle immagini Docker

Docker fornisce comandi di pruning integrati che possono automatizzare gran parte del lavoro manuale di pulizia.

Il comando docker system prune rimuove in un colpo solo tutti i container fermati, le immagini dangling e le reti inutilizzate:

docker system prune

Per una pulizia più aggressiva che rimuove anche le immagini inutilizzate:

docker system prune -a

Puoi persino recuperare spazio dalle cache di build:

docker builder prune

Questi comandi sono perfetti per gli script. Ecco un semplice esempio di script di pulizia che potresti eseguire periodicamente:

#!/bin/bash
# Stoppa tutti i container
docker stop $(docker ps -q)

# Rimuovi tutti i container fermati
docker container prune -f

# Rimuovi tutte le immagini inutilizzate
docker image prune -a -f

# Mostra l'uso del disco rimanente
docker system df

Immagine 16 - Script automatizzato per la pulizia Docker

Immagine 16 - Script automatizzato per la pulizia Docker

Ricorda solo di usare con attenzione il flag -f negli script automatizzati, perché bypassa le richieste di conferma.

Mantenere organizzate le versioni delle immagini

Una buona strategia di tagging ti aiuterà a minimizzare l'accumulo di immagini Docker non necessarie.

Invece di usare sempre il tag latest (che col tempo può diventare ambiguo), considera questi approcci:

  • Usa il versioning semantico per le tue immagini:
myapp:1.0.0
myapp:1.0.1
myapp:1.1.0
  • Includi informazioni di build nei tag:
myapp:build-2025-04-06
myapp:commit-a7f3d9e
  • Aggiungi qualificatori di ambiente o scopo:
myapp:1.0.0-dev
myapp:1.0.0-test
myapp:1.0.0-prod

Per team più grandi, valuta l'implementazione di una policy del registry di immagini Docker che faccia automaticamente garbage collection delle immagini vecchie dopo un certo periodo. Sia Docker Hub sia registry privati come Harbor offrono funzionalità per gestire il ciclo di vita delle immagini.

Combinando queste best practice – pulizia regolare, pruning automatizzato e tagging organizzato – manterrai un ambiente Docker molto più sano ed eviterai i temuti errori "no space left on device".

Riepilogo sulla rimozione delle immagini Docker

Se lavori con i container, una corretta gestione delle immagini Docker è una competenza imprescindibile.

Ricorda che la potenza di Docker deriva dalla sua capacità di isolare e impacchettare applicazioni in modo efficiente, ma questo vantaggio può rapidamente trasformarsi in svantaggio senza una manutenzione adeguata.

Hai visto perché le immagini Docker possono diventare problematiche nel tempo, consumando prezioso spazio su disco e creando disordine nell'ambiente di sviluppo. Hai visto vari comandi per controllare e rimuovere le immagini, dal targeting di immagini specifiche con docker rmi alla pulizia massiva con i comandi di pruning. Hai anche visto gli errori comuni durante il processo di rimozione e imparato come superarli.

Se vuoi imparare di più su Docker e la containerizzazione, questi corsi dovrebbero essere la tua prossima tappa:

FAQ

Posso recuperare un'immagine Docker dopo averla eliminata?

No, una volta che elimini un'immagine Docker con docker rmi, non può essere recuperata a meno che tu non abbia un backup o possa eseguirne di nuovo il pull da un registry. Assicurati sempre di rimuovere le immagini corrette, soprattutto in produzione. Per le immagini che hai costruito in locale, potrebbe essere necessario ricostruirle dal Dockerfile.

Cosa sono le immagini Docker dangling e come le rimuovo?

Le immagini dangling sono layer che non appartengono a nessuna immagine taggata, spesso creati quando ricostruisci più volte le immagini. Identificale con docker images -f "dangling=true" e rimuovile tutte insieme con docker image prune.

Come posso liberare rapidamente spazio con Docker?

Il modo più veloce per recuperare spazio è usare docker system prune -a, che rimuove tutti i container fermati, le reti inutilizzate, le immagini dangling e le immagini inutilizzate. Fai attenzione perché rimuove tutte le immagini non usate da alcun container.

Quanto spesso dovrei pulire le mie immagini Docker?

La frequenza dipende da quanto usi Docker. Per ambienti di sviluppo con build di immagini frequenti, si consiglia una pulizia settimanale. Per sistemi meno attivi, può bastare una manutenzione mensile o trimestrale. Valuta di impostare script di pulizia automatizzati per coerenza.

Qual è la differenza tra rimozione e pruning delle immagini Docker?

La rimozione agisce su immagini specifiche che scegli tu, mentre il pruning ripulisce automaticamente tutte le immagini inutilizzate o dangling in base a determinati criteri.

Dario Radečić

Autore

Dario Radečić

Senior Data Scientist con base in Croazia. Top Tech Writer con oltre 700 articoli pubblicati, per più di 10 milioni di visualizzazioni. Autore del libro Machine Learning Automation with TPOT.

Argomenti

Correlato