Docker task#1: montare un volume

Spread the love
Docker types of mounts: volume
Docker types of mounts: volume

Nell’applicazione che sto progettando e che farà utilizzo di Docker, ci sono anlcune directory host che voglio vengano viste dal container dell’applicaizone. Per fare questo in Docker si usa il concetto di volume.

C’è una directory che sarà destinata ad ospitare file prodotti dall’applicazione Python che andrà a costituire il mio primo volume. Per ora mi va bene che sia una directory isolata del mio host che monto nell’immagine che conterrà la mia applicazione dockerizzata. Più avanti mi ripropongo di montare la partizione di un NAS.

Il secondo volume che mi serve è quello che contiene il codice sorgente: voglio lavorare nell’host normalmente e fare in modo che il container Docker possa accedere al codice sorgente Python up to date. Voglio evitare la situazione in cui sviluppo nell’host e poi copio, ad ogni piccola modifica, i file dentro alla directory del contenitore docker.

Voglio in definitiva che il container veda il codice live.

Montaggio di una directory host come volume di dati Docker

Possiamo quindi montare una directory esistente dall’host a un container. Questi tipi di volumi sono chiamati Volumi Host.

È possibile montare i volumi host utilizzando il flag -v e specificando il nome della directory host.

Tutto ciò che si trova all’interno della directory host è quindi disponibile nel contenitore. Inoltre, tutti i dati generati all’interno del contenitore e inseriti nel volume di dati vengono archiviati in modo sicuro nella directory host e posso accedervi dall’OS dell’host con la shell o con Nautilus.

La sintassi di base per il montaggio di una directory host è:

$ docker run -v "$(pwd)":[volume_name] [docker_image]

L’attributo "$(pwd)" indica a Docker di montare la directory in cui si trova attualmente l’utente.

L’esempio seguente illustra come farlo.

1. Innanzitutto, crea una directory di esempio sull’host con il nome tmp e spostati in essa:

$ mkdir tmp && cd tmp

2. Una volta all’interno della directory, crea un file di test per vedere se sarà disponibile dal contenitore:

$ touch file.txt

3. Controllare se esiste l’immagine che vogliamo istanziare:

$ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED      SIZE
<none>        <none>    e7a5d4ae5d10   3 days ago   1.44GB
sent_crunch   latest    6dcb0bbb67c7   3 days ago   1.27GB

Nel mio caso l’immagine da usare è sent_crunch.

4. Quindi, usa il comando docker run per avviare un contenitore Ubuntu con la directory host collegata ad esso:

$ docker run -it -v "$(pwd)":/data1 [docker_image]

data1 è il nome del volume visto dal contenitore Docker. In definitiva, questo comando avvia il contenitore in modalità interattiva e monta un volume con il nome data1.

Nel mio esempio:

$ cd IdeaProjects/Python/SentCrunch
$ docker run -it -v "$(pwd)":/src sent_crunch
root@fbaaee970e3c:~# pwd
/app
root@fbaaee970e3c:~# ls
root@fbaaee970e3c:~# cd ..
root@fbaaee970e3c:/# ls
app  bin  boot	dev  etc  home	lib  lib32  lib64  libx32  media  mnt  opt  proc  root	run  sbin  src	srv  sys  tmp  usr  var
root@fbaaee970e3c:~# cd /src  <----- ho montato qui la directory sorgente
root@fbaaee970e3c:/src# ls -l
total 260
-rw-rw-r-- 1 root root   1626 Aug 12 13:52 Dockerfile
-rwxrwxr-x 1 root root  10758 Feb 17 15:23 GPF_Smart_Agri-sat_Cruncher.xml
-rw-rw-r-- 1 root root    359 Dec 24  2021 Logger.py
-rw-rw-r-- 1 root root   2523 Oct 12  2021 Resample.xml
-rw-rw-r-- 1 root root    542 Nov 22  2021 SentinelCruncher.iml
-rw-rw-r-- 1 root root 104523 Jul  8 15:02 SentinelCruncher.py
-rw-rw-r-- 1 root root      0 Feb  1  2022 __init__.py
drwxrwxr-x 2 root root   4096 Jul  8 15:21 __pycache__
drwxrwxr-x 2 root root   4096 Jul 11 09:19 archexport
-rw-rw-r-- 1 root root  10396 May 10 09:50 changelog.txt
-rw-rw-r-- 1 root root   1536 May  9 09:22 constant.local.py
-rw-rw-r-- 1 root root   1563 Jul  8 15:14 constant.py
-rw-rw-r-- 1 root root   1926 May  9 09:18 constant.stage.py
-rw-rw-r-- 1 root root    665 Nov  9  2021 country.xml
-rw-rw-r-- 1 root root   1086 Aug  9 13:08 docker-compose.yml
-rw-rw-r-- 1 root root    851 Jul 27 06:14 docker_compose.yml
-rw-rw-r-- 1 root root      0 Jul  8 10:21 exportFile.dmp
-rw-rw-r-- 1 root root  16799 Oct  7  2021 install_pg.log
drwxrwxr-x 3 root root   4096 Nov 18  2021 latex
-rw-rw-r-- 1 root root  34498 Feb 25 16:02 libcruncher.py
-rw-rw-r-- 1 root root      0 Nov 18  2021 math
-rw-rw-r-- 1 root root    132 Jul 11 08:37 shp2psql.cmd
drwxrwxr-x 3 root root   4096 Jul 25 14:58 sql
drwxrwxr-x 2 root root   4096 Jul 11 16:34 test
-rw-rw-r-- 1 root root  10785 Jan 28  2022 xmlOut.xml

root@fbaaee970e3c:/src# cd test
root@fbaaee970e3c:/src/test# ./test001_dbconnect.py 
Ciao Docker!

Riferimenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.