Volumi
Contenitori di Dati
I Contenitori di Dati sono formalmente chiamati Volumi.
- Sono interamente contenuti nel repository locale
- Non sono mappaggi al file system host
Due tipi:
-
Volume Persistente - continua ad esistere anche dopo la rimozione dei contenitori processo che lo usano
-
Volume Effimero - cessa di esistere con la rimozione dei contenitori che lo usano
Volume Persistente
Web Counter App
Costruiamo un'immagine che scrive alla webdir di nginx:
mkdir ~/docker/webcounter
cd ~/docker/webcounter
Editiamo il file webcounter.sh
:
#! /bin/bash
x=0
while true
do
x=$[x + 1]
echo "<br/><h1>$x</h1>" > /usr/share/nginx/html/index.html
sleep 1
done
Costruiamo il file Dockerfile
di specifica di una nuova immagine. Maggiori spiegazioni seguiranno.
FROM ubuntu
COPY webcounter.sh /usr/local/bin/webcounter.sh
RUN chmod +x /usr/local/bin/webcounter.sh
CMD ["/usr/local/bin/webcounter.sh"]
Con il Dockerfile
costruiamo la nuova immagine my_webapp1
:
docker build -t my_webapp1 .
Condivisione tramite volume
Creiamo il volume persistente:
docker volume create myvol
Non è visibile con docker ps -a
ma con docker volume ls
Creiamo il contenitore di processi nginx che mappa il volume persistente alla sua directory di pagine statiche:
docker run -d --name web_server -v myvol:/usr/share/nginx/html -p 8080:80 nginx
Creiamo il contenitore di processi con l’applicativo, che prende il volume persistente da quello già mappato dal server:
docker run -d --name web_app --volumes-from web_server my_webapp1
Verifichiamo col browser a localhost:8080
Verifica della persistenza
Fermiamo e rimuoviamo i contenitori di processi:
docker stop web_server web_app
docker rm web_server web_app
Il contenitore dati esiste ancora:
docker volume ls
Rilanciamo un web_server rimappando il contenitore dati:
docker run -d --name web_server -v myvol:/usr/share/nginx/html -p 8080:80 nginx
Verifichiamo con il browser a localhost:8080
Nota
Questo non funziona:
Salvare il contenuto del contenitore dati - tentativo
Generare un’immagine
docker container commit web_server web_server_backup
Ora la si può salvare ad un file tar
docker image save -o web_server_backup.tar web_server_backup
Il commit di un contenitore dati non include i volumi dati montati
Volume Effimero
Volume effimero: scompare quando i container che lo usano sono terminati
Container che crea un volume:
docker run -ti --rm --name one -v /shared_data ubuntu bash
Container che usa un volume:
docker run -ti --rm --name two --volumes-from one ubuntu bash
Su two:
touch /shared_data/example
Su one:
ls /shared_data
E' visibile example
Terminare one. Su two è ancora visibile example
.
Il volume mantenuto dal server docker
Se rilanciamo one con la stessa condivisione dati, two non lo vede più
Istanze diverse di volume condiviso