1.1 Volumi (Volumes)
La gestione dei dati in Docker è una parte importante del lavoro con i container. I container stessi sono effimeri, il che significa che i dati al loro interno verranno persi dopo che il container viene fermato o rimosso. Per conservare i dati tra i vari avvii e assicurarne una memorizzazione a lungo termine, Docker offre due principali tecnologie: volumi (volumes) e bind mounts (direttori collegati).
Volumi (Volumes)
I volumi sono risorse gestite da Docker per memorizzare i dati. Esistono indipendentemente dal ciclo di vita dei container, il che li rende utili per la memorizzazione a lungo termine. I volumi possono essere creati e gestiti da Docker, fornendo un metodo pratico per conservare dati al di fuori dei container.
Vantaggi dell'utilizzo dei volumi
- Isolamento dall'host: i volumi vengono memorizzati in una directory speciale sul host, gestita da Docker, che garantisce il loro isolamento.
- Facilità di gestione: Docker offre comandi pratici per creare, eliminare e gestire i volumi.
- Compatibilità e portabilità: i volumi possono essere facilmente trasferiti tra host diversi e utilizzati con vari container.
Esempio di creazione e utilizzo dei volumi
Creazione di un volume:
docker volume create my_volume
Utilizzo del volume in un container:
In questo esempio il volume my_volume è montato nella directory /data all'interno del container my_container.
docker run -d --name my_container -v my_volume:/data nginx
1.2 Directory Collegate (Bind Mounts)
Le directory collegate permettono di montare directory specifiche dell'host all'interno dei container. Questo consente ai container di utilizzare file e directory presenti sull'host, cosa particolarmente utile per lo sviluppo e il testing, quando è necessario lavorare con file locali.
Vantaggi dell'uso delle directory collegate:
- Accesso diretto ai file dell'host: i container possono utilizzare direttamente file e directory presenti sull'host.
- Facilità di sviluppo: gli sviluppatori possono modificare facilmente i file sull'host e vedere queste modifiche nei container in tempo reale.
- Flessibilità: le directory collegate possono essere qualsiasi directory sull'host, offrendo una grande flessibilità nella gestione dei dati.
Esempio di utilizzo delle directory collegate
Avvio di un container con una directory collegata:
docker run -d --name my_container -v /path/on/host:/data nginx
In questo esempio, la directory /path/on/host sull'host viene montata nella directory /data all'interno del container my_container.
Confronto tra volumi e directory collegate:
| Caratteristica | Volumi | Directory Collegate |
|---|---|---|
| Storage dei dati | Gestito da Docker | Gestito dall'utente |
| Isolamento | Isolati dal file system dell'host | Utilizzano il file system dell'host |
| Performance | Ottimizzata per Docker | Dipende dal file system dell'host |
| Applicabilità | Storage di dati a lungo termine | Sviluppo e testing |
1.3 Esempi pratici
Esempi pratici di utilizzo
Esempio 1: Utilizzo dei volumi per un database
Per garantire l'archiviazione a lungo termine dei dati del database, si possono usare i volumi.
Creazione di un volume:
docker volume create db_data
Avvio di un container del database utilizzando un volume:
docker run -d --name postgres -e POSTGRES_PASSWORD=mysecretpassword -v
db_data:/var/lib/postgresql/data postgres
Esempio 2: Utilizzo delle directory montate per lo sviluppo web
Per sviluppare un'applicazione web, si possono utilizzare directory montate, così da riflettere subito nel container le modifiche ai file locali.
Avvio di un container con directory montata:
docker run -d --name web_dev -v $(pwd)/my_website:/usr/share/nginx/html nginx
In questo esempio la directory di lavoro corrente my_website è montata nella directory /usr/share/nginx/html del container nginx.
GO TO FULL VERSION