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.
Sommario
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!
Commenti recenti