Confronta i due modelli
| Domanda | Volume con nome | Bind mount |
|---|---|---|
| Chi sceglie dove salvare? | La posizione è gestita da Docker. | Indichi un percorso dell’host. |
| Uso tipico | Dati 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.txtRisultato 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.txtRisultato 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.