docker / Guide

Docker volume o bind mount: quale scegliere?

Scegli in base alla posizione dei dati e al modo di lavorare. Un volume si adatta ai dati gestiti tramite Docker; un bind mount espone al container un percorso dell’host scelto da te.

Esempi per Bash; consulta i riferimenti per i dettagli del tuo ambiente.

docker — Cheat sheet

Confronta i due modelli

DomandaVolume con nomeBind mount
Chi sceglie dove salvare?La posizione è gestita da Docker.Indichi un percorso dell’host.
Uso tipicoDati applicativi persistenti.Codice sorgente o configurazione dell’host.
Cosa serve su un nuovo host?Creare o ripristinare il volume.Preparare il percorso e i file richiesti.

Entrambi possono sopravvivere all’eliminazione del container. Nessuno dei due è automaticamente un backup. Con un daemon Docker remoto, la sorgente del bind mount appartiene all’host del daemon, non necessariamente al computer dove scrivi il comando.

Osserva la persistenza di un volume

Scegli un nome di volume nuovo per l’esercizio. I comandi usano una piccola immagine Alpine; la prima esecuzione potrebbe scaricarla.

docker volume create devsheet-volume-demo
docker run --rm --mount type=volume,source=devsheet-volume-demo,target=/data alpine:3.22 sh -c "echo hello > /data/note.txt"
docker run --rm --mount type=volume,source=devsheet-volume-demo,target=/data alpine:3.22 cat /data/note.txt

Risultato atteso: hello alla seconda esecuzione. Il primo container è stato rimosso da --rm, mentre il volume con nome esplicito ha conservato il file. Il volume dimostrativo rimane finché non lo elimini volontariamente.

Monta una directory dell’host in sola lettura

In Bash crea una nuova directory di prova con un file. La sorgente deve esistere quando usi questa sintassi di bind mount.

mkdir devsheet-bind-demo
printf "hello\n" > devsheet-bind-demo/note.txt
docker run --rm --mount "type=bind,source=$(pwd)/devsheet-bind-demo,target=/data,readonly" alpine:3.22 cat /data/note.txt

Risultato atteso: hello dal file dell’host. L’opzione readonly impedisce al container di scrivere tramite questo mount. Docker Desktop potrebbe richiedere l’autorizzazione a condividere la directory. Il percorso sull’host rimane dopo il comando.

Verifica i mount prima di affidarti alla persistenza

Montare su una directory non vuota del container ne nasconde il contenuto esistente per la durata del mount. Controlla il percorso con docker inspect <container> e leggi la sezione Mounts.

Un bind mount scrivibile permette al container di modificare i file dell’host in quel percorso. Limita la directory esposta. Per i database usa un backup adatto al database, evitando copie di file attivi senza verificarne la consistenza.

Riferimenti

Tutte le guide