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:docker2:drf02 [2021/04/12 12:15] adminelearning:workbooks:docker2:drf02 [2022/04/29 07:57] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2021.01**+Version : **2022.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======DOF203 - Gestion du Réseau avec Swarm======+======DOF203 - Gestion du Réseau avec Docker======
  
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **DOF203 - Gestion du Réseau avec Swarm**+  * **DOF203 - Gestion du Réseau avec Docker**
     * Contenu du Module     * Contenu du Module
     * L'Approche Réseau Docker     * L'Approche Réseau Docker
-    * LAB #1 - Gestion du Réseau overlay +    * LAB #1 - Les Réseaux Docker ayant un Scope Local 
-      * 1.1 - Création d'un Réseau overlay +      * 1.1 - Bridge 
-      * 1.2 - Création d'un Service +        * Liens 
-      * 1.3 - Déplacer le Service vers un autre Réseau overlay +      * 1.2 - Host 
-      * 1.4 - DNS container discovery +      * 1.3 - None 
-      * 1.5 - Création d'un Réseau overlay Personnalisé +      * 1.4 - Lancer Wordpress dans un container 
-    * LAB #- Gestion de l'Architecture des Microservices +      * 1.5 - Gestion d'une Architecture de Microservices 
-      * 2.1 - Rappel - Mise en Place avec Docker avec un réseau Bridge et des liens +    * LAB #2 - Gestion du Réseau overlay 
-      * 2.2 - Mise en Place avec Docker Swarm avec des réseaux Overlay+      * 2.1 - Création d'un Réseau overlay 
 +      * 2.2 - Création d'un Service 
 +      * 2.3 - Déplacer le Service vers un autre Réseau overlay 
 +      * 2.4 - DNS container discovery 
 +      * 2.5 - Création d'un Réseau overlay Personnalisé 
 +    * LAB #- Gestion de l'Architecture des Microservices 
 +      * 3.1 - Mise en Place avec Docker Swarm avec des réseaux Overlay
  
 =====L'Approche Réseau Docker===== =====L'Approche Réseau Docker=====
Ligne 35: Ligne 41:
 {{ :elearning:workbooks:docker:docker-3.jpg?direct&600 |image}} {{ :elearning:workbooks:docker:docker-3.jpg?direct&600 |image}}
  
-En plus des réseaux **bridge**, **host** et **none**, déjà vus dans le module **DOF103 - Gestion des Volumes, du Réseau et des Ressources**, Docker propose deux autres types de réseaux, à savoir **overlay** et **macvlan**. Ce module concerne overlay. Pour plus d'informations concernant le type **macvlan**, consultez le site de la documentation de Docker **[[https://docs.docker.com/network/network-tutorial-macvlan/|ici]]**.+=====LAB #1 - Les Réseaux Docker ayant un Scope Local===== 
 + 
 +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> 
 + 
 +====1.1 - 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": "" 
 +            }, 
 +        }, 
 +        "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 le conteneur **resotest** ne dispose 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":  
 +        }, 
 +        "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 resotest 
 +mongo2 
 +root@debian9:~# docker rm resotest 
 +mongo2 
 +root@debian9:~# docker run -it --name=resotest --dns 8.8.8.8 centos 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 resotest 
 +mongo2 
 +root@debian9:~# docker rm resotest 
 +mongo2 
 +root@debian9:~# docker run -it --name=resotest --add-host mickeymouse:127.0.0.1 centos 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> 
 + 
 +===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 transmitted4 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> 
 + 
 +====1.2 - 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> 
 + 
 +====1.3 - 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> 
 + 
 +====1.4 - Lancer Wordpress dans un container==== 
 + 
 +Créez le répertoire ~/wordpress et placez-vous dedans : 
 + 
 +<code> 
 +root@debian9:~# mkdir ~/wordpress && cd ~/wordpress 
 +</code> 
 + 
 +Créez un conteneur dénommé **wordpressdb** à partir de l'image **mariadb:latest** : 
 + 
 +<code> 
 +root@debian9:~/wordpress# docker run -e MYSQL_ROOT_PASSWORD=fenestros -e MYSQL_DATABASE=wordpress --name wordpressdb -v "$PWD/database":/var/lib/mysql -d mariadb:latest 
 +Unable to find image 'mariadb:latest' locally 
 +latest: Pulling from library/mariadb 
 +f2b6b4884fc8: Pull complete  
 +26d8bdca4f3e: Pull complete  
 +74f09e820cce: Pull complete  
 +5390f1fe4554: Pull complete  
 +3d3f1706a741: Pull complete  
 +2942f66426ea: Pull complete  
 +97ee11d39c75: Pull complete  
 +590c46ef722b: Pull complete  
 +32eb4b9666e5: Pull complete  
 +fc883f98a064: Pull complete  
 +bb8bee61bc1e: Pull complete  
 +Digest: sha256:6135f5b851e7fe263dcf0edf3480cdab1ab28c4287e867c5d83fbe967412ea14 
 +Status: Downloaded newer image for mariadb:latest 
 +67831dacf002bdc21dc79b0e8483f538235d00ddd2e8aae175ef3ebf189ae14d 
 +</code> 
 + 
 +Vérifiez que le conteneur fonctionne : 
 + 
 +<code> 
 +root@debian9:~/wordpress# docker ps 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES 
 +67831dacf002        mariadb:latest      "docker-entrypoint.s…"   About a minute ago   Up 45 seconds       3306/tcp            wordpressdb 
 +</code> 
 + 
 +Créez un conteneur appellé **wordpress** lié au conteneur wordpressdb : 
 + 
 +<code> 
 +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 
 +latest: Pulling from library/wordpress 
 +2a72cbf407d6: Pull complete  
 +273cd543cb15: Pull complete  
 +ec5ac8875de7: Pull complete  
 +9106e19b56c1: Pull complete  
 +ee2f70ac7c7d: Pull complete  
 +7257ad6985e8: Pull complete  
 +18f5c2055da2: Pull complete  
 +85293a6fdd80: Pull complete  
 +9e797eeb0c14: Pull complete  
 +f16178842884: Pull complete  
 +13899c06d3f8: Pull complete  
 +70c27fe4c3c5: Pull complete  
 +d32c8ad2d9d7: Pull complete  
 +07fe445494e6: Pull complete  
 +63b8de7b32fe: Pull complete  
 +e4b721952e22: Pull complete  
 +d9ede6dd6f74: Pull complete  
 +0af4f74bfd92: Pull complete  
 +e4e7c47b969f: Pull complete  
 +69aff47f3112: Pull complete  
 +Digest: sha256:201d004f55669dd2c0884f00fc44145fb0da8cafa465bf22cbaacecaf81138d4 
 +Status: Downloaded newer image for wordpress:latest 
 +9eb2f7fbfbd25307ed2f463c7eb3bef40bfa556174e68750bb76b8d032546129 
 +</code> 
 + 
 +Vérifiez que le conteneur fonctionne : 
 + 
 +<code> 
 +root@debian9:~/wordpress# docker ps 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES 
 +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 
 +</code> 
 + 
 +Vérifiez que le Wordpress fonctionne : 
 + 
 +<code> 
 +root@debian9:~/wordpress# lynx --dump http://10.0.2.60 
 +   [1]WordPress 
 +   Select a default language [English (United States)________] 
 + 
 +   Continue 
 + 
 +References 
 + 
 +   1. https://wordpress.org/ 
 + 
 +root@debian9:~/wordpress# docker inspect wordpress | grep IPAddress 
 +            "SecondaryIPAddresses": null, 
 +            "IPAddress": "172.17.0.3", 
 +                    "IPAddress": "172.17.0.3", 
 +                     
 +root@debian9:~/wordpress# lynx --dump http://172.17.0.3 
 +   [1]WordPress 
 +   Select a default language [English (United States)________] 
 + 
 +   Continue 
 + 
 +References 
 + 
 +   1. https://wordpress.org/ 
 +</code> 
 + 
 +====1.5 - 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**, 
 + 
 +{{ :elearning:workbooks:debian:6:avance:app.png?direct&400 |}} 
 + 
 +Dans cette application le conteneur **voting-app** permet de voter pour des **chats** ou des **chiens**. Cette application tourne sous Python et fournit une interface HTML : 
 + 
 +{{ :elearning:workbooks:debian:6:avance:kubernetes15.png?direct&800 |}} 
 + 
 +Lors de la votele résultat de celle-ci est stocké dans **Redis** dans une base de données en mémoire. Le résultat est ensuite passé au conteneur **Worker** qui tourne sous .NET et qui met à jour la base de données persistante dans le conteneur **db** qui tourne sous PostgreSQL. 
 + 
 +L'application **result-app** qui tourne sous NodeJS lit ensuite la table dans la base de données PostgreSQL et affiche le résultat sous forme HTML : 
 + 
 +{{ :elearning:workbooks:debian:6:avance:kubernetes16.png?direct&800 |}} 
 + 
 +Cette application peut être mise en place sous docker avec les commandes suivantes : 
 + 
 +<code> 
 +docker run -d --name=redis redis 
 +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=result -p 5001:80 --link db:db dockersamples/examplevotingapp_result 
 +docker run -d --name=worker --link db:db --link redis:redis dockersamples/examplevotingapp_worker 
 +</code> 
 + 
 +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. 
 + 
 +Ouvrez le navigateur web **Firefox** ou **Chrome** dans **votre** machine et saisissez l'URL selon le tableau ci-dessous : 
 + 
 +^ ID ^ URL ( Notez http: et non https: ) ^  
 +| Trainee10 | http://compute01.ittraining.network | 
 +| Trainee11 | http://compute02.ittraining.network | 
 +| Trainee12 | http://compute03.ittraining.network | 
 +| Trainee13 | http://compute04.ittraining.network | 
 +| Trainee14 | http://compute05.ittraining.network | 
 +| Trainee15 | http://compute06.ittraining.network | 
 +| Trainee16 | http://compute07.ittraining.network | 
 +| Trainee17 | http://compute08.ittraining.network |  
 +| Trainee18 | http://compute09.ittraining.network | 
 +| Trainee19 | http://compute10.ittraining.network | 
 +| Trainee20 | http://compute01.ittraining.network | 
 +| Trainee21 | http://compute02.ittraining.network | 
 +| Trainee22 | http://compute03.ittraining.network | 
 +| Trainee23 | http://compute04.ittraining.network | 
 +| Trainee24 | http://compute05.ittraining.network | 
 +| Trainee25 | http://compute06.ittraining.network | 
 +| Trainee26 | http://compute07.ittraining.network | 
 +| Trainee27 | http://compute08.ittraining.network |  
 +| Trainee28 | http://compute09.ittraining.network | 
 +| Trainee29 | http://compute10.ittraining.network | 
 + 
 +Dans la boîte de connexion d'Apache Guacamole, entrez votre ID **traineeXX** et le mot de passe qui vous a été fourni par votre formateur.  
 + 
 +Cliquez sur la connexion **TraineeXX_VNC** et testez ensuite votre application en utilisant le navigateur web de la machine virtuelle. 
 + 
 +=====LAB #2 - Gestion du Réseau overlay===== 
 + 
 +En plus des réseaux **bridge**, **host** et **none**, Docker propose deux autres types de réseaux, à savoir **overlay** et **macvlan**. Ce module concerne overlay. Pour plus d'informations concernant le type **macvlan**, consultez le site de la documentation de Docker **[[https://docs.docker.com/network/network-tutorial-macvlan/|ici]]**.
  
 Comme son nom indique, un réseau overlay est un réseau qui se positionne au-dessus du réseau des hôtes. Lors de la création d'un réseau overlay, celui-ci n'est disponible par défaut qu'aux services swarm. Par contre il est possible de connecter des conteneurs autonomes au réseau overlay si l'option **--attachable** est spécifiée lors de sa création. Ce type d'utilisation du réseau overlay n'est pas recommandé par Docker qui dit que le support de cette fonctionnalité pourrait être retiré. Comme son nom indique, un réseau overlay est un réseau qui se positionne au-dessus du réseau des hôtes. Lors de la création d'un réseau overlay, celui-ci n'est disponible par défaut qu'aux services swarm. Par contre il est possible de connecter des conteneurs autonomes au réseau overlay si l'option **--attachable** est spécifiée lors de sa création. Ce type d'utilisation du réseau overlay n'est pas recommandé par Docker qui dit que le support de cette fonctionnalité pourrait être retiré.
Ligne 45: Ligne 744:
 </WRAP> </WRAP>
  
-=====LAB #1 - Gestion du Réseau overlay===== +Commencez par re-créer un swarm en utilisant les machines virtuelles **manager**, **worker1** et **worker2** :
- +
-Commencez par re-créer un swarm :+
  
 <code> <code>
Ligne 60: Ligne 757:
  
     docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377     docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377
- 
-To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. 
-root@manager:~# exit 
-trainee@manager:~# exit 
-</code> 
- 
-ou 
- 
-<code> 
-trainee@traineeXX:~$ ssh -l trainee 10.0.2.42 
-... 
-root@manager:~# docker swarm leave 
-Node left the swarm. 
-root@manager:~# docker swarm init --advertise-addr 10.0.2.42 
-Swarm initialized: current node (tpn1zsk20sfsfafmk2cvefqjc) is now a manager. 
- 
-To add a worker to this swarm, run the following command: 
- 
-    docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.42:2377 
  
 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Ligne 93: Ligne 771:
 Node left the swarm. Node left the swarm.
 root@worker1:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377 root@worker1:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377
-This node joined a swarm as a worker. 
-root@worker1:~# exit 
-trainee@worker1:~# exit 
-</code> 
- 
-ou 
- 
-<code> 
-trainee@traineeXX:~$ ssh -l trainee 10.0.2.43 
-... 
-root@worker1:~# docker swarm leave 
-Node left the swarm. 
-root@worker1:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.42:2377 
 This node joined a swarm as a worker. This node joined a swarm as a worker.
 root@worker1:~# exit root@worker1:~# exit
Ligne 119: Ligne 784:
 Node left the swarm. Node left the swarm.
 root@worker2:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377 root@worker2:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377
-This node joined a swarm as a worker. 
-root@worker2:~# exit 
-trainee@worker2:~# exit 
-</code> 
- 
-ou : 
- 
-<code> 
-trainee@traineeXX:~$ ssh -l trainee 10.0.2.44 
-... 
-root@worker2:~# docker swarm leave 
-Node left the swarm. 
-root@worker2:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.42:2377 
 This node joined a swarm as a worker. This node joined a swarm as a worker.
 root@worker2:~# exit root@worker2:~# exit
Ligne 141: Ligne 793:
 <code> <code>
 trainee@traineeXX:~$ ssh -l trainee 10.0.2.62 trainee@traineeXX:~$ ssh -l trainee 10.0.2.62
-... 
-root@manager:~# docker node ls 
-ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION 
-b85hxlixbr1mh1txd1hrfe4us *   manager.i2tch.loc   Ready               Active              Leader              19.03.4 
-4sui75vvdhmet4qvt0zbvzlzl     worker1.i2tch.loc   Ready               Active                                  19.03.4 
-lbjtg5o9kw3x6xg7frm07jfuw     worker2.i2tch.loc   Ready               Active                                  19.03.4 
-root@manager:~# docker node ls --filter role=manager 
-ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION 
-b85hxlixbr1mh1txd1hrfe4us *   manager.i2tch.loc   Ready               Active              Leader              19.03.4 
-root@manager:~# docker node ls --filter role=worker 
-ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION 
-4sui75vvdhmet4qvt0zbvzlzl     worker1.i2tch.loc   Ready               Active                                  19.03.4 
-lbjtg5o9kw3x6xg7frm07jfuw     worker2.i2tch.loc   Ready               Active                                  19.03.4 
-</code> 
- 
-ou : 
- 
-<code> 
-trainee@traineeXX:~$ ssh -l trainee 10.0.2.42 
 ... ...
 root@manager:~# docker node ls root@manager:~# docker node ls
Ligne 195: Ligne 828:
 </WRAP> </WRAP>
  
-====1.- Création d'un Réseau overlay====+====2.- Création d'un Réseau overlay====
  
 A partir du Manager, créez un réseau de type overlay appelé **nginx-net** : A partir du Manager, créez un réseau de type overlay appelé **nginx-net** :
Ligne 212: Ligne 845:
 </code> </code>
  
-====1.2 - Création d'un Service====+====2.2 - Création d'un Service====
  
 Créez un service nginx qui utilise le réseau **nginx-net** : Créez un service nginx qui utilise le réseau **nginx-net** :
Ligne 377: Ligne 1010:
 </WRAP> </WRAP>
  
-====1.3 - Déplacer le Service vers un autre Réseau overlay====+====2.3 - Déplacer le Service vers un autre Réseau overlay====
  
 Consultez le réseau overlay **nginx-net** sur les trois nœuds : Consultez le réseau overlay **nginx-net** sur les trois nœuds :
Ligne 1191: Ligne 1824:
 </code> </code>
  
-=====LAB #- Gestion d'une Architecture de Microservices=====+=====LAB #- Gestion d'une Architecture de Microservices=====
  
 Vous allez mettre en place une application simple, appelé **demo-voting-app** et développé par Docker, sous forme de microservices : Vous allez mettre en place une application simple, appelé **demo-voting-app** et développé par Docker, sous forme de microservices :
Ligne 1207: Ligne 1840:
 {{ :elearning:workbooks:debian:6:avance:kubernetes16.png?direct&800 |}} {{ :elearning:workbooks:debian:6:avance:kubernetes16.png?direct&800 |}}
  
-Ouvrez le navigateur web **Firefox** ou **Chrome** dans **votre** machine et saisissez l'URL selon le tableau ci-dessous : +====3.1 - Mise en Place avec Docker Swarm avec des réseaux Overlay====
- +
-^ ID ^ URL ( Notez http: et non https: ) ^  +
-| Trainee10 | http://compute01.ittraining.network | +
-| Trainee11 | http://compute02.ittraining.network | +
-| Trainee12 | http://compute03.ittraining.network | +
-| Trainee13 | http://compute04.ittraining.network | +
-| Trainee14 | http://compute05.ittraining.network | +
-| Trainee15 | http://compute06.ittraining.network | +
-| Trainee16 | http://compute07.ittraining.network | +
-| Trainee17 | http://compute08.ittraining.network |  +
-| Trainee18 | http://compute09.ittraining.network | +
-| Trainee19 | http://compute10.ittraining.network | +
-| Trainee20 | http://compute01.ittraining.network | +
-| Trainee21 | http://compute02.ittraining.network | +
-| Trainee22 | http://compute03.ittraining.network | +
-| Trainee23 | http://compute04.ittraining.network | +
-| Trainee24 | http://compute05.ittraining.network | +
-| Trainee25 | http://compute06.ittraining.network | +
-| Trainee26 | http://compute07.ittraining.network | +
-| Trainee27 | http://compute08.ittraining.network |  +
-| Trainee28 | http://compute09.ittraining.network | +
-| Trainee29 | http://compute10.ittraining.network | +
- +
-Dans la boîte de connexion d'Apache Guacamole, entrez votre ID TraineeXX et le mot de passe qui vous a été fourni par votre formateur. Retournez ensuite à votre connexion SSH. +
- +
-====2.1 - Rappel - Mise en Place avec Docker avec un réseau Bridge et des liens==== +
- +
-Cette application pourrait être mise en place sous docker avec les commandes suivantes : +
- +
-<code> +
-docker run -d --name=redis redis +
-docker run -d --name=db postgres:9.4 +
-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=worker --link db:db ---link redis:redis dockersamples/examplevotingapp_worker +
-</code> +
- +
-Par contre, Docker annonce le retrait éventuel de l'option **--lien** et indique qu'il vaudrait mieux utiliser des réseaux pour assurer la communication entre les conteneurs : +
- +
-"Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link. One feature that user-defined networks do not support that you can do with --link is sharing environment variables between containers. However, you can use other mechanisms such as volumes to share environment variables between containers in a more controlled way." +
- +
-Deuxièmement, 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. +
- +
-====2.2 - Mise en Place avec Docker Swarm avec des réseaux Overlay====+
  
 Cette application peut être mise en place sous docker swarm avec avec la commande **docker stack**. Un **stack** est un groupe de services. Premièrement, vérifiez l'état du Swarm : Cette application peut être mise en place sous docker swarm avec avec la commande **docker stack**. Un **stack** est un groupe de services. Premièrement, vérifiez l'état du Swarm :
Ligne 1393: Ligne 1982:
 La clef **deploy** permet de spécifier des options lors du déploiement du service : La clef **deploy** permet de spécifier des options lors du déploiement du service :
  
-  * **mode** - Il existe deux types de services. **Replicated** où on spécifie le nombre d'instances que Docker doit mettre en place sur les conteneurs **disponibles** et **Global** qui implique que Docker démarrera une instance du service sur chaque conteneur chaque fois qu'un conteneur devient disponible.+  * **mode** - Il existe deux types de services. **Replicated** où on spécifie le nombre d'instances que Docker doit mettre en place sur les hôtes **disponibles** en fonction de la valeur de **replicas** et **Global** qui implique que Docker démarrera une instance du service sur chaque hôte chaque fois qu'un hôte devient disponible. 
 + 
 +{{ :elearning:workbooks:docker2:tvl1m.png?nolink&400 |}} 
   * **replicas** - spécifie le nombre de replicas   * **replicas** - spécifie le nombre de replicas
   * **restart_policy** spécifie ce qui se passe en cas d'arrêt du service. Dans le cas ci-dessus, docker va essayer de re-démarrer le service **3** fois (**max_attempts**) à des intervalles de **10** secondes (**delay**) en attendant chaque fois **120** secondes (**window**) pour constater si le service s'est effectivement re-démarré,   * **restart_policy** spécifie ce qui se passe en cas d'arrêt du service. Dans le cas ci-dessus, docker va essayer de re-démarrer le service **3** fois (**max_attempts**) à des intervalles de **10** secondes (**delay**) en attendant chaque fois **120** secondes (**window**) pour constater si le service s'est effectivement re-démarré,
Ligne 1442: Ligne 2034:
 </WRAP> </WRAP>
  
-Retournez à la fenêtre d'Apache Guacamole dans le navigateur de **votre** ordinateur. Cliquez sur la connexion **TraineeXX_VNC**. Lancez ensuite un navigateur Internet dans la machine virtuelle **debian9**. Naviguez à l'URL http://10.0.2.62:8080 ou http://10.0.2.42:8080 selon le cas et consultez le service **visualizer** :+Retournez à la fenêtre d'Apache Guacamole dans le navigateur de **votre** ordinateur. Cliquez sur la connexion **TraineeXX_VNC**. Lancez ensuite un navigateur Internet dans la machine virtuelle **debian9**. Naviguez à l'URL http://10.0.2.62:8080 et consultez le service **visualizer** :
  
 {{ :elearning:workbooks:docker:docker001.png?direct&600 |}} {{ :elearning:workbooks:docker:docker001.png?direct&600 |}}
Ligne 1738: Ligne 2330:
  
 ----- -----
-<html> + 
-<div align="center"> +Copyright © 2022 Hugh Norris.
-Copyright © 2021 Hugh NORRIS +
-</div> +
-</html>+
Menu