CodeGym /Corsi /Docker SELF /Montaggio dei volumi

Montaggio dei volumi

Docker SELF
Livello 12 , Lezione 2
Disponibile

8.1 Introduzione ai dischi virtuali

Montare i volumi (Volumes) è una delle funzionalità più utili di Docker. Grazie a questa funzione, i container possono lavorare facilmente con i dati della macchina host. Questa funzione rende la gestione dei dati flessibile e comoda: puoi salvare le informazioni a lungo termine, condividere i dati tra i container e fare il backup o il ripristino senza problemi se qualcosa va storto.

I volumi (Volumes) in Docker sono un modo per salvare i dati in modo che non dipendano dai container. Anche se il container viene eliminato, le informazioni memorizzate nei volumi rimangono al sicuro. I volumi possono essere collegati (montati) ai container, il che consente di memorizzare i dati separatamente e di riutilizzarli, indipendentemente da quante volte crei o elimini i container.

Tipi principali di volumi

  1. Volumi anonimi (Anonymous Volumes)
    • Vengono creati automaticamente da Docker se per un container non è specificato esplicitamente un volume.
    • Utilizzati per la memorizzazione temporanea dei dati.
  2. Volumi nominati (Named Volumes)
    • Creati e gestiti da Docker.
    • Possono essere collegati a più container e sono mantenuti anche dopo la loro eliminazione o arresto.
  3. Volumi di tipo bind (Bind Mounts)
    • Collegano una directory sulla macchina host a una directory nel container.
    • Ideali per accedere ai dati del sistema host e utili durante lo sviluppo.

Sintassi principale del comando docker run per montare i volumi


-v <host_path>:<container_path>

Sintassi completa:


docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]

Parametri principali per montare i volumi

1. Parametro -v o --volume

Utilizzato per creare un volume nominato o un volume di tipo bind.

Esempio:

Terminal

docker run -d -v /host/data:/container/data nginx

2. Parametro --mount

Fornisce un modo più flessibile e dettagliato per montare i volumi, supportando parametri aggiuntivi.

Esempio:

Terminal

docker run -d --mount type=bind,source=/host/data,target=/container/data nginx

8.2 Creazione e utilizzo dei volumi

1. Volumi nominati

I volumi nominati vengono creati e gestiti da Docker. Sono progettati per la memorizzazione dei dati a lungo termine che devono essere mantenuti tra i riavvii o le eliminazioni dei container.

Creazione di un volume nominato:

Terminale

docker volume create my_volume

Avvio di un container con montaggio del volume:

In questo esempio il volume my_volume viene montato nella directory /data all'interno del container my_container. Tutti i dati scritti in /data saranno memorizzati nel volume e resteranno disponibili anche dopo l'eliminazione del container.

Terminale

docker run -d -v my_volume:/data --name my_container nginx

2. Volumi anonimi

I volumi anonimi vengono creati automaticamente da Docker e associati a un container specifico. Sono utili per dati temporanei che non è necessario conservare dopo l'eliminazione del container.

Avvio di un container con un volume anonimo:

In questo esempio Docker creerà automaticamente un volume anonimo e lo monterà nella directory /data all'interno del container.

Terminale

docker run -d -v /data --name my_container nginx

3. Directory bindate

Le directory bindate permettono di montare directory del sistema host nei container. Questo è utile per condividere dati tra container e il sistema host. Inoltre, questo approccio viene spesso utilizzato durante lo sviluppo, quando il codice sorgente è memorizzato sul sistema host.

Avvio di un container con directory bindata:

In questo esempio la directory /host/data sulla macchina host viene montata nella directory /container/data all'interno del container my_container.

Terminale

docker run -d -v /host/data:/container/data --name my_container nginx

8.3 Esempi di utilizzo dei volumi

1. Salvataggio dei dati del database

Usare i volumi per i database aiuta a mantenere i dati anche durante i riavvii e gli aggiornamenti del container. Questo è particolarmente importante per un funzionamento affidabile in ambienti di produzione.

Esempio:

In questo esempio, i dati di PostgreSQL vengono salvati nel volume db_data, garantendone la conservazione durante i riavvii o l'eliminazione del container.

Terminale

docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres

2. Condivisione dei dati tra container

A volte è necessario condividere i dati tra più container. I volumi rendono questa operazione molto semplice.

Esempio

Creiamo un volume e avviamo due container che lo useranno. Entrambi i container avranno accesso ai dati nel volume shared_data, permettendo loro di condividere le informazioni.

Terminale

docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx

3. Sviluppo e test

Durante lo sviluppo di applicazioni è comodo usare directory bindate per condividere il codice sorgente tra il container e la macchina host. Questo permette agli sviluppatori di modificare il codice sull'host e al container di lavorare subito con gli aggiornamenti.

Esempio

In questo esempio, la directory /path/to/source sulla macchina host viene montata nella directory /app all'interno del container dev_container. Così, il container può utilizzare il codice sorgente aggiornato direttamente dal sistema host.

Terminale

docker run -d -v /path/to/source:/app --name dev_container node
<

8.4 Gestione dei volumi

Docker fornisce comandi comodi per la gestione dei volumi, grazie ai quali si possono facilmente creare, eliminare e visualizzare informazioni sui volumi.

1. Visualizzare tutti i volumi

Questo comando mostra un elenco di tutti i volumi disponibili sulla macchina host.

Terminale

docker volume ls

2. Visualizzare informazioni su un volume

Con questo comando è possibile ottenere dettagli sul volume my_volume: la sua posizione nel file system dell'host e informazioni sui container che utilizzano questo volume.

Terminale

docker volume inspect my_volume

3. Eliminare un volume

Questo comando elimina il volume my_volume. Prima di eliminare, è importante assicurarsi che il volume non venga usato da alcun container, altrimenti il comando non verrà eseguito.

Terminale

docker volume rm my_volume

8.5 Backup dei volumi

Per garantire la sicurezza dei dati, è importante essere in grado di creare backup dei volumi e ripristinarli quando necessario.

1. Creazione di un backup del volume

In questo esempio, il contenuto del volume my_volume viene archiviato in un file my_volume_backup.tar.gz, che viene salvato nella directory /backup sulla macchina host.

Terminale

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume

2. Ripristino del volume

Questo esempio ripristina il contenuto del volume my_volume dal backup salvato nel file my_volume_backup.tar.gz.

Terminale

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION