Docker è una tecnologia di containerizzazione del software che aiuta chi lavora nello sviluppo a creare e distribuire applicazioni su piattaforme diverse, dal desktop al cloud.

Un’istantanea – o blueprint – del codice sorgente, delle dipendenze e degli strumenti necessari per creare un’applicazione all’interno di un container Docker è nota come immagine. Le applicazioni Docker che necessitano di dati persistenti possono fare affidamento su uno storage chiamato volumi, indipendenti dal sistema operativo sottostante.

Quando si usa Docker, Un’organizzazione ben strutturata di immagini, volumi e container è importante. Le incarnazioni inutilizzate di queste risorse possono accumularsi, occupando spazio prezioso su disco e finendo per influire sulle prestazioni del sistema.

In questo articolo analizziamo diversi modi per mantenere l’organizzazione del sistema cancellando le immagini (sia singolarmente che tutte insieme), i volumi e i container. Useremo l’interfaccia a riga di comando (CLI) di docker per eseguire rapidamente queste operazioni.

Come Rimuovere le Immagini Docker

La rimozione di immagini obsolete o non necessarie da Docker è essenziale per mantenere un sistema pulito e organizzato. Vediamo come la CLI può puntare determinate immagini e rimuoverle.

Per prima cosa, esaminiamo le immagini in un ambiente Docker con il comando docker image ls:

$ docker image ls
REPOSITORY   	TAG   	IMAGE ID   	CREATED          	SIZE
my_image     	latest	2cbc27836df4   60 seconds ago   	7.05MB
<none>       	<none>	85b412789704   2 days ago       	7.05MB
demo         	latest	26d80cd96d69   15 months ago    	28.5MB

L’elenco delle immagini qui sopra ha rivelato le immagini denominate my_image e demo, entrambe con il tag latest. Una terza immagine non ha né nome né tag. In questo caso, si tratta di un’immagine “dangling”: un’immagine che non è attualmente utilizzata da un container. Quest’immagine “dangling” è il risultato di una ricostruzione di my_image (una situazione frequente). La versione precedente dell’immagine è ancora presente nel file system, ma non è in uso.

L’elenco mostra anche i primi 12 caratteri dell’ID a 64 caratteri di ogni immagine, le date di creazione e lo spazio di archiviazione che le immagini stanno consumando.

Rimuovere Tutte le Immagini Inutilizzate

Nell’esempio dell’elenco precedente, abbiamo un’immagine non utilizzata. Tuttavia, è possibile che un’immagine senza nome o tag sia attiva. Per esempio, potrebbe essere stata utilizzata per avviare un container facendo riferimento al suo ID.

Per eliminare in modo sicuro tutte le immagini che non sono attive, potete usare il comando docker image prune:

$ docker image prune

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

Deleted Images:
deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d

Total reclaimed space: 7.05MB

Elenchiamo nuovamente le nostre immagini per vedere i risultati del nostro lavoro:

$ docker image ls
REPOSITORY   	TAG   	IMAGE ID   	CREATED          	SIZE
my_image     	latest	2cbc27836df4   70 seconds ago   	7.05MB
demo         	latest	26d80cd96d69   15 months ago    	28.5MB

Dopo il processo di pruning, l’immagine senza nome o tag è scomparsa.

Rimuovere un’Immagine Specifica in Base al Nome

Potete selezionare un’immagine da rimuovere facendo riferimento al suo nome:

$ docker image rm <image_name>

Nota: non potete rimuovere facilmente le immagini ancora in uso. Dovreste arrestare o rimuovere i container in esecuzione che usano le immagini. Anche se di solito non è consigliato, potete forzare la rimozione di un’immagine attiva usando il flag -f:

$ docker image rm <image_name> -f

Usare il Comando Scorciatoia rmi per Rimuovere le Immagini

La Docker CLI ha un approccio abbreviato per la rimozione delle immagini con l’alias rmi. Utilizzandolo per rimuovere un’immagine per nome, si ottiene il seguente risultato:

$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4

Utilizzeremo rmi per i seguenti esempi di rimozione delle immagini.

Rimuovere Tutte le Immagini Non Contrassegnate

Le immagini non contrassegnate occupano ancora spazio prezioso sul disco, rallentando sempre di più il sistema con il passare del tempo.

Per eliminare tutte le immagini non taggate in Docker, usate il comando docker rmi con un filtro. Potete fornire filtri basati su criteri specifici utilizzando l’opzione -f (da non confondere con il flag -f disponibile per image rm per forzare un’azione).

Il filtro dangling=true viene utilizzato per identificare le immagini non taggate:

$ docker rmi $(docker images -f "dangling=true" -q)

L’opzione -q del comando precedente visualizza gli ID delle immagini non taggate. Tutti questi ID vengono poi passati come argomenti a docker rmi per rimuoverli.

Questo filtro usa la parola chiave “dangling” (appeso), ma come già detto, alcune immagini senza tag potrebbero essere effettivamente attive. Riceverete un avviso se un’immagine selezionata da questo filtro non è veramente “dangling”.

Rimuovere un’Immagine Specifica per ID

Potete usare il comando docker rmi per rimuovere un’immagine specifica facendo riferimento al suo ID:

$ docker rmi <image_id>

Rimuovere un’Immagine Specifica per Nome e Tag

Potete eliminare un’immagine specifica con il suo nome e il suo tag utilizzando il comando docker rmi.

Per esempio, se avete più immagini con lo stesso nome ma con tag diversi, potete eliminarne una in particolare utilizzando questo formato:

$ docker rmi <image_name>:<tag>

Questo metodo è utile quando volete eliminare una versione specifica di un’immagine invece di cancellare tutte le immagini relative a un repository.

Rimuovere Tutte le Immagini con l’Ultimo Tag

In Docker, il tag “latest” si riferisce alla versione più recente di una particolare immagine Docker. Il tag latest è spesso utilizzato come tag predefinito per le immagini Docker. Viene assegnato automaticamente alla build più recente di un’immagine, a meno che non venga specificato esplicitamente un altro tag.

Docker fornisce un comando per rimuovere tutte le immagini con il tag “latest”:

$ docker rmi $(docker images | grep "latest" | awk '{print $3}')

Il comando di cui sopra è diviso in due parti. Prima ottiene l’elenco degli ID delle immagini e poi lo passa come argomento al comando docker rmi.

Rimuovere le Immagini da un Repository Remoto

Per rimuovere un’immagine da un repository remoto, come Docker Hub, dovrete innanzitutto accedere all’account utilizzando la Docker CLI.

Una volta effettuato l’accesso, dovrete usare il comando docker rmi per rimuovere l’immagine. Il comando docker rmi può rimuovere sia le immagini locali che quelle remote:

docker rmi my_repo/my_image_tag

In particolare, potete rimuovere solo le immagini che sono state inviate al repository. Allo stesso modo, non potete rimuovere le immagini utilizzate dai container in esecuzione.

Rimuovere Più Immagini da un Repository Remoto

Per rimuovere più immagini da un repository remoto, potete utilizzare il comando docker rmi seguito dagli ID o dai tag dell’immagine. Per esempio:

docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3

In questo modo verranno rimosse le tre immagini con i tag image_tag_1, image_tag_2 e image_tag_3 dal repository my_repo.

Come Rimuovere i Volumi Docker

I volumi Docker possono occupare molto spazio su disco, soprattutto se contengono grandi quantità di dati o backup multipli. Rimuovendo i volumi che non sono più necessari, si riduce il rischio di violazione dei dati e si garantisce che i dati sensibili non siano accessibili a utenti non autorizzati. Rimuovendo regolarmente i volumi potete anche mantenere l’ambiente Docker aggiornato e prevenire i problemi causati da dati obsoleti.

Questi comandi distruggono in modo permanente tutti i dati memorizzati in un volume, quindi usateli con cautela.

Rimuovere Tutti i Volumi Inutilizzati

In Docker, la rimozione dei volumi inutilizzati è fondamentale quanto la rimozione delle immagini o dei container.

Per liberare spazio su disco, potete usare il comando docker volume prune.

Rimuovere un Volume Specifico per Nome

La rimozione di un volume specifico in Docker è utile per rimuovere i volumi inutilizzati. Ecco il comando per rimuovere un volume:

docker volume rm my_volume_name

Con il comando precedente, il volume nome_volume_mio verrà rimosso. Docker produce un errore se cercate di rimuovere un volume usato. Potete controllare i volumi disponibili utilizzando il comando docker volume ls.

Come Rimuovere i Container Docker

Quando lavorate molto con Docker, potreste accumulare diversi container inutilizzati che occupano le risorse del disco. Se non li eliminate, questi possono accumularsi nel tempo e occupare preziose risorse del disco, rallentando il vostro sistema e mettendovi potenzialmente a rischio.

Rimuovere Tutti i Container Interrotti

Il comando docker container prune permette di eliminare tutti i container interrotti in Docker. In questo caso, il comando crea un elenco di tutti i container interrotti che verranno rimossi e chiede una conferma prima di procedere. Questo aiuta a recuperare spazio su disco e a mantenere un ambiente Docker pulito e organizzato, consentendovi al contempo di ricontrollare che non si stia perdendo nulla di importante:

$ docker container prune

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Deleted Containers:
4df4c47c4df4
d35bcec20bce

Notate che con questo comando è possibile rimuovere solo i container interrotti. Se avete bisogno di rimuovere dei container in esecuzione, dovrete prima arrestarli o usare un altro comando.

Rimuovere un Container Specifico per ID

In Docker, potete rimuovere un container specifico in base all’ID utilizzando il comando docker rm command insieme all’ID del container. Per prima cosa, ottenete tutti gli ID dei container con il comando docker ps command:

$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e

$ docker rm 1ce3cdeb4035

Il comando di cui sopra funziona solo se il container è in stato di arresto. Se il container è in esecuzione, allora dovete rimuoverlo forzatamente utilizzando il flag -f:

$ docker rm -f 1ce3cdeb4035

Rimuovere un Container Specifico per Nome

Docker mette a disposizione un comando multiuso docker rm per rimuovere sia i container per nome che per ID.

Per esempio, se avete un container chiamato web_server, potete rimuoverlo usando il seguente comando:

$ docker rm web_server

Per prima cosa, è importante fermare il container. Docker mette a disposizione il comando docker stop per arrestare un container specifico.

Rimuovere Tutti i Container in Esecuzione

Per eliminare tutti i container in esecuzione, potete usare il comando docker rm:

$ docker rm $(docker ps -q)

L’uso di docker ps -q elenca gli ID dei container in esecuzione. Successivamente, gli ID vengono passati al comando docker rm, che rimuove tutti i container.

Notate che questo comando rimuove solo i container in esecuzione. Se volete rimuovere tutti i container, compresi quelli interrotti, potete usare il seguente comando:

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

Riepilogo

Questo articolo vi ha spiegato come rimuovere immagini, volumi e container Docker. Abbiamo appreso vari metodi per mantenere un sistema pulito e organizzato. Abbiamo illustrato i comandi per rimuovere tutte le immagini inutilizzate, non etichettate o specifiche per ID o nome. Avete anche appreso i comandi per eliminare tutti i container interrotti o un container specifico per ID o nome.

La rimozione di immagini, volumi e container Docker è un processo semplice che può aiutarvi a gestire i componenti inutilizzati, recuperando spazio prezioso su disco e spesso migliorando le prestazioni del sistema.

È questa semplicità che attira gli sviluppatori verso Docker e non c’è modo più semplice di distribuire un’applicazione sviluppata in Docker che con la piattaforma Application Hosting di Kinsta. Potete provarla gratuitamente ora.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.