Pulire Docker sul Mac senza perdere dati
Docker Desktop può occupare decine di gigabyte perché immagini, layer scrivibili dei container, cache di build e volumi vivono all'interno di un disco virtuale Linux. Queste categorie non sono tutte ugualmente eliminabili. La cache di build di solito è riproducibile; un volume di database può essere l'unica copia di dati importanti. Una pulizia sicura parte dall'inventario di Docker, non dal comando di prune più ampio.
Perché lo spazio di Docker non torna subito
Docker Desktop su macOS esegue una VM Linux e di norma conserva i dati in un disco
virtuale sparso chiamato Docker.raw. La
guida allo storage su Mac
di Docker indica Docker Desktop > Settings > Resources > Advanced per posizione,
limite del disco e spazio effettivamente consumato. Spostalo da lì, non da Finder. Un
file sparso ha una dimensione logica massima e un'allocazione fisica minore, quindi
ls -lh da solo può farlo sembrare molto più grande della capacità che occupa in quel
momento.
Controlla cosa Docker stesso ritiene di stare usando:
docker system df -v
La vista dettagliata scompone immagini, container, volumi locali e cache di build.
"Reclaimable" significa che Docker non vede un riferimento corrente che richieda
l'oggetto; non dimostra che non ti servirà domani un container fermato, un'immagine
vecchia o un volume. Controlla anche docker ps -a e docker volume ls prima di fare
prune.
Parti da una pulizia mirata
Recupera sempre spazio da dentro Docker, non cancellando il file del disco virtuale. Inizia dalla categoria che conosci:
docker builder prune --filter until=168h
docker image prune
docker container prune
Il primo comando rimuove la cache di build più vecchia di sette giorni; regola l'età in
base al tuo lavoro. I due successivi chiedono conferma prima di rimuovere immagini
dangling e container fermati. Riesegui docker system df -v dopo ogni passo per vedere
quale azione ha contato.
La guida al pruning di
Docker documenta docker system prune come comando di comodo più ampio. Aggiungere
-a rimuove tutte le immagini non usate, non solo i layer dangling. Aggiungere
--volumes estende l'operazione ai volumi anonimi non usati, che possono contenere
file di database o altro stato. Non usare docker system prune -a --volumes come
comando di pulizia predefinito. Prima di qualsiasi prune sui volumi, ispeziona nomi e
proprietà:
docker volume ls
docker volume inspect <volume-name>
I volumi creati da Compose di solito portano etichette di progetto e servizio. Identifica il progetto proprietario ed esporta o fai backup dei dati che non si possono ricostruire prima di rimuovere il volume.
Recuperare lo spazio dell'immagine disco
Dopo un prune, i blocchi liberi esistono nel filesystem Linux prima che macOS li
riceva necessariamente dal disco sparso. La documentazione attuale di Docker dice che
un'immagine Docker.raw di solito restituisce lo spazio host idoneo in pochi secondi;
le immagini Docker.qcow2 più vecchie usano un processo in background che può
impiegare minuti. Misura di nuovo l'uso reale del disco invece di giudicare dal
massimo logico del file. Un factory reset non è una compattazione: distrugge container
locali, immagini, volumi e impostazioni. Usalo solo quando quella perdita completa è
intenzionale e i dati importanti dei volumi sono stati esportati.
Dietro le quinte: perché il file cresce e non si riduce
Docker Desktop esegue una VM Linux, e Docker.raw è il disco virtuale di quella VM: un
file sparso che cresce quando il guest scrive ma non restituisce automaticamente
spazio a macOS quando il guest cancella. Rimuovere un'immagine marca i blocchi come
liberi nel filesystem della VM, ma il file host si riduce solo se il guest emette
TRIM/discard e Docker Desktop può usare discard e compattazione per restituire i
blocchi idonei. I tempi dipendono dalla versione e dall'implementazione dell'immagine
disco. Ecco perché una pulizia logica e il cambio di capacità a livello host vanno
misurati separatamente, e perché cancellare il file host equivale a distruggere
l'intero ambiente Docker.
Dove una mappa del disco aiuta
Una mappa del disco come la vista Analyze di Mole può mostrare il disco virtuale e la sua impronta fisica. La CLI di Docker deve decidere quali oggetti interni sono referenziati. Le due viste rispondono a domande diverse: macOS mostra dove è allocata la capacità, mentre Docker spiega cosa contiene quell'allocazione.
Un ordine di operazioni sicuro
Esegui docker system df -v, individua progetti vecchi e volumi con stato, esporta i
dati unici e fai prune una categoria alla volta. Ricontrolla sia i totali interni di
Docker sia la capacità fisica di macOS. Usa i flag di prune ampi solo dopo averne
esaminato lo scope esteso, e non usare mai un factory reset come scorciatoia di routine
per recuperare spazio. Il guadagno sicuro più rapido di solito è la cache di build
vecchia, non volumi sconosciuti.