La Guida Essenziale ai Comandi di Gestione dei Volumi Docker

Impara i comandi Docker per creare, elencare, ispezionare, montare, eseguire backup, rimuovere e ripulire i dati persistenti.

Guida Essenziale ai Comandi di Gestione dei Volumi Docker

I comandi di gestione dei volumi Docker diventano importanti non appena il tuo contenitore scrive dati a cui tieni. Il livello scrivibile di un contenitore scompare quando rimuovi il contenitore, ma un volume Docker può conservare file di database, upload, dati cache o stato dell'applicazione attraverso la ricostruzione dei contenitori.

Questa guida mostra i comandi fondamentali di docker volume, come collegare i volumi ai contenitori e dove i comandi di pulizia possono sorprenderti.

Cosa Sono i Volumi Docker?

I volumi Docker sono oggetti di archiviazione gestiti da Docker. Vivono al di fuori del livello scrivibile del contenitore, di solito in una posizione gestita da Docker sull'host quando usi il driver predefinito local. Un volume nominato rimane disponibile dopo aver fermato, rimosso o ricreato il contenitore che lo utilizzava.

I volumi sono utili perché forniscono:

  • Persistenza: I dati sopravvivono alla sostituzione del contenitore.
  • Isolamento: I dati dell'applicazione sono separati dall'immagine e dal livello scrivibile.
  • Supporto driver: I driver dei volumi possono utilizzare dischi locali, archiviazione di rete o backend di archiviazione specifici della piattaforma.
  • Chiarezza operativa: I volumi nominati sono più facili da ispezionare, eseguire il backup e riutilizzare rispetto ai livelli anonimi dei contenitori.

Comandi Principali di docker volume

Il comando docker volume è l'interfaccia principale per creare, elencare, ispezionare ed eliminare volumi.

docker volume create

Crea un volume nominato:

docker volume create my-app-data

Crea un volume con nome generato da Docker:

docker volume create

Puoi anche passare opzioni del driver quando utilizzi una configurazione non predefinita:

docker volume create --driver local my-app-data

docker volume ls

Elenca i volumi:

docker volume ls

Mostra solo i nomi:

docker volume ls -q

Filtra i volumi dangling:

docker volume ls --filter dangling=true

dangling=true significa che Docker non vede il volume come referenziato da un contenitore. Non significa che i dati non siano importanti.

docker volume inspect

Ispeziona un volume:

docker volume inspect my-app-data

Per un volume locale, l'output è simile a questo:

[
  {
    "CreatedAt": "2026-05-23T10:00:00Z",
    "Driver": "local",
    "Labels": null,
    "Mountpoint": "/var/lib/docker/volumes/my-app-data/_data",
    "Name": "my-app-data",
    "Options": null,
    "Scope": "local"
  }
]

Il Mountpoint è utile per la risoluzione dei problemi, ma evita di modificare i file direttamente mentre i contenitori stanno usando il volume. Lascia che sia l'applicazione o un contenitore di manutenzione controllato a scrivere i dati.

docker volume rm

Rimuovi uno o più volumi:

docker volume rm my-app-data

Docker non rimuoverà un volume mentre un contenitore lo referenzia ancora, anche se quel contenitore è fermo. Trova e rimuovi prima quei contenitori:

docker ps -a --filter volume=my-app-data
docker rm <nome-o-id-contenitore>
docker volume rm my-app-data

Questo comando elimina i dati del volume. Esegui prima un backup se i dati sono importanti.

docker volume prune

Prune rimuove i volumi locali non utilizzati. Nelle versioni attuali di Docker, docker volume prune rimuove per impostazione predefinita i volumi anonimi non utilizzati. Usa --all se vuoi rimuovere anche i volumi nominati non utilizzati.

Rimuovi i volumi anonimi non utilizzati:

docker volume prune

Salta la richiesta di conferma:

docker volume prune --force

Rimuovi tutti i volumi locali non utilizzati, inclusi i volumi nominati:

docker volume prune --all

Usa le etichette per rendere la pulizia più sicura:

docker volume create --label app=myapp myapp-cache
docker volume prune --filter label=app=myapp

Le operazioni di prune eliminano permanentemente i dati. Controlla cosa contiene un volume prima di eliminare i dati nominati dell'applicazione.

Montaggio dei Volumi con i Contenitori

Collega i volumi quando crei un contenitore. Docker può creare automaticamente il volume nominato se non esiste già.

Usando -v

docker run --name my-postgres \
  -v pgdata:/var/lib/postgresql/data \
  -d postgres

Qui, pgdata è il nome del volume e /var/lib/postgresql/data è il percorso all'interno del contenitore.

Usando --mount

--mount è più esplicito e più facile da leggere negli script:

docker run --name my-redis \
  --mount type=volume,source=redisdata,target=/data \
  -d redis

Entrambe le forme sono valide. Usa --mount quando vuoi una sintassi chiave-valore più chiara, specialmente con opzioni di montaggio aggiuntive.

Backup e Ripristino di un Volume

I volumi Docker sono archiviazione persistente, ma non sono backup. Un semplice schema di backup è eseguire un contenitore temporaneo che monta il volume e scrive un archivio nella directory corrente:

docker run --rm \
  -v my-app-data:/data:ro \
  -v "$PWD":/backup \
  alpine \
  tar czf /backup/my-app-data.tgz -C /data .

Ripristina in un volume vuoto:

docker volume create my-app-data-restored

docker run --rm \
  -v my-app-data-restored:/data \
  -v "$PWD":/backup \
  alpine \
  tar xzf /backup/my-app-data.tgz -C /data

Per i database, preferisci gli strumenti di backup nativi del database quando la coerenza è importante. Un archivio del filesystem di un volume di database in esecuzione potrebbe non essere sicuro a meno che il database non sia fermo o supporti quel metodo di backup.

Buone Pratiche per la Gestione dei Volumi Docker

  • Usa volumi nominati per i dati che intendi conservare.
  • Etichetta i volumi che appartengono a un'applicazione o ambiente.
  • Ispeziona i volumi prima di eliminarli o eseguire prune.
  • Esegui il backup dei volumi importanti al di fuori dell'host Docker.
  • Evita di archiviare dati insostituibili solo in un volume anonimo.
  • Testa i ripristini, non solo i backup.
  • Usa driver di volume quando hai bisogno di archiviazione al di fuori dell'host Docker locale.

Conclusione

Usa volumi Docker nominati per lo stato che vuoi conservare, ispezionali prima di eliminare qualsiasi cosa e tratta prune come un comando di pulizia con un reale rischio di perdita di dati. Il flusso di lavoro quotidiano è semplice: crea o lascia che Docker crei il volume, montalo con docker run, ispezionalo durante la risoluzione dei problemi, esegui il backup quando è importante e rimuovilo solo dopo che nessun contenitore lo referenzia più.