5.1 L'idea dei direttori vincolati (bind mounts)
Montare le directory del host nei container utilizzando i direttori vincolati (bind mounts) è una feature molto potente di Docker, che permette ai container di utilizzare direttamente i file e le directory che si trovano sul sistema host. È particolarmente utile durante lo sviluppo, il testing e la configurazione, quando è necessario utilizzare file locali senza copiarli nel container. In questa lezione vedremo come utilizzare i bind mounts, faremo esempi e discuteremo le migliori pratiche.
I bind mounts permettono di montare specifiche directory o file dal sistema host nei container. Questo è diverso dai volumi, che sono gestiti da Docker e memorizzati in una directory speciale.
Vantaggi dell'uso dei bind mounts
- Accesso diretto ai file dell'host: I container possono utilizzare e modificare direttamente i file presenti sull'host.
- Comodità nello sviluppo: Gli sviluppatori possono modificare i file sull'host e vedere queste modifiche nei container in tempo reale.
- Flessibilità: Qualsiasi directory sull'host può essere montata nel container.
Comando per montare i bind mounts
I bind mounts vengono montati utilizzando i parametri -v
o --mount
durante l'avvio del container.
5.2 Esempi di utilizzo del parametro -v
1. Montare una directory dell'host nel container
Un semplice esempio di come montare una directory dell'host nel container:
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
In questo esempio, la directory /path/on/host
sull'host viene montata nella directory /path/in/container
all'interno del container nginx.
2. Montare un file dell'host nel container
Puoi anche montare file specifici:
docker run -d --name my_container -v /path/on/host/config.conf:/etc/nginx/nginx.conf nginx
In questo esempio, il file di configurazione config.conf
sull'host viene montato come file di configurazione nginx.conf
all'interno del container.
5.3 Esempi di utilizzo del parametro --mount
Il parametro --mount
fornisce un modo più dettagliato per montare le directory bind con la possibilità di specificare vari parametri.
1. Montaggio della directory utilizzando --mount
docker run -d --name my_container --mount type=bind,source=/path/on/host,target=/path/in/container nginx
Questo esempio è simile al precedente con -v
, ma utilizza una sintassi più dettagliata.
2. Montaggio in modalità sola lettura
docker run -d --name my_container --mount
type=bind,source=/path/on/host,target=/path/in/container,readonly nginx
In questo esempio la directory viene montata in modalità sola lettura, impedendo modifiche ai file nel container.
5.4 Esempi pratici
Per sviluppare un'applicazione web, puoi montare una directory con il codice sorgente sull'host dentro il container.
Creazione di una directory con il codice sorgente sull'host:
mkdir -p ~/my_web_app
echo "Ciao, Mondo!" > ~/my_web_app/index.html
Avvio del container con montaggio della directory:
docker run -d --name web_dev -v ~/my_web_app:/usr/share/nginx/html nginx
Ora qualsiasi modifica nella directory ~/my_web_app sull'host sarà immediatamente riflessa nel container.
Esempio 2: Uso dei file di configurazione
Puoi montare file di configurazione da una directory sull'host dentro il container.
Creazione di un file di configurazione sull'host:
echo "user www-data;" > ~/nginx.conf
echo "worker_processes auto;" >> ~/nginx.conf
Avvio del container con montaggio del file di configurazione:
docker run -d --name nginx_custom -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
In questo esempio, il file di configurazione di Nginx sull'host viene utilizzato all'interno del container.
5.5 Verifica delle directory e file montati
Puoi verificare il contenuto delle directory e dei file montati utilizzando il comando docker exec per eseguire comandi all'interno del container.
Esempio
Verifica del contenuto di una directory:
docker exec -it my_container ls /path/in/container
Verifica del contenuto di un file:
docker exec -it my_container cat /path/in/container/config.conf
Eliminazione delle directory bindate
Le directory bindate non sono gestite direttamente da Docker, quindi la loro eliminazione avviene a livello di file system dell'host.
Esempio
Eliminazione di una directory bindata sull'host:
rm -r /path/on/host
GO TO FULL VERSION