Persistenza dei dati su docker: Volumi.
- Klevis Cipi
- 2 ago 2024
- Tempo di lettura: 3 min

Docker e uno strumento molto potente in tutti i campi che riguarda software ma questo ha un piccolo prezzo da pagare: Più complessità all’architettura.
Un componente cruciale dell'architettura Docker sono i volumi.
Volumi sono molto cruciali per un valido motivo:
Persistenza dati.
Beh ora a tutti viene la domanda, Docker o non Docker i dati si salvano no?!
Si certo che si salvano, ma il container del Docker ha un ciclo di vita. Se il container viene spento o distrutto per vari motivi, tutti i dati salvati dentro quel container spariscono.
Per gestire la persistenza o la vita dei dati entrano in gioco i Volumi di Docker.
Volumi di Docker si classificano in tre tipi:
Named volumes (Volumi Nominati)
Anonymous volumes (Volumi anonimi)
Bind volumes (Montaggi di associazione)
Ce da dire che come regola di default Docker non condivide i suo volumi all’host.
I dati vengono salvati nelle cartelle dedicate gestite da Docker.
Tuttavia, per consentire all'host di accedere a questi volumi, è possibile utilizzare appositi comandi e configurare i volumi Docker in modo da condividere le cartelle.
Analizziamo insieme i tipi di volumi:
1 - Named volumes (Volumi nominati)
Named volumes si usano per dati persistenti quindi anche se il container viene stoppato o a dirittura cancellato questi dati sono ancora presenti.
Esempio pratico sarebbe una piattaforma di reclutamento candidati.
I candidati si registrano e caricano il loro CV. Questi CV devono persistere anche quando il container che ospita questa piattaforma web viene distrutto e riavviato per qualche motivo.
Altro esempio sono i software di Database Relazionale come il famoso PostgreSQL o MySQL.
Questo software sono disponibili con immagine Docker che noi possiamo usare nei nostri progetti. Indovina che tipo di volumi vengono usati ?!
Named volumes.
Ecco un esempio pratico come configuriamo questo tipi di volumi:
# -v: l'opzione per configurare un volume
docker run -d -it -v name_volume:/data/cartella/dentro/docker --name nome_contaner nome_immagine
2 - Anonymous volumes
Questi sono volumi senza un nome i quali un ciclo di vita corto. Questi volumi vivono quanto il container.
Se il container viene distrutto/rimosso anche questi volumi vengono distrutti.
Una precisione: Se ci sono più di un container che usano lo stesso volume anonimo i dati persisteranno fino che ultimo container non viene distrutto.
In poco parole se questi volumi anonimo non vengono usati più da nessun container allora vengono automaticamente distrutti.
Di solito vengono usati per dati temporanei, logs e che non ti interessa un nome al volume.
Ecco un esempio pratico come configuriamo questo tipi di volumi:
# -v: l'opzione per configurare un volume
docker run -d -it -v /data/cartella/dentro/docker --name nome_contaner nome_immagine
3 - Bind volumes
Questi volumi sono molto importanti ed sono anche i più complicati da capire all’inizio per chi entra nel mondo del docker.
Questi volumi sono persistenti e hanno una particolarità: Sono condivisi con l’host.
Questo significa che ogni modifica/aggiunta file dentro il container docker viene rifletto all’host e viceversa.
Ecco un esempio pratico come configuriamo questo tipi di volumi:
# -v: l'opzione per configurare un volume
docker run -d -it -v /data/cartella/host:/data/cartella/dentro/docker --name nome_contaner nome_immagine
Un altro aspetto molto importante è che questi volumi aiutano molto durante la fase di test e quality assurance.
Durante la fase di test ed e quality assurance si fanno molti cicli di CI/CD. Questo significa che a ogni ciclo si deve fare la build dell’immagine e riaviate i container ma se usiamo questi volumi come possiamo velocizzare il processo ?
Conclusione:
I volumi sono molto importanti per garantire la persistenza o la vita dei dati specialmente nell'ambiente di produzione.