Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:docker1:drf03 [2020/06/26 11:58] adminelearning:workbooks:docker1:drf03 [2021/12/29 10:32] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2020.02** - Consulter le Change Log en fin de module.+Version : **2022.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======DOF104 - Docker par la Pratique======+======DOF104 - Gestion des Volumes, du Réseau et de la Supervision des Conteneurs======
  
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **DOF104 - Docker par la Pratique** +  * **DOF104 - Gestion des Volumes, du Réseau et des Ressources** 
-    * LAB #10 Lancer Nagios dans un container, +    * Contenu du Module 
-    * LAB #11 - Lancer Wordpress dans un container, +    * LAB #Gestion des Volumes 
-    LAB #12 - Gestion d'une Architecture de Microservices.+      * 1.1 - Gestion Automatique par Docker 
 +      * 1.2 - Gestion Manuelle d'un Volume 
 +    * LAB #2 - Gestion du Réseau 
 +      * 2.1 - L'Approche Réseau Docker 
 +        * Bridge 
 +        * Host 
 +        * None 
 +        * Liens 
 +      * 2.2 - Lancer Wordpress dans un container 
 +      2.3 - Gestion d'une Architecture de Microservices 
 +    * LAB #3 - Superviser les Conteneurs 
 +      * 3.1 - Les Journaux 
 +      * 3.2 - Les Processus 
 +      * 3.3 - L'Activité en Continu
  
-=====LAB #Lancer Nagios dans un container=====+=====LAB #Gestion des Volumes=====
  
-Créez le répertoire **/root/nagios** et placez-vous dedans :+Lancez un conteneur à partir de la dernière image :
  
 <code> <code>
-root@debian9:~# mkdir nagios +root@debian9:~/mongodbdocker run -d --name mongo2 i2tch/mongodb2 
-root@debian9:~# cd nagios +e91a055283f4d67cbd91d11bb3faa6f67925893cb18f9cc25023e72e0f7ed85a
-root@debian9:~/nagios# +
 </code> </code>
  
-Créez le fichier **Dockerfile** suivant :+====1.1 - Gestion Automatique de Volumes par Docker==== 
 + 
 +Vérifiez que le processus est bien démarré dans le conteneur :
  
 <code> <code>
-root@debian9:~/nagiosvi Dockerfile +root@debian9:~# docker ps 
-root@debian9:~/nagios# cat Dockerfile +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 
-FROM ubuntu:14.04  +b9773e4aa06d        i2tch/mongodb2      "docker-entrypoint..."   7 hours ago         Up About a minute   27017/tcp           mongo2
-RUN apt-get update && \  +
-  apt-get -y install wget && \  +
-  wget https://raw.github.com/learning-nagios/nagios-install/master/install.sh && \ +
-  sh install.sh +
-EXPOSE 80 +
-ADD entrypoint.sh /entrypoint.sh +
-CMD ["sh", "/entrypoint.sh"]+
 </code> </code>
  
-Créez ensuite le fichier **entrypoint.sh** :+Identifiez ensuite le point de montage du répertoire **/data/db** du conteneur :
  
 <code> <code>
-root@debian9:~/nagiosvi entrypoint.sh +root@debian9:~# docker inspect mongo2 
-root@debian9:~/nagios# cat entrypoint.sh +..
-#!/bin/sh +        "Mounts"
-# capture stop signals from Docker +            { 
-trap stop_all 1 2 3 4 5 6 15 +                "Type": "volume", 
-stop_all() +                "Name": "9c84c2d1a0db811a3c13dce354ba21169f3073513c8d025dd96c5f902364d44a", 
-    echo "Stopping services...+                "Source": "/var/lib/docker/volumes/9c84c2d1a0db811a3c13dce354ba21169f3073513c8d025dd96c5f902364d44a/_data", 
-    /etc/init.d/nagios stop +                "Destination": "/data/configdb", 
-    apachectl stop +                "Driver": "local", 
-} +                "Mode": "", 
-start_all() { +                "RW": true, 
-    echo "Starting services..." +                "Propagation": "" 
-    apachectl start +            }, 
-    /etc/init.d/nagios start +            
-+                "Type": "volume", 
-# start services and wait indefinitely +                "Name": "a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050", 
-start_all +                "Source": "/var/lib/docker/volumes/a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050/_data", 
-sleep 10000d+                "Destination": "/data/db", 
 +                "Driver": "local", 
 +                "Mode": "", 
 +                "RW": true, 
 +                "Propagation": "" 
 +            } 
 +... 
 +            "Volumes": { 
 +                "/data/configdb": {}, 
 +                "/data/db": {} 
 +            }, 
 +...
 </code> </code>
  
-Créez maintenant l'image :+En regardant le contenu du répertoire **/data/db**, on constate une arborescence classique de stockage de données de mongodb :
  
 <code> <code>
-root@debian9:~/nagios# docker build --tag automated_nagios_image .+root@debian9:~# ls /var/lib/docker/volumes/a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050/_data 
 +journal  local.0  local.ns  mongod.lock  storage.bson
 </code> </code>
  
-Une fois l'image construite, créez un conteneur ainsi :+Arrêtez et supprimez le conteneur **mongo2** :
  
 <code> <code>
-root@debian9:~/nagios# docker run --p 8080:80 automated_nagios_image+root@debian9:~# docker stop mongo2 
 +mongo2 
 +root@debian9:~# docker ps -
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES 
 +ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                          test1 
 +21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                        myDocker 
 +b9773e4aa06d        i2tch/mongodb2      "docker-entrypoint..."   7 hours ago         Exited (0) 10 seconds ago                       mongo2 
 +bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                     27017/tcp           mongo1 
 +f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                        mongo 
 +9731a48f126a        nginx               "nginx -g 'daemon ..."   18 hours ago        Exited (0) 6 hours ago                          cocky_gates 
 +eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                         adoring_yonath 
 +cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                         i2tch 
 +root@debian9:~# docker rm mongo2 
 +mongo2 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES 
 +ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                         test1 
 +21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                       myDocker 
 +bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                    27017/tcp           mongo1 
 +f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                       mongo 
 +9731a48f126a        nginx               "nginx -g 'daemon ..."   18 hours ago        Exited (0) 6 hours ago                         cocky_gates 
 +eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                        adoring_yonath 
 +cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                        i2tch
 </code> </code>
  
-Vérifiez que votre conteneur fonctionne :+Re-créez maintenant un conteneur à partir de l'image **i2tch/mongodb2** :
  
 <code> <code>
-root@debian9:~/nagios# docker ps -a +root@debian9:~# docker run -d --name mongo2 i2tch/mongodb2 
-CONTAINER ID        IMAGE                    COMMAND               CREATED             STATUS              PORTS                  NAMES +a8382642c4e849337e12a60419b10f63ea21251dfcc2c6050284ca3eed7fa13d 
-23d6feb6e799        automated_nagios_image   "sh /entrypoint.sh"   5 minutes ago       Up 5 minutes        0.0.0.0:8080->80/tcp   peaceful_zhukovsky+root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES 
 +a8382642c4e8        i2tch/mongodb2      "docker-entrypoint..."   12 seconds ago      Exited (100) 11 seconds ago                       mongo2 
 +ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                            test1 
 +21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my...  6 hours ago         Exited (137) 6 hours ago                          myDocker 
 +bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                       27017/tcp           mongo1 
 +f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                          mongo 
 +9731a48f126a        nginx               "nginx -g 'daemon ..."   18 hours ago        Exited (0) 6 hours ago                            cocky_gates 
 +eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                           adoring_yonath 
 +cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                           i2tch 
 +</code> 
 + 
 +Utilisez de nouveau la commande **docker inspect** pour identifier le point de montage du répertoire **/data/db** : 
 + 
 +<code> 
 +root@debian9:~# docker inspect mongo2 
 +... 
 +        "Mounts":
 +            { 
 +                "Type": "volume", 
 +                "Name": "76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43", 
 +                "Source": "/var/lib/docker/volumes/76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43/_data", 
 +                "Destination": "/data/db", 
 +                "Driver": "local", 
 +                "Mode": "", 
 +                "RW": true, 
 +                "Propagation": "" 
 +            }, 
 +            { 
 +                "Type": "volume", 
 +                "Name": "3bf724ceb38ce0792469d7e403f05b6794f27e0aa72bda51a8ab75b2df5ae87c", 
 +                "Source": "/var/lib/docker/volumes/3bf724ceb38ce0792469d7e403f05b6794f27e0aa72bda51a8ab75b2df5ae87c/_data", 
 +                "Destination": "/data/configdb", 
 +                "Driver": "local", 
 +                "Mode": "", 
 +                "RW": true, 
 +                "Propagation": "" 
 +            }
 ... ...
 </code> </code>
  
-Ouvrez une session en mode graphique dans la machine virtuelle Debian 8 et lancez le navigateur web. Saisissez l'adresse suivante :+<WRAP center round important> 
 +**Important** : Notez que le répertoire des données du précédent conteneur, **/var/lib/docker/volumes/a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050/_data** n'est pas le même que le conteneur courant **/var/lib/docker/volumes/76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43/_data**. 
 +</WRAP>
  
-  http://localhost:8080/nagios+Les conteneurs n'ayant pas été arrêtés avec l'option **-v**, on peut constater que les répertoires persistent dans **/var/lib/docker** :
  
-Vous devez obtenir la boîte de dialogue d'authentification. Connectez-vous avec le compte nagiosadmin nagiosadmin.+<code> 
 +root@debian9:~# ls -l /var/lib/docker/volumes/ 
 +total 52 
 +drwxr-xr-x 3 root root  4096 Sep  7 09:43 3bf724ceb38ce0792469d7e403f05b6794f27e0aa72bda51a8ab75b2df5ae87c 
 +drwxr-xr-x 3 root root  4096 Sep  6 16:07 46d11d005d05757609ff76159ce0992d210089c5247fa54b024706a20b0de501 
 +drwxr-xr-x 3 root root  4096 Sep  7 09:43 76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43 
 +drwxr-xr-x 3 root root  4096 Sep  7 02:33 9c84c2d1a0db811a3c13dce354ba21169f3073513c8d025dd96c5f902364d44a 
 +drwxr-xr-x 3 root root  4096 Sep  7 02:33 a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050 
 +drwxr-xr-x 3 root root  4096 Sep  6 16:07 cc38fa97138adc55976aa16993d8920c5f7da922ad1b2a07936d30cc82d59f38 
 +-rw------- 1 root root 32768 Sep  7 09:43 metadata.db 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez que non-seulement ceci représente une source de perte d'espace disque mais prouve aussi que les données ne sont pas persistantes entre deux instances d'un conteneur d'**i2tch/mongodb2**. Ceci crée bien évidement un problème important en production. 
 +</WRAP> 
 + 
 +====1.2 - Gestion Manuelle d'un Volume==== 
 + 
 +Arrêtez et supprimez le conteneur **mongo2** puis re-créez un conteneur avec un volume spécifique pour contenir les données placées dans **/data/db** du conteneur par mongodb : 
 + 
 +<code> 
 +root@debian9:~# docker stop mongo2 
 +mongo2 
 +root@debian9:~# docker rm mongo2 
 +mongo2 
 +root@debian9:~# docker run -d --name mongo2 -v persistent_data:/data/db i2tch/mongodb2 
 +3cf093d72b9e3739f2cb288e571244e494b7518292c31994ee012e3620bb0e98 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES 
 +3cf093d72b9e        i2tch/mongodb2      "docker-entrypoint..."   21 seconds ago      Up 20 seconds              27017/tcp           mongo2 
 +ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                         test1 
 +21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                       myDocker 
 +bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                    27017/tcp           mongo1 
 +f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                       mongo 
 +9731a48f126a        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 6 hours ago                         cocky_gates 
 +eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                        adoring_yonath 
 +cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                        i2tch 
 +root@debian9:~# docker logs mongo2 
 +2017-09-07T08:53:12.523+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=3cf093d72b9e 
 +2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] db version v3.0.15 
 +2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] git version: b8ff507269c382bc100fc52f75f48d54cd42ec3b 
 +2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] build info: Linux ip-10-166-66-3 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 BOOST_LIB_VERSION=1_49 
 +2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] allocator: tcmalloc 
 +2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] options: { storage: { mmapv1: { smallFiles: true } } } 
 +2017-09-07T08:53:12.535+0000 I JOURNAL  [initandlisten] journal dir=/data/db/journal 
 +2017-09-07T08:53:12.535+0000 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed 
 +2017-09-07T08:53:13.368+0000 I JOURNAL  [initandlisten] preallocateIsFaster=true 15.4 
 +2017-09-07T08:53:14.410+0000 I JOURNAL  [initandlisten] preallocateIsFaster=true 19.36 
 +2017-09-07T08:53:16.277+0000 I JOURNAL  [initandlisten] preallocateIsFaster=true 15.86 
 +2017-09-07T08:53:16.277+0000 I JOURNAL  [initandlisten] preallocateIsFaster check took 3.742 secs 
 +2017-09-07T08:53:16.277+0000 I JOURNAL  [initandlisten] preallocating a journal file /data/db/journal/prealloc.0 
 +2017-09-07T08:53:19.930+0000 I JOURNAL  [initandlisten] preallocating a journal file /data/db/journal/prealloc.1 
 +2017-09-07T08:53:23.035+0000 I JOURNAL  [initandlisten] preallocating a journal file /data/db/journal/prealloc.2 
 +2017-09-07T08:53:25.889+0000 I JOURNAL  [durability] Durability thread started 
 +2017-09-07T08:53:25.889+0000 I JOURNAL  [journal writer] Journal writer thread started 
 +2017-09-07T08:53:26.016+0000 I INDEX    [initandlisten] allocating new ns file /data/db/local.ns, filling with zeroes... 
 +2017-09-07T08:53:26.246+0000 I STORAGE  [FileAllocator] allocating new datafile /data/db/local.0, filling with zeroes... 
 +2017-09-07T08:53:26.246+0000 I STORAGE  [FileAllocator] creating directory /data/db/_tmp 
 +2017-09-07T08:53:26.256+0000 I STORAGE  [FileAllocator] done allocating datafile /data/db/local.0, size: 16MB,  took 0.002 secs 
 +2017-09-07T08:53:26.299+0000 I NETWORK  [initandlisten] waiting for connections on port 27017 
 +</code> 
 + 
 +Notez que cette fois-ci, docker a créé un répertoire **persistent_data** dans le répertoire **/var/lib/docker/volumes/** : 
 + 
 +<code> 
 +root@debian9:~# ls -l /var/lib/docker/volumes/ 
 +total 68 
 +drwxr-xr-x 3 root root  4096 Sep  7 09:43 3bf724ceb38ce0792469d7e403f05b6794f27e0aa72bda51a8ab75b2df5ae87c 
 +drwxr-xr-x 3 root root  4096 Sep  6 16:07 46d11d005d05757609ff76159ce0992d210089c5247fa54b024706a20b0de501 
 +drwxr-xr-x 3 root root  4096 Sep  7 09:46 511e23f818d5cf60f4333a3fe8fd2e4333c900dec6eee97f70448bfb0091184d 
 +drwxr-xr-x 3 root root  4096 Sep  7 09:53 5ca72be4140ecf1271efe7342cf7cd58ce66fc3673d12c04b8503603b8cee66c 
 +drwxr-xr-x 3 root root  4096 Sep  7 09:43 76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43 
 +drwxr-xr-x 3 root root  4096 Sep  7 02:33 9c84c2d1a0db811a3c13dce354ba21169f3073513c8d025dd96c5f902364d44a 
 +drwxr-xr-x 3 root root  4096 Sep  7 02:33 a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050 
 +drwxr-xr-x 3 root root  4096 Sep  6 16:07 cc38fa97138adc55976aa16993d8920c5f7da922ad1b2a07936d30cc82d59f38 
 +-rw------- 1 root root 65536 Sep  7 09:53 metadata.db 
 +drwxr-xr-x 3 root root  4096 Sep  7 09:46 persistent_data 
 +</code> 
 + 
 +Arrêtez et supprimez le conteneur **mongo2** puis re-créez un conteneur en utilisant le même volume spécifique pour contenir les données placées dans **/data/db** du conteneur par mongodb : 
 + 
 +<code> 
 +root@debian9:~# docker stop mongo2 
 +mongo2 
 +root@debian9:~# docker rm mongo2 
 +mongo2 
 +root@debian9:~# docker run -d --name mongo2 -v persistent_data:/data/db i2tch/mongodb2 
 +ad672c3038245c25a36162d05820c21f7250557ac342582d0908d3ca33799e37 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES 
 +ad672c303824        i2tch/mongodb2      "docker-entrypoint..."   24 seconds ago      Up 22 seconds              27017/tcp           mongo2 
 +ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                         test1 
 +21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                       myDocker 
 +bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                    27017/tcp           mongo1 
 +f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                       mongo 
 +9731a48f126a        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 6 hours ago                         cocky_gates 
 +eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                        adoring_yonath 
 +cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                        i2tch 
 +</code> 
 + 
 +Encore une fois, cherchez le point de montage de **/data/db** grâce à l'utilisation de la commande **docker inspect** : 
 + 
 +<code> 
 +root@debian9:~# docker inspect mongo2 
 +... 
 +        "Mounts":
 +            { 
 +                "Type": "volume", 
 +                "Name": "6cefc73cef475279dfe20e25421fa358e6aa995b5c175b9f2c7a9b86163661e5", 
 +                "Source": "/var/lib/docker/volumes/6cefc73cef475279dfe20e25421fa358e6aa995b5c175b9f2c7a9b86163661e5/_data", 
 +                "Destination": "/data/configdb", 
 +                "Driver": "local", 
 +                "Mode": "", 
 +                "RW": true, 
 +                "Propagation": "" 
 +            }, 
 +            { 
 +                "Type": "volume", 
 +                "Name": "persistent_data", 
 +                "Source": "/var/lib/docker/volumes/persistent_data/_data", 
 +                "Destination": "/data/db", 
 +                "Driver": "local", 
 +                "Mode": "z", 
 +                "RW": true, 
 +                "Propagation": "" 
 +            } 
 +... 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez ici que l'utilisation du même répertoire entre les deux conteneurs rend les données persistantes et évite la création de volumes orphelins. Pour plus d'information sur les volumes, consultez la page : **[[https://docs.docker.com/storage/volumes/]]**. 
 +</WRAP> 
 + 
 +Pour créer un volume à utiliser avec un conteneur utilisez la commande docker volume **create** : 
 + 
 +<code> 
 +root@debian9:~# docker volume create myvolume 
 +myvolume 
 +</code> 
 + 
 +Pour lister les volumes, utilisez la commande docker volume **ls** : 
 + 
 +<code> 
 +root@debian9:~# docker volume ls 
 +DRIVER              VOLUME NAME 
 +local               myvolume 
 +</code> 
 + 
 +Notez maintenant l'emplacement physique du volume créé : 
 + 
 +<code> 
 +root@debian9:~# docker volume inspect myvolume 
 +
 +    { 
 +        "CreatedAt": "2021-04-15T09:35:21+02:00", 
 +        "Driver": "local", 
 +        "Labels": {}, 
 +        "Mountpoint": "/var/lib/docker/volumes/myvolume/_data", 
 +        "Name": "myvolume", 
 +        "Options": {}, 
 +        "Scope": "local" 
 +    } 
 +
 +</code> 
 + 
 +Créez un fichier témoin dans le répertoire **/var/lib/docker/volumes/myvolume/_data/** : 
 + 
 +<code> 
 +root@debian9:~# touch /var/lib/docker/volumes/myvolume/_data/test-file 
 +</code> 
 + 
 +Démarrez maintenant un conteneur qui utilise ce volume : 
 + 
 +<code> 
 +root@debian9:~# docker run -it --name ubuntu-volume --mount source=myvolume,target=/myvolume ubuntu bash 
 +root@673f9c8bc837:/# ls 
 +bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  myvolume  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez l'utilisation de l'option **--mount** au lieu de l'option **--volume** ou **-v**. Introduit en Docker version 17.06, Docker recommende l'utilisation de l'option --mount plutôt que l'option -v.. 
 +</WRAP> 
 + 
 +Notez que le fichier témoin **test-file** est disponible dans le conteneur : 
 + 
 +<code> 
 +root@673f9c8bc837:/# cd myvolume/ 
 +root@673f9c8bc837:/myvolume# ls 
 +test-file 
 +</code> 
 + 
 +Créez un deuxième fichier témoin dans le répertoire **/myvolume** du conteneur et quittez celui-ci : 
 + 
 +<code> 
 +root@673f9c8bc837:/myvolume# touch container_volume 
 +root@673f9c8bc837:/myvolume# exit 
 +</code> 
 + 
 +Contrôlez maintenant le contenu du répertoire **/var/lib/docker/volumes/myvolume/_data/** : 
 + 
 +<code> 
 +root@debian9:~# ls -l /var/lib/docker/volumes/myvolume/_data/ 
 +total 0 
 +-rw-r--r-- 1 root root 0 avril 15 10:22 container_volume 
 +-rw-r--r-- 1 root root 0 avril 15 10:16 test-file 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez que les deux fichiers témoins sont visibles. 
 +</WRAP> 
 + 
 +<code> 
 +root@debian9:~# docker rm ubuntu-volume 
 +ubuntu-volume 
 +root@debian9:~# ls -l /var/lib/docker/volumes/myvolume/_data/ 
 +total 0 
 +-rw-r--r-- 1 root root 0 avril 15 10:22 container_volume 
 +-rw-r--r-- 1 root root 0 avril 15 10:16 test-file 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez que les deux fichiers témoins sont toujours visibles. 
 +</WRAP> 
 + 
 +Créez maintenant un deuxième conteneur en spécifiant un volume qui n'existe pas : 
 + 
 +<code> 
 +root@debian9:~# docker run -it --rm --name ubuntu-volume --mount source=myvolume1,target=/myvolume1 ubuntu bash 
 +root@b1476960de63:/# ls  
 +bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  myvolume1  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@b1476960de63:/# cd myvolume1 
 +root@b1476960de63:/myvolume1# touch file_myvolume1 
 +root@b1476960de63:/myvolume1# exit 
 +exit 
 +</code> 
 + 
 +Notez que Docker a automatiquement créé le volume : 
 + 
 +<code> 
 +root@debian9:~# docker volume ls 
 +DRIVER              VOLUME NAME 
 +local               myvolume 
 +local               myvolume1 
 +root@debian9:~# ls -l /var/lib/docker/volumes/myvolume1/_data/ 
 +total 0 
 +-rw-r--r-- 1 root root 0 avril 15 12:06 file_myvolume1 
 +</code> 
 + 
 +Un autre type de volume utilisable avec Docker est le **Bindmount**. Un Bindmount : 
 + 
 +  * dépend de la structure de l'arborescence de l'hôte Docker, 
 +  * ne peut pas être contrôler par la CLI Docker. 
 + 
 +Pour créer un Bindmount, commencez par créer le répertoire **bindmount** dans **/root** : 
 + 
 +<code> 
 +root@debian9:~# mkdir bindmount 
 +root@debian9:~# touch bindmount/test_bind 
 +</code> 
 + 
 +Montez le Bindmount à l'intérieur d'un conteneur : 
 + 
 +<code> 
 +root@debian9:~# docker run -it --name ubuntu-volume --mount type=bind,source=/root/bindmount,target=/bindmount ubuntu bash 
 +root@7b13fe558984:/# ls 
 +bin  bindmount  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@7b13fe558984:/# cd bindmount 
 +root@7b13fe558984:/bindmount# ls 
 +test_bind 
 +root@7b13fe558984:/bindmount# touch container_bind 
 +root@7b13fe558984:/bindmount# ls 
 +container_bind  test_bind 
 +root@7b13fe558984:/bindmount# exit 
 +exit 
 +</code> 
 + 
 +Conrôlez la présence du fichier témoin : 
 + 
 +<code> 
 +root@debian9:~# ls -l bindmount/ 
 +total 0 
 +-rw-r--r-- 1 root root 0 avril 15 10:32 container_bind 
 +-rw-r--r-- 1 root root 0 avril 15 10:32 test_bind 
 +root@debian9:~# docker rm ubuntu-volume 
 +ubuntu-volume 
 +root@debian9:~# ls -l bindmount/ 
 +total 0 
 +-rw-r--r-- 1 root root 0 avril 15 10:32 container_bind 
 +-rw-r--r-- 1 root root 0 avril 15 10:32 test_bind 
 +</code> 
 + 
 +Notez que la CLI Docker n'a pas de connaissance de ce point de montage : 
 + 
 +<code> 
 +root@debian9:~# docker volume ls 
 +DRIVER              VOLUME NAME 
 +local               myvolume 
 +</code> 
 + 
 + 
 +=====LAB #2 - Gestion du Réseau===== 
 + 
 +====2.1 - L'Approche Réseau Docker==== 
 + 
 +Docker fournit trois réseaux par défaut : 
 + 
 +<code> 
 +root@debian9:~# docker network ls 
 +NETWORK ID          NAME                DRIVER              SCOPE 
 +495b3db75b0d        bridge              bridge              local 
 +e1ed4de2f947        host                host                local 
 +6bda460c97c6        none                null                local 
 +</code> 
 + 
 +===Bridge=== 
 + 
 +Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant Docker. Les conteneurs ne peuvent communiquer qu'entre eux et ils ne sont pas accessibles depuis l'extérieur. Pour que les conteneurs sur le réseau puissent communiquer ou être accessibles du monde extérieur, il faut configurer le mappage de port. 
 + 
 +Par défaut Docker fonctionne en mode **Pont** ou (//Bridge//) et crée une interface intermédiaire à cet effet appelé **docker0** : 
 + 
 +<code> 
 +root@debian9:~# ip addr show docker0 
 +3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default  
 +    link/ether 02:42:38:f1:e7:ee brd ff:ff:ff:ff:ff:ff 
 +    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 
 +       valid_lft forever preferred_lft forever 
 +</code> 
 + 
 +Démarrez un conteneur dénommé **resotest** à partir d'une image de CentOS :  
 + 
 +<code> 
 +root@debian9:~# docker run -itd --name=resotest centos 
 +2169360fcbfdbd6e68ea969a95edeb6fc42603c23ee42f03ceec286276519855 
 +</code> 
 + 
 +Lancez ensuite la commande **docker network inspect bridge** à partir de la machine virtuelle hôte de Debian_9 : 
 + 
 +<code> 
 +root@debian9:~# docker network inspect bridge 
 +
 +    { 
 +        "Name": "bridge", 
 +        "Id": "495b3db75b0d4bfcfc6da7c3e2af5f6addcdc227aa8b69b1e59a998be1819d12", 
 +        "Created": "2017-09-07T07:44:49.942615596+01:00", 
 +        "Scope": "local", 
 +        "Driver": "bridge", 
 +        "EnableIPv6": false, 
 +        "IPAM":
 +            "Driver": "default", 
 +            "Options": null, 
 +            "Config":
 +                { 
 +                    "Subnet": "172.17.0.0/16", 
 +                    "Gateway": "172.17.0.1" 
 +                } 
 +            ] 
 +        }, 
 +        "Internal": false, 
 +        "Attachable": false, 
 +        "Ingress": false, 
 +        "ConfigFrom":
 +            "Network": "" 
 +        }, 
 +        "ConfigOnly": false, 
 +        "Containers":
 +            "2169360fcbfdbd6e68ea969a95edeb6fc42603c23ee42f03ceec286276519855":
 +                "Name": "resotest", 
 +                "EndpointID": "fc74e519d69b9a2112be959c92cda22b67671b52efbbd36fadf66097ccbb1271", 
 +                "MacAddress": "02:42:ac:11:00:03", 
 +                "IPv4Address": "172.17.0.3/16", 
 +                "IPv6Address": "" 
 +            }, 
 +            "ad672c3038245c25a36162d05820c21f7250557ac342582d0908d3ca33799e37":
 +                "Name": "mongo2", 
 +                "EndpointID": "adc15132fb73b57ab14e960feeff1b965321ada411be8535b715b103b941d8cc", 
 +                "MacAddress": "02:42:ac:11:00:02", 
 +                "IPv4Address": "172.17.0.2/16", 
 +                "IPv6Address": "" 
 +            } 
 +        }, 
 +        "Options":
 +            "com.docker.network.bridge.default_bridge": "true", 
 +            "com.docker.network.bridge.enable_icc": "true", 
 +            "com.docker.network.bridge.enable_ip_masquerade": "true", 
 +            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", 
 +            "com.docker.network.bridge.name": "docker0", 
 +            "com.docker.network.driver.mtu": "1500" 
 +        }, 
 +        "Labels": {} 
 +    } 
 +
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez ici que les conteneurs **mongo2** et **resotest** ne disposent pas de la même adresse que l'interface **docker0** de la machine hôte. Cependant les adresses se trouvent dans le même segment - **172.17.0.0/16** indiqué par la sortie **"Subnet": "172.17.0.0/16"**. 
 +</WRAP> 
 + 
 +Vous pouvez déconnecter un conteneur du réseau en utilisant la commande suivante : 
 + 
 +<code> 
 +root@debian9:~# docker network disconnect bridge resotest 
 +root@debian9:~# docker network inspect bridge 
 +
 +    { 
 +        "Name": "bridge", 
 +        "Id": "495b3db75b0d4bfcfc6da7c3e2af5f6addcdc227aa8b69b1e59a998be1819d12", 
 +        "Created": "2017-09-07T07:44:49.942615596+01:00", 
 +        "Scope": "local", 
 +        "Driver": "bridge", 
 +        "EnableIPv6": false, 
 +        "IPAM":
 +            "Driver": "default", 
 +            "Options": null, 
 +            "Config":
 +                { 
 +                    "Subnet": "172.17.0.0/16", 
 +                    "Gateway": "172.17.0.1" 
 +                } 
 +            ] 
 +        }, 
 +        "Internal": false, 
 +        "Attachable": false, 
 +        "Ingress": false, 
 +        "ConfigFrom":
 +            "Network": "" 
 +        }, 
 +        "ConfigOnly": false, 
 +        "Containers":
 +            "ad672c3038245c25a36162d05820c21f7250557ac342582d0908d3ca33799e37":
 +                "Name": "mongo2", 
 +                "EndpointID": "adc15132fb73b57ab14e960feeff1b965321ada411be8535b715b103b941d8cc", 
 +                "MacAddress": "02:42:ac:11:00:02", 
 +                "IPv4Address": "172.17.0.2/16", 
 +                "IPv6Address": "" 
 +            } 
 +        }, 
 +        "Options":
 +            "com.docker.network.bridge.default_bridge": "true", 
 +            "com.docker.network.bridge.enable_icc": "true", 
 +            "com.docker.network.bridge.enable_ip_masquerade": "true", 
 +            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", 
 +            "com.docker.network.bridge.name": "docker0", 
 +            "com.docker.network.driver.mtu": "1500" 
 +        }, 
 +        "Labels": {} 
 +    } 
 +
 +</code> 
 + 
 +Créez maintenant votre propre réseau ponté appelé **my-bridged-network** : 
 + 
 +<code> 
 +root@debian9:~# docker network create -d bridge --subnet 172.25.0.0/16 --gateway 172.25.0.1 my-bridged-network 
 +ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3 
 +root@debian9:~# docker network ls 
 +NETWORK ID          NAME                 DRIVER              SCOPE 
 +495b3db75b0d        bridge               bridge              local 
 +e1ed4de2f947        host                 host                local 
 +ceb7ba749393        my-bridged-network   bridge              local 
 +6bda460c97c6        none                 null                local              
 +</code> 
 + 
 +Bien évidement, ce réseau est actuellement vide : 
 + 
 +<code> 
 +root@debian9:~# docker network inspect my-bridged-network 
 +
 +    { 
 +        "Name": "my-bridged-network", 
 +        "Id": "ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3", 
 +        "Created": "2017-09-07T10:03:17.063730665+01:00", 
 +        "Scope": "local", 
 +        "Driver": "bridge", 
 +        "EnableIPv6": false, 
 +        "IPAM":
 +            "Driver": "default", 
 +            "Options": {}, 
 +            "Config":
 +                { 
 +                    "Subnet": "172.25.0.0/16", 
 +                    "Gateway": "172.25.0.1" 
 +                } 
 +            ] 
 +        }, 
 +        "Internal": false, 
 +        "Attachable": false, 
 +        "Ingress": false, 
 +        "ConfigFrom":
 +            "Network": "" 
 +        }, 
 +        "ConfigOnly": false, 
 +        "Containers": {}, 
 +        "Options": {}, 
 +        "Labels": {} 
 +    } 
 +
 +</code> 
 + 
 +Lancez maintenant deux conteneurs et consultez les informations concernant le réseau :  
 + 
 +<code> 
 +root@debian9:~# docker run -itd --name=centos1 centos 
 +9f36a628c72b383edfd4dc13ee4e4b2eaf5be0078d780f0334fcb8be0d977d0e 
 + 
 +root@debian9:~# docker run -itd --name=centos2 centos 
 +aaed3bc8e404ee1bccd6c87b39de32332940b5391514691fc70188edb17c1d7c 
 + 
 +root@debian9:~# docker inspect --format='{{json .NetworkSettings.Networks}}'  centos1 
 +{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"495b3db75b0d4bfcfc6da7c3e2af5f6addcdc227aa8b69b1e59a998be1819d12","EndpointID":"d7b87875688b45258fc867b6bb8b0a0592f5c5fa16857fe136e55b87b6698219","Gateway":"172.17.0.1","IPAddress":"172.17.0.3","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:03","DriverOpts":null}} 
 + 
 +root@debian9:~# docker inspect --format='{{json .NetworkSettings.Networks}}'  centos2 
 +{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"495b3db75b0d4bfcfc6da7c3e2af5f6addcdc227aa8b69b1e59a998be1819d12","EndpointID":"2bfe090dccef89495d437d8deba5765996a917544ab7fde28ef5199f4e907eb1","Gateway":"172.17.0.1","IPAddress":"172.17.0.4","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:04","DriverOpts":null}} 
 + 
 +root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos1 
 +172.17.0.3 
 + 
 +root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2 
 +172.17.0.4 
 +</code> 
 + 
 +Mettez le conteneur **centos1** dans le réseau **my-bridged-network** : 
 + 
 +<code> 
 +root@debian9:~# docker network connect my-bridged-network centos1 
 + 
 +root@debian9:~# docker network inspect my-bridged-network 
 +
 +    { 
 +        "Name": "my-bridged-network", 
 +        "Id": "ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3", 
 +        "Created": "2017-09-07T10:03:17.063730665+01:00", 
 +        "Scope": "local", 
 +        "Driver": "bridge", 
 +        "EnableIPv6": false, 
 +        "IPAM":
 +            "Driver": "default", 
 +            "Options": {}, 
 +            "Config":
 +                { 
 +                    "Subnet": "172.25.0.0/16", 
 +                    "Gateway": "172.25.0.1" 
 +                } 
 +            ] 
 +        }, 
 +        "Internal": false, 
 +        "Attachable": false, 
 +        "Ingress": false, 
 +        "ConfigFrom":
 +            "Network": "" 
 +        }, 
 +        "ConfigOnly": false, 
 +        "Containers":
 +            "9f36a628c72b383edfd4dc13ee4e4b2eaf5be0078d780f0334fcb8be0d977d0e":
 +                "Name": "centos1", 
 +                "EndpointID": "71e10e4e34ce8c42ef029e302f6ed372357f6fde8fd87fc2cbc1b14c2bdf6bb5", 
 +                "MacAddress": "02:42:ac:19:00:02", 
 +                "IPv4Address": "172.25.0.2/16", 
 +                "IPv6Address": "" 
 +            } 
 +        }, 
 +        "Options": {}, 
 +        "Labels": {} 
 +    } 
 +
 + 
 +root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos1 
 +172.17.0.3172.25.0.2 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez  que le conteneur **centos1** se trouve dans deux réseaux. 
 +</WRAP> 
 + 
 +Faites la même chose pour le conteneur **centos2** : 
 + 
 +<code> 
 +root@debian9:~# docker network connect my-bridged-network centos2 
 + 
 +root@debian9:~# docker network inspect my-bridged-network 
 +
 +    { 
 +        "Name": "my-bridged-network", 
 +        "Id": "ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3", 
 +        "Created": "2017-09-07T10:03:17.063730665+01:00", 
 +        "Scope": "local", 
 +        "Driver": "bridge", 
 +        "EnableIPv6": false, 
 +        "IPAM":
 +            "Driver": "default", 
 +            "Options": {}, 
 +            "Config":
 +                { 
 +                    "Subnet": "172.25.0.0/16", 
 +                    "Gateway": "172.25.0.1" 
 +                } 
 +            ] 
 +        }, 
 +        "Internal": false, 
 +        "Attachable": false, 
 +        "Ingress": false, 
 +        "ConfigFrom":
 +            "Network": "" 
 +        }, 
 +        "ConfigOnly": false, 
 +        "Containers":
 +            "9f36a628c72b383edfd4dc13ee4e4b2eaf5be0078d780f0334fcb8be0d977d0e":
 +                "Name": "centos1", 
 +                "EndpointID": "71e10e4e34ce8c42ef029e302f6ed372357f6fde8fd87fc2cbc1b14c2bdf6bb5", 
 +                "MacAddress": "02:42:ac:19:00:02", 
 +                "IPv4Address": "172.25.0.2/16", 
 +                "IPv6Address": "" 
 +            }, 
 +            "aaed3bc8e404ee1bccd6c87b39de32332940b5391514691fc70188edb17c1d7c":
 +                "Name": "centos2", 
 +                "EndpointID": "34f533622f134b995097f1d3e6ce935158c1e5644201f896b42336738a81819c", 
 +                "MacAddress": "02:42:ac:19:00:03", 
 +                "IPv4Address": "172.25.0.3/16", 
 +                "IPv6Address": "" 
 +            } 
 +        }, 
 +        "Options": {}, 
 +        "Labels": {} 
 +    } 
 +
 + 
 +root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2 
 +172.17.0.4172.25.0.3 
 +</code> 
 + 
 +Connectez-vous au conteneur **centos1** en lançant bash : 
 + 
 +<code> 
 +root@debian9:~# docker exec -it centos1 bash 
 +</code> 
 + 
 +Vérifiez que la connectivité fonctionne : 
 + 
 +<code> 
 +[root@9f36a628c72b /]# ping 172.25.0.3 
 +PING 172.25.0.3 (172.25.0.3) 56(84) bytes of data. 
 +64 bytes from 172.25.0.3: icmp_seq=1 ttl=64 time=0.100 ms 
 +64 bytes from 172.25.0.3: icmp_seq=2 ttl=64 time=0.050 ms 
 +64 bytes from 172.25.0.3: icmp_seq=3 ttl=64 time=0.050 ms 
 +^C 
 +--- 172.25.0.3 ping statistics --- 
 +3 packets transmitted, 3 received, 0% packet loss, time 1998ms 
 +rtt min/avg/max/mdev = 0.050/0.066/0.100/0.025 ms 
 +</code> 
 + 
 +Les options possibles au niveau de la gestion du réseau sont vaste. Voici deux exemples supplémentaires. 
 + 
 +Il est possible d'ajouter une adresse d'un serveur DNS au lancement d'un conteneur : 
 + 
 +<code> 
 +[root@9f36a628c72b /]# exit 
 +exit 
 +root@debian9:~# docker stop mongo2 
 +mongo2 
 +root@debian9:~# docker rm mongo2 
 +mongo2 
 +root@debian9:~# docker run -it --name mongo2 --dns 8.8.8.8 i2tch/mongodb2 bash 
 +root@735599480b45:/# cat /etc/resolv.conf  
 +search home 
 +nameserver 8.8.8.8 
 +root@735599480b45:/#  
 +</code> 
 + 
 +ou de passer une entrée pour le fichier **/etc/hosts** : 
 + 
 +<code> 
 +root@735599480b45:/# exit 
 +exit 
 +root@debian9:~# docker stop mongo2 
 +mongo2 
 +root@debian9:~# docker rm mongo2 
 +mongo2 
 +root@debian9:~# docker run -it --name mongo2 --add-host mickeymouse:127.0.0.1 i2tch/mongodb2 bash 
 +root@718e7eab814f:/# cat /etc/hosts 
 +127.0.0.1 localhost 
 +::1 localhost ip6-localhost ip6-loopback 
 +fe00::0 ip6-localnet 
 +ff00::0 ip6-mcastprefix 
 +ff02::1 ip6-allnodes 
 +ff02::2 ip6-allrouters 
 +127.0.0.1 mickeymouse 
 +172.17.0.2 718e7eab814f 
 +</code> 
 + 
 +===Host=== 
 + 
 +Ce type de réseau est utilisé dans le cas où le réseau ne doit pas être isolé de l'hôte tout en isolant les autres aspects du conteneur. Les conteneurs utilisent la même interface que l'hôte en prenant la même adresse IP que la machine hôte. 
 + 
 +Dans le cas de la machine virtuelle, l'adresse IP de l'interface connectée au réseau local est **10.0.2.60** : 
 + 
 +<code> 
 +root@debian9:~# ip addr show ens18 
 +2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
 +    link/ether 08:00:27:2e:77:01 brd ff:ff:ff:ff:ff:ff 
 +    inet 10.0.2.60/24 brd 10.0.2.255 scope global dynamic ens18 
 +       valid_lft 83772sec preferred_lft 83772sec 
 +    inet6 fe80::a00:27ff:fe2e:7701/64 scope link  
 +       valid_lft forever preferred_lft forever 
 +</code> 
 + 
 +Démarrez un conteneur à partir de l'image **centos** dans un réseau de type **host** : 
 + 
 +<code> 
 +root@debian9:~# docker run -it --rm --network host --name centos3 centos bash 
 +[root@debian9 /]# ip a 
 +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 
 +    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
 +    inet 127.0.0.1/8 scope host lo 
 +       valid_lft forever preferred_lft forever 
 +    inet6 ::1/128 scope host  
 +       valid_lft forever preferred_lft forever 
 +2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
 +    link/ether 08:00:27:2e:77:01 brd ff:ff:ff:ff:ff:ff 
 +    inet 10.0.2.60/24 brd 10.0.2.255 scope global dynamic ens18 
 +       valid_lft 82102sec preferred_lft 82102sec 
 +    inet6 fe80::a00:27ff:fe2e:7701/64 scope link  
 +       valid_lft forever preferred_lft forever 
 +3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default  
 +    link/ether 02:42:38:f1:e7:ee brd ff:ff:ff:ff:ff:ff 
 +    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 
 +       valid_lft forever preferred_lft forever 
 +    inet6 fe80::42:38ff:fef1:e7ee/64 scope link  
 +       valid_lft forever preferred_lft forever 
 +[root@debian9 /]# hostname 
 +debian9 
 +[root@debian9 /]# exit 
 +</code> 
 + 
 +Le but de ce type de réseau est de permettre l'accès à des services dans le conteneur directement à partir de l'adresse IP de l'hôte Docker. Par exemple, un nginx dans le conteneur pourrait être joint directement sur 10.0.2.60:80 **sans** avoir besoin de passer par l'exposition du port.  
 + 
 +Pour cette raison, dans le cas de l'option **-p** utilisé dans la cas du réseau **host**, cette option n'est pas prise en compte et produit l'avertissement **WARNING: Published ports are discarded when using host network mode**. L'utilité majeure donc du réseau **host** se trouve dans le cas où de multiples ports dans le conteneur doivent être joignables. 
 + 
 +<WRAP center round important 50%> 
 +**Important** : Notez  que le réseau de type **host** ne fonctionne que sous Linux. Il est donc incompatible avec Docker Desktop pour Mac, Docker Desktop pour Windows et Docker EE pour Windows Server. 
 +</WRAP> 
 + 
 +===None=== 
 + 
 +Ce type de réseau est utilisé principalement dans le cas de l'utilisation d'un plugin réseau disponible dans le **[[https://hub.docker.com/search/?category=network&q=&type=plugin|Docker Hub]]**. 
 + 
 +Il est donc possible de lancer un conteneur totalement étanche grâce au réseau **none** : 
 + 
 +<code> 
 +root@718e7eab814f:/# exit 
 +exit 
 +root@debian9:~# docker stop mongo2 
 +mongo2 
 +root@debian9:~# docker rm mongo2 
 +mongo2 
 +root@debian9:~# docker run -it --name mongo2 --network none i2tch/mongodb2 bash 
 +root@332aa9930f30:/#  
 +</code> 
 + 
 +===Liens=== 
 + 
 +Le mécanisme des liens entre conteneurs est très puissant et permet d'atteindre un autre conteneur facilement à condition que les deux conteneurs soient dans le même réseau. Créez donc un conteneur dénommé **centos3** qui est lié au conteneur **centos2** qu'il connait aussi sous l'alias **alias** : 
 + 
 +<code> 
 +root@332aa9930f30:/# exit 
 +exit 
 + 
 +root@debian9:~# docker run -itd --name centos3 --link centos2:alias centos 
 +6a315259b2946c3bf2bb69f608cbe910d87edaadedb4f805e7a4dbf6af1eb916 
 + 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES 
 +6a315259b294        centos              "/bin/bash"              33 seconds ago      Up 32 seconds                                     centos3 
 +332aa9930f30        i2tch/mongodb2      "docker-entrypoint..."   3 minutes ago       Exited (127) 39 seconds ago                       mongo2 
 +aaed3bc8e404        centos              "/bin/bash"              16 minutes ago      Up 16 minutes                                     centos2 
 +9f36a628c72b        centos              "/bin/bash"              16 minutes ago      Up 16 minutes                                     centos1 
 +2169360fcbfd        centos              "/bin/bash"              20 minutes ago      Up 20 minutes                                     resotest 
 +ea239635e141        testcache           "more /tmp/moment"       7 hours ago         Exited (0) 7 hours ago                            test1 
 +21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   7 hours ago         Exited (137) 6 hours ago                          myDocker 
 +bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                       27017/tcp           mongo1 
 +f5b45072b831        i2tch/mongodb       "bash"                   19 hours ago        Exited (137) 6 hours ago                          mongo 
 +9731a48f126a        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 6 hours ago                            cocky_gates 
 +eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                           adoring_yonath 
 +cffb4456e9c4        ubuntu              "/bin/bash"              20 hours ago        Exited (0) 20 hours ago                           i2tch 
 + 
 +root@debian9:~# docker exec -it centos3 bash 
 + 
 +[root@6a315259b294 /]# ping centos2 
 +PING alias (172.17.0.4) 56(84) bytes of data. 
 +64 bytes from alias (172.17.0.4): icmp_seq=1 ttl=64 time=0.116 ms 
 +64 bytes from alias (172.17.0.4): icmp_seq=2 ttl=64 time=0.069 ms 
 +64 bytes from alias (172.17.0.4): icmp_seq=3 ttl=64 time=0.068 ms 
 +64 bytes from alias (172.17.0.4): icmp_seq=4 ttl=64 time=0.070 ms 
 +^C 
 +--- alias ping statistics --- 
 +4 packets transmitted, 4 received, 0% packet loss, time 2999ms 
 +rtt min/avg/max/mdev = 0.068/0.080/0.116/0.023 ms 
 + 
 +[root@6a315259b294 /]# cat /etc/hosts 
 +127.0.0.1 localhost 
 +::1 localhost ip6-localhost ip6-loopback 
 +fe00::0 ip6-localnet 
 +ff00::0 ip6-mcastprefix 
 +ff02::1 ip6-allnodes 
 +ff02::2 ip6-allrouters 
 +172.17.0.4 alias aaed3bc8e404 centos2 
 +172.17.0.2 6a315259b294 
 + 
 +[root@6a315259b294 /]# exit 
 +exit 
 + 
 +root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos3 
 +172.17.0.2 
 +</code> 
 + 
 +Notez cependant qu le lien est unidirectionnel : 
 + 
 +<code> 
 +root@debian9:~# docker exec -it centos2 bash 
 + 
 +[root@aaed3bc8e404 /]# ping centos3 
 +ping: centos3: Name or service not known 
 + 
 +[root@aaed3bc8e404 /]# ping 172.17.0.2 
 +PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 
 +64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.054 ms 
 +64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.035 ms 
 +64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.051 ms 
 +64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.071 ms 
 +^C 
 +--- 172.17.0.2 ping statistics --- 
 +4 packets transmitted, 4 received, 0% packet loss, time 2997ms 
 +rtt min/avg/max/mdev = 0.035/0.052/0.071/0.015 ms 
 + 
 +[root@aaed3bc8e404 /]#  
 +</code> 
 + 
 +Dans le cas ci-dessus, **centos2** peut atteindre **centos3** en utilisant l'adresse IP **172.17.0.2** car **centos2** se trouve dans les deux réseaux avec les adresses IP 172.17.0.4 et 172.25.0.3 
 + 
 +<code> 
 +[root@aaed3bc8e404 /]# exit 
 +exit 
 +root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2 
 +172.17.0.4172.25.0.3 
 +</code>
  
-=====LAB #9 - Lancer Wordpress dans un container=====+====2.2 - Lancer Wordpress dans un container====
  
 Créez le répertoire ~/wordpress et placez-vous dedans : Créez le répertoire ~/wordpress et placez-vous dedans :
Ligne 130: Ligne 1052:
  
 <code> <code>
-root@debian9:~/wordpress# docker run -e WORDPRESS_DB_PASSWORD=fenestros --name wordpress --link wordpressdb:mysql -p 10.0.2.15:80:80 -v "$PWD/html":/var/www/html -d wordpress+root@debian9:~/wordpress# docker run -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=fenestros --name wordpress --link wordpressdb:mysql -p 10.0.2.60:80:80 -v "$PWD/html":/var/www/html -d wordpress
 Unable to find image 'wordpress:latest' locally Unable to find image 'wordpress:latest' locally
 latest: Pulling from library/wordpress latest: Pulling from library/wordpress
Ligne 163: Ligne 1085:
 root@debian9:~/wordpress# docker ps root@debian9:~/wordpress# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
-9eb2f7fbfbd2        wordpress           "docker-entrypoint.s…"   2 minutes ago       Up About a minute   10.0.2.15:80->80/tcp   wordpress+9eb2f7fbfbd2        wordpress           "docker-entrypoint.s…"   2 minutes ago       Up About a minute   10.0.2.60:80->80/tcp   wordpress
 67831dacf002        mariadb:latest      "docker-entrypoint.s…"   9 minutes ago       Up 8 minutes        3306/tcp               wordpressdb 67831dacf002        mariadb:latest      "docker-entrypoint.s…"   9 minutes ago       Up 8 minutes        3306/tcp               wordpressdb
 </code> </code>
Ligne 170: Ligne 1092:
  
 <code> <code>
-root@debian9:~/wordpress# lynx --dump http://10.0.2.15+root@debian9:~/wordpress# lynx --dump http://10.0.2.60
    [1]WordPress    [1]WordPress
    Select a default language [English (United States)________]    Select a default language [English (United States)________]
Ligne 196: Ligne 1118:
 </code> </code>
  
-=====LAB #10 - Gestion d'une Architecture de Microservices=====+====2.3 - Gestion d'une Architecture de Microservices====
  
 Vous allez mettre en place une application simple sous forme de microservices, développé par Docker et appelé **demo-voting-app**,  : Vous allez mettre en place une application simple sous forme de microservices, développé par Docker et appelé **demo-voting-app**,  :
Ligne 216: Ligne 1138:
 <code> <code>
 docker run -d --name=redis redis docker run -d --name=redis redis
-docker run -d --name=db postgres:9.4+docker run -d --name=db -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres postgres:9.4 
 docker run -d --name=vote -p 5000:80 --link redis:redis dockersamples/examplevotingapp_vote docker run -d --name=vote -p 5000:80 --link redis:redis dockersamples/examplevotingapp_vote
 docker run -d --name=result -p 5001:80 --link db:db dockersamples/examplevotingapp_result docker run -d --name=result -p 5001:80 --link db:db dockersamples/examplevotingapp_result
Ligne 224: Ligne 1146:
 Cette solution utilise un réseau de type Bridge. Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant Docker. Les conteneurs ne peuvent communiquer qu'entre eux et ils ne sont pas accessibles depuis l'extérieur. Pour que les conteneurs sur le réseau puissent communiquer ou être accessibles du monde extérieur, il faut configurer le mappage de port. Cette solution utilise un réseau de type Bridge. Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant Docker. Les conteneurs ne peuvent communiquer qu'entre eux et ils ne sont pas accessibles depuis l'extérieur. Pour que les conteneurs sur le réseau puissent communiquer ou être accessibles du monde extérieur, il faut configurer le mappage de port.
  
-=====Arrêter la Machine Virtuelle===== 
  
-====Formations en FFP====+=====LAB #3 - Superviser les Conteneurs=====
  
-Utilisez l'interface graphique de VirtualBox et arrêtez la machine virtuelle **Debian_9**.+====3.1 - Les Journaux====
  
-Restaurez ensuite la machine virtuelle **Debian_9** vers son état d'origine en revenant à **snapshot1**.+Consultez les logs d'un conteneur :
  
-====Formations en FAD====+<code> 
 +root@debian9:~# docker logs mongo2 
 +root@332aa9930f30:/# ip addr 
 +bash: ip: command not found 
 +root@332aa9930f30:/# ip address 
 +bash: ip: command not found 
 +root@332aa9930f30:/# ifconfig 
 +bash: ifconfig: command not found 
 +root@332aa9930f30:/# ls 
 +bin  boot  core  data  dev  docker-entrypoint-initdb.d entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run sbin  selinux  srv  sys  tmp  usr  var 
 +root@332aa9930f30:/# which ip 
 +root@332aa9930f30:/# which ifconfig 
 +root@332aa9930f30:/# docker run -itd --name centos3 --link centos2:alias centos 
 +bash: docker: command not found 
 +root@332aa9930f30:/# exit 
 +exit 
 +</code>
  
-Utilisez la commande suivante pour arrêter la machine virtuelle **Debian_9** :+====3.2 - Les Processus==== 
 + 
 +Consultez les processus d'un conteneur :
  
 <code> <code>
-desktop@server16:~$ VBoxManage controlvm Debian_9 poweroff +root@debian9:~# docker top centos3 
-0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%+UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD 
 +root                31073               31060                                 10:20               pts/0               00:00:00            /bin/bash
 </code> </code>
  
-Restaurez l'état d'origine la machine virtuelle **Debian_9** :+====3.3 - L'Activité en Continu==== 
 + 
 +Pour voir l'activité d'un conteneur, utilisez la commande suivante :
  
 <code> <code>
-desktop@server16:~$ VBoxManage snapshot Debian_9 restorecurrent +root@debian9:~# docker stats centos3 
-Restoring snapshot 'snapshot1' (22df4e22-876a-4e94-88a8-8422a3a6b158) +CONTAINER           CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS 
-0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%+centos3             0.00              0B / 0B             0.00              4.37kB / 952B       61.4kB / 0B         0
 </code> </code>
  
 ----- -----
  
-=====ChangeLog===== +Copyright © 2022 Hugh Norris.
- +
-====2020.01==== +
- +
-Première version en 2020. +
- +
-====2020.02==== +
- +
-  * **Added** - LAB #10 - Gestion d'une Architecture de Microservices +
- +
------ +
-<html> +
-<div align="center"> +
-Copyright © 2020 Hugh NORRIS +
-</div> +
-</html>+
Menu