Guida Completa: Come Cancellare Immagini Docker, Tranne Una, Forzatamente

31 mag 2024

Docker è uno strumento essenziale per lo sviluppo software, poiché permette agli sviluppatori di configurare ambienti di lavoro ad-hoc per eseguire il codice sviluppato. Nel corso dello sviluppo quotidiano, spesso si creano molte build con Docker, portando alla generazione di numerose immagini.

Le immagini Docker rappresentano gli ambienti sui quali eseguire il proprio codice; tuttavia, quando le immagini sono molto pesanti in termini di occupazione di spazio, e se lo sviluppatore esegue molte build, l'occupazione del disco sul proprio PC può diventare un problema.Per ovviare a questo problema, è opportuno monitorare le immagini create e mantenere solamente quelle di cui abbiamo bisogno, cancellando le altre.

In questo articolo vedremo come eliminare tutte le immagini Docker, eccetto una, in modo forzato. Una guida passo-passo per mantenere il tuo ambiente Docker pulito ed efficiente, con comandi dettagliati e script di esempio.

Cancellare tutte le immagini in Docker, eccetto una

Per cancellare tutte le immagini su Docker, eccetto una, possiamo seguire questi passi:

  1. Identificare l'ID dell'immagine che vogliamo mantenere
  2. Elencare tutte le immagini escludendo dall'elenco l'immagine da mantenere
  3. Rimuovere tutte le altre immagini

Passo 1: identificare l'ID dell'immagine da mantenere

Per prima cosa, mostriamo l'elenco di tutte le immagini presenti sul pc sul quale stiamo eseguendo il comando. Possiamo visualizzare tutte le immagini con il comando:

docker images

Questo comando fornisce un output come segue:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-image            latest              abcdef123456        2 weeks ago         500MB
other-image         latest              123456abcdef        3 weeks ago         600MB

Dall'output prodotto, all'interno della colonna IMAGE ID possiamo ricercare l'identificativo dell'immagine che non vogliamo eliminare.

Passo 2: Elencare tutte le immagini eccetto quella da mantenere

Per elencare tutte le immagini eccetto quella da mantenere, useremo il seguente comando:

docker images --quiet | grep -v abcdef123456

sostituisci abcdef123456 con l'id della immagine che vuoi cancellare.

Questo comando restituisce un elenco di identificativi, escludendo l'ID indicato.

Passo 3: Rimuoviamo tutte le immagini, tranne una

Possiamo usare l'output del precedente comando per rimuovere tutte le altre immagini:

docker rmi $(docker images --quiet | grep -v abcdef123456)

Questo comando rimuove tutte le immagini eccetto quella a cui appartiene l'identificativo indicato.

Gestione mediante script sh

Possiamo creare uno script sh, all'interno del quale inseriamo il comando:

#!/bin/bash

# Replace this with the IMAGE ID of the image you want to keep
IMAGE_TO_KEEP="abcdef123456"

# List all image IDs except the one to keep and remove them
docker rmi $(docker images --quiet | grep -v $IMAGE_TO_KEEP)

Salviamo lo script in un file delete_docker_images.sh, diamo i permessi di esecuzione, e eseguiamo:

chmod +x delete_docker_images.sh
./delete_docker_images.sh

Questo script cancellerà tutte le immagini eccetto l'immagine a cui appartiene l'ID memorizzato in IMAGE_TO_KEEP.

Forzare la cancellazione

Tutti i comandi visti in precedenza possono essere invocati forzando la cancellazione delle immagini docker. Può capitare alle volte che alcune immagini non siano eliminabili con i comandi visti in precedenza, ma se si è sicuri di volerle cancellare, possiamo utilizzare l'opzione --force, come segue:

docker rmi --force $(docker images --quiet | grep -v abcdef123456)

Nel comando l'opzione --force indica a docker di cancellare brutalmente le immagini senza curarsi di eventuali conflitti o problemi. In questo caso siamo noi che prendiamo il comando e decidiamo cosa fare in modo forzato.

Conclusioni

In questo articolo abbiamo visto come rimuovere tutte le immagini docker sul proprio pc eccetto una. Questa operazione è molto utile per il lavoro di sviluppo quotidiano su docker.