Il Problema: I Container Sono Effimeri
Prima di parlare dei volumi, devi capire un concetto fondamentale: i container Docker sono effimeri. Cosa significa?
Immagina di avere un container con un database. Inserisci dati, tutto funziona perfettamente. Poi fermi il container, lo riavvii e… i dati sono spariti. Puff, volatilizzati.
Questo succede perché ogni container ha un proprio filesystem isolato che vive e muore con il container stesso. È come scrivere sulla sabbia: appena arriva l’onda, tutto scompare.
Cos’è un Volume Docker?
Un volume Docker è un meccanismo per salvare i dati al di fuori del container, in modo che persistano anche quando il container viene fermato, riavviato o eliminato.
Pensa ai volumi come a un hard disk esterno che colleghi al tuo container. I dati vengono scritti su questo “disco esterno” e rimangono al sicuro indipendentemente da cosa succede al container.
Perché Usare i Volumi?
- Persistenza: i dati sopravvivono al ciclo di vita del container
- Condivisione: più container possono accedere agli stessi dati
- Backup: è più facile fare backup dei dati
- Performance: i volumi sono ottimizzati per le operazioni I/O
- Portabilità: puoi spostare i dati tra host diversi
I Tre Modi per Gestire i Dati in Docker
Docker offre tre approcci per la gestione dei dati. Vediamoli dal più consigliato al meno.
1. Volumi (Volumes) - La Scelta Consigliata
I volumi sono gestiti completamente da Docker e salvati in una directory speciale sull’host (/var/lib/docker/volumes/ su Linux).
| |
Vantaggi:
- Gestiti da Docker (facili da creare, eliminare, ispezionare)
- Funzionano su Linux, Windows e Mac
- Possono essere condivisi tra più container
- Supportano driver per storage remoto (cloud, NFS, ecc.)
2. Bind Mounts - Collegamento Diretto
I bind mounts collegano una cartella specifica del tuo computer direttamente al container.
| |
Quando usarli:
- Durante lo sviluppo, per vedere le modifiche al codice in tempo reale
- Quando hai bisogno di accedere a file specifici del sistema host
- Per condividere configurazioni tra host e container
Attenzione: i bind mounts dipendono dalla struttura del filesystem dell’host, quindi sono meno portabili.
3. tmpfs Mounts - Dati Temporanei in Memoria
I tmpfs mounts salvano i dati nella RAM dell’host, non su disco.
| |
Quando usarli:
- Per dati sensibili che non devono essere scritti su disco
- Per cache temporanee ad alte prestazioni
- I dati vengono persi quando il container si ferma (ed è proprio quello che vuoi)
Comandi Essenziali per i Volumi
Creare un Volume
| |
Elencare i Volumi
| |
Ispezionare un Volume
| |
Questo comando mostra dove il volume è fisicamente salvato e altre informazioni utili.
Eliminare un Volume
| |
Attenzione: eliminare un volume significa perdere tutti i dati contenuti. Non c’è cestino o recupero.
Esempi Pratici
Esempio 1: Database MySQL con Dati Persistenti
Senza volume, ogni volta che riavvii il container MySQL perdi tutti i dati. Ecco come risolvere:
| |
Ora puoi fermare, riavviare o anche eliminare e ricreare il container: i dati del database rimarranno intatti nel volume mysql-data.
Esempio 2: Sviluppo Web con Bind Mount
Durante lo sviluppo, vuoi che le modifiche al codice siano immediatamente visibili nel container:
| |
Ogni modifica ai file nella cartella src sarà immediatamente disponibile nel container.
Esempio 3: Condividere Dati tra Container
Due container che devono accedere agli stessi file:
| |
Volumi in Docker Compose
Quando usi Docker Compose, definire i volumi è ancora più semplice:
| |
Con un semplice docker-compose up, Docker crea automaticamente i volumi necessari.
Backup e Ripristino dei Volumi
Fare il Backup di un Volume
| |
Questo comando:
- Monta il volume in sola lettura (
ro) - Crea un archivio compresso nella directory corrente
Ripristinare un Backup
| |
Errori Comuni da Evitare
1. Dimenticare di Usare i Volumi per i Database
Se usi un database in Docker senza volume, perderai tutti i dati. Sempre.
2. Usare Bind Mounts in Produzione
I bind mounts sono ottimi per lo sviluppo, ma in produzione usa i volumi Docker per maggiore portabilità e sicurezza.
3. Non Fare Backup dei Volumi
I volumi non vengono inclusi automaticamente nei backup del sistema. Pianifica backup regolari.
4. Accumulare Volumi Orfani
Quando elimini container, i volumi rimangono. Usa periodicamente:
| |
Per eliminare i volumi non più collegati a nessun container.
Quando Usare Cosa: Riepilogo
| Scenario | Soluzione |
|---|---|
| Database in produzione | Volume Docker |
| Sviluppo locale | Bind mount |
| Dati sensibili temporanei | tmpfs |
| Condivisione tra container | Volume Docker |
| File di configurazione | Bind mount o Volume |
| Log applicazione | Volume Docker |
Conclusioni
I volumi Docker risolvono uno dei problemi fondamentali dei container: la persistenza dei dati. Senza volumi, i container sarebbero utili solo per applicazioni stateless.
Ricorda le regole d’oro:
- Usa sempre i volumi per i database
- Usa bind mounts per lo sviluppo locale
- Fai backup regolari dei volumi importanti
- Pulisci periodicamente i volumi orfani
Una volta capito il concetto, i volumi diventano naturali come salvare un file sul disco. E i tuoi dati saranno finalmente al sicuro, indipendentemente da cosa succede ai container.
Nel prossimo articolo vedremo come gestire le reti in Docker per far comunicare i container tra loro.