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:docker3:drf05 [2021/11/23 08:50] adminelearning:workbooks:docker3:drf05 [2024/02/21 13:40] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2021.01**+Version : **2024.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======DOF606 - Gestion du Réseau avec Docker======+======DOF606 - Gestion du Réseau Overlay avec Docker en mode Swarm======
  
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **DOF606 - Gestion du Réseau avec Docker**+  * **DOF606 - Gestion du Réseau Overlay avec Docker en mode Swarm**
     * Contenu du Module     * Contenu du Module
     * L'Approche Réseau Docker     * L'Approche Réseau Docker
-    * LAB #1 - Les Réseaux Docker ayant un Scope Local +    * LAB #1 - Gestion du Réseau overlay 
-      * 1.1 - Bridge +      * 1.1 - Création d'un Réseau overlay 
-        * Liens +      * 1.2 - Création d'un Service 
-      * 1.2 - Host +      * 1.3 - Déplacer le Service vers un autre Réseau overlay 
-      * 1.3 - None +      * 1.4 - DNS container discovery 
-      * 1.4 - Lancer Wordpress dans un container +      * 1.5 - Création d'un Réseau overlay Personnalisé 
-      * 1.5 - Gestion d'une Architecture de Microservices +    * LAB #- Gestion de l'Architecture des Microservices 
-    * LAB #2 - Gestion du Réseau overlay +      * 2.1 - 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 41: Ligne 34:
 {{ :elearning:workbooks:docker:docker-3.jpg?direct&600 |image}} {{ :elearning:workbooks:docker:docker-3.jpg?direct&600 |image}}
  
-=====LAB #1 - Les Réseaux Docker ayant un Scope Local===== +=====LAB #1 - Gestion du Réseau overlay=====
- +
-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 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> +
- +
-====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 vote, le 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]]**. 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]]**.
Ligne 740: Ligne 42:
 Le trafic lié à la gestion des services swarm est crypté par défaut avec l’algorithme AES en mode GCM. Afin de crypter le trafic des données liées aux applications il est possible d'utiliser l'option **--opt encrypted** lors de la création du réseau overlay. Dans ce cas, Docker crée des tunnels IPSEC entre chaque nœud qui utilise le même algorithme que le trafic des services swarm. Il y a donc une dégradation des performances à évaluer avant la mise en production. Dans les deux cas les clefs sont modifiées toutes les 12 heures (voir [[https://www.vaultproject.io/docs/internals/rotation.html]]) Le trafic lié à la gestion des services swarm est crypté par défaut avec l’algorithme AES en mode GCM. Afin de crypter le trafic des données liées aux applications il est possible d'utiliser l'option **--opt encrypted** lors de la création du réseau overlay. Dans ce cas, Docker crée des tunnels IPSEC entre chaque nœud qui utilise le même algorithme que le trafic des services swarm. Il y a donc une dégradation des performances à évaluer avant la mise en production. Dans les deux cas les clefs sont modifiées toutes les 12 heures (voir [[https://www.vaultproject.io/docs/internals/rotation.html]])
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **ATTENTION** : Le cryptage des données liées aux applications n'est pas compatible avec Windows(tm). Lors de la connexion du nœud Windows(tm) à un réseau overlay crypté, aucune erreur ne sera rapportée. Par contre le nœud sera incapable de communiquer. **ATTENTION** : Le cryptage des données liées aux applications n'est pas compatible avec Windows(tm). Lors de la connexion du nœud Windows(tm) à un réseau overlay crypté, aucune erreur ne sera rapportée. Par contre le nœud sera incapable de communiquer.
 </WRAP> </WRAP>
Ligne 747: Ligne 49:
  
 <code> <code>
-trainee@traineeXX:~ssh -l trainee 10.0.2.62 +root@debian11:~ssh -l trainee 10.0.2.62 
-...+The authenticity of host '10.0.2.62 (10.0.2.62)' can't be established. 
 +ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. 
 +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
 +Warning: Permanently added '10.0.2.62' (ECDSA) to the list of known hosts. 
 +trainee@10.0.2.62's password: trainee 
 +Linux manager.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 
 + 
 +The programs included with the Debian GNU/Linux system are free software; 
 +the exact distribution terms for each program are described in the 
 +individual files in /usr/share/doc/*/copyright. 
 + 
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
 +permitted by applicable law. 
 +Last login: Sun Jul 17 08:27:29 2022 from 10.0.2.1 
 +trainee@manager:~$ su - 
 +Mot de passe : fenestros 
 +root@manager:~# 
 root@manager:~# docker swarm leave root@manager:~# docker swarm leave
 Node left the swarm. Node left the swarm.
Ligne 763: Ligne 82:
 </code> </code>
  
-ou+Connectez-vous au **worker1** :
  
 <code> <code>
-trainee@traineeXX:~ssh -l trainee 10.0.2.42 +root@manager:~ssh -l trainee 10.0.2.63 
-... +The authenticity of host '10.0.2.63 (10.0.2.63)' can't be established
-root@manager:~# docker swarm leave +ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. 
-Node left the swarm+Are you sure you want to continue connecting (yes/no)? yes 
-root@manager:~# docker swarm init --advertise-addr 10.0.2.42 +Warning: Permanently added '10.0.2.63' (ECDSA) to the list of known hosts
-Swarm initializedcurrent node (tpn1zsk20sfsfafmk2cvefqjcis now a manager.+trainee@10.0.2.63's passwordtrainee 
 +Linux worker1.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27x86_64
  
-To add a worker to this swarm, run the following command:+The programs included with the Debian GNU/Linux system are free software; 
 +the exact distribution terms for each program are described in the 
 +individual files in /usr/share/doc/*/copyright.
  
-    docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.42:2377+Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
 +permitted by applicable law. 
 +Last login: Sun Mar 21 16:34:26 2021 from 10.0.2.11 
 +trainee@worker1:~$ su - 
 +Mot de passe : fenestros 
 +root@worker1:~#
  
-To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. 
-root@manager:~# exit 
-trainee@manager:~# exit 
-</code> 
- 
-Connectez-vous au **worker1** : 
- 
-<code> 
-trainee@traineeXX:~$ ssh -l trainee 10.0.2.63 
-... 
 root@worker1:~# docker swarm leave root@worker1:~# docker swarm leave
 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. This node joined a swarm as a worker.
 +
 root@worker1:~# exit root@worker1:~# exit
-trainee@worker1:~# exit +déconnexion
-</code>+
  
-ou+trainee@worker1:~$ exit 
 +déconnexion 
 +Connection to 10.0.2.63 closed.
  
-<code> +root@manager:~# 
-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. +
-root@worker1:~# exit +
-trainee@worker1:~# exit+
 </code> </code>
  
Ligne 811: Ligne 123:
  
 <code> <code>
-trainee@traineeXX:~ssh -l trainee 10.0.2.64 +root@manager:~ssh -l trainee 10.0.2.64 
-...+The authenticity of host '10.0.2.64 (10.0.2.64)' can't be established. 
 +ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. 
 +Are you sure you want to continue connecting (yes/no)? yes 
 +Warning: Permanently added '10.0.2.64' (ECDSA) to the list of known hosts. 
 +trainee@10.0.2.64's password: trainee 
 +Linux worker2.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 
 + 
 +The programs included with the Debian GNU/Linux system are free software; 
 +the exact distribution terms for each program are described in the 
 +individual files in /usr/share/doc/*/copyright. 
 + 
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
 +permitted by applicable law. 
 +Last login: Sun Mar 21 16:18:25 2021 from 10.0.2.11 
 +trainee@worker2:~$ su - 
 +Mot de passe : fenestros 
 +root@worker2:~#  
 root@worker2:~# docker swarm leave root@worker2:~# docker swarm leave
 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. This node joined a swarm as a worker.
 +
 root@worker2:~# exit root@worker2:~# exit
-trainee@worker2:~# exit +déconnexion
-</code>+
  
-ou :+trainee@worker2:~$ exit 
 +déconnexion 
 +Connection to 10.0.2.64 closed.
  
-<code> +root@manager:~# 
-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. +
-root@worker2:~# exit +
-trainee@worker2:~# exit+
 </code> </code>
  
Ligne 837: Ligne 161:
  
 <code> <code>
-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
 ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
Ligne 884: Ligne 187:
 </code> </code>
  
-<WRAP center round info 60%>+<WRAP center round info 50%>
 **Info** : Le réseau **docker_gwbridge** relie le réseau **ingress** à l'adaptateur réseau de l'hôte et par conséquent relie le démon Docker aux autres démons Docker qui participent dans swarm. **Info** : Le réseau **docker_gwbridge** relie le réseau **ingress** à l'adaptateur réseau de l'hôte et par conséquent relie le démon Docker aux autres démons Docker qui participent dans swarm.
 </WRAP> </WRAP>
  
-<WRAP center round tip 60%>+<WRAP center round tip 50%>
 **Best Practice** : Docker recommande l'utilisation de réseaux de type overlay différents pour chaque application ou groupe d'applications. **Best Practice** : Docker recommande l'utilisation de réseaux de type overlay différents pour chaque application ou groupe d'applications.
 </WRAP> </WRAP>
  
-====2.- Création d'un Réseau overlay====+====1.- 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 909: Ligne 212:
 </code> </code>
  
-====2.2 - Création d'un Service====+====1.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 925: Ligne 228:
 </code> </code>
  
-<WRAP center round info 60%>+<WRAP center round info 50%>
 **Info** : Le service publie le port 80 qui est visible de l'extérieur. Les conteneurs communiquent entre eux sans ouvrir de ports supplémentaires. **Info** : Le service publie le port 80 qui est visible de l'extérieur. Les conteneurs communiquent entre eux sans ouvrir de ports supplémentaires.
 </WRAP> </WRAP>
Ligne 1070: Ligne 373:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez ici les informations concernant les ports et les Endpoints utilisés par le service. **Important** : Notez ici les informations concernant les ports et les Endpoints utilisés par le service.
 </WRAP> </WRAP>
  
-====2.3 - Déplacer le Service vers un autre Réseau overlay====+====1.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 1287: Ligne 590:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **nginx-net** a été créé automatiquement sur les deux Workers. Notez aussi le contenu de la section **Peers** qui liste les nœuds ainsi que la section **Containers** qui liste les conteneurs sur chaque nœud qui sont connectés au réseau overlay. **Important** : Notez que le réseau **nginx-net** a été créé automatiquement sur les deux Workers. Notez aussi le contenu de la section **Peers** qui liste les nœuds ainsi que la section **Containers** qui liste les conteneurs sur chaque nœud qui sont connectés au réseau overlay.
 </WRAP> </WRAP>
Ligne 1437: Ligne 740:
 root@manager:~# docker service rm my-nginx root@manager:~# docker service rm my-nginx
 my-nginx my-nginx
 +
 root@manager:~# docker network rm nginx-net nginx-net-2 root@manager:~# docker network rm nginx-net nginx-net-2
 nginx-net nginx-net
Ligne 1442: Ligne 746:
 </code> </code>
  
-====2.4 - DNS container discovery====+====1.4 - DNS container discovery====
  
 Le daemon Docker exécute un server DNS embarqué à l'adresse 127.0.0.11 qui permet la résolution des noms dans un réseau personnalisé. Si ce serveur est incapable de faire la résolution, il transfert la requête à tout serveur externe défini dans le conteneur. Le daemon Docker exécute un server DNS embarqué à l'adresse 127.0.0.11 qui permet la résolution des noms dans un réseau personnalisé. Si ce serveur est incapable de faire la résolution, il transfert la requête à tout serveur externe défini dans le conteneur.
Ligne 1460: Ligne 764:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le **NETWORK-ID** ici est **hrs25w4l951kkickhj6262mjg**. **Important** : Notez que le **NETWORK-ID** ici est **hrs25w4l951kkickhj6262mjg**.
 </WRAP> </WRAP>
Ligne 1488: Ligne 792:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **test-net** n'a pas été créé. **Important** : Notez que le réseau **test-net** n'a pas été créé.
 </WRAP> </WRAP>
Ligne 1517: Ligne 821:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **test-net**, ayant le même **NETWORK ID**, a été automatiquement créé lors de la création du conteneur **alpine2**.  **Important** : Notez que le réseau **test-net**, ayant le même **NETWORK ID**, a été automatiquement créé lors de la création du conteneur **alpine2**. 
 </WRAP> </WRAP>
Ligne 1533: Ligne 837:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **test-net** n'a pas été créé. **Important** : Notez que le réseau **test-net** n'a pas été créé.
 </WRAP> </WRAP>
Ligne 1543: Ligne 847:
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
 ce9097b864dc        alpine              "/bin/sh"           23 minutes ago      Up 23 minutes                           alpine2 ce9097b864dc        alpine              "/bin/sh"           23 minutes ago      Up 23 minutes                           alpine2
 +
 root@worker1:~# docker attach alpine2 root@worker1:~# docker attach alpine2
 +/ # 
 +
 / # ping -c 2 alpine1 / # ping -c 2 alpine1
 PING alpine1 (10.0.2.2): 56 data bytes PING alpine1 (10.0.2.2): 56 data bytes
Ligne 1559: Ligne 866:
 <code> <code>
 root@manager:~# docker attach alpine1 root@manager:~# docker attach alpine1
 +/ # 
 +
 / # ping -c 2 alpine2 / # ping -c 2 alpine2
 PING alpine2 (10.0.0.4): 56 data bytes PING alpine2 (10.0.0.4): 56 data bytes
Ligne 1579: Ligne 888:
 Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d
 Status: Downloaded newer image for alpine:latest Status: Downloaded newer image for alpine:latest
 +/ # 
 +
 / # ping -c 2 alpine1 / # ping -c 2 alpine1
 PING alpine1 (10.0.2.2): 56 data bytes PING alpine1 (10.0.2.2): 56 data bytes
Ligne 1609: Ligne 920:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **test-net** a été supprimé. **Important** : Notez que le réseau **test-net** a été supprimé.
 </WRAP> </WRAP>
Ligne 1624: Ligne 935:
 <code> <code>
 / # exit / # exit
 +
 root@manager:~# docker container stop alpine1 root@manager:~# docker container stop alpine1
 alpine1 alpine1
 +
 root@manager:~# docker network ls root@manager:~# docker network ls
 NETWORK ID          NAME                DRIVER              SCOPE NETWORK ID          NAME                DRIVER              SCOPE
Ligne 1634: Ligne 947:
 de563e30d473        none                null                local de563e30d473        none                null                local
 518l09lcjhsp        test-net            overlay             swarm 518l09lcjhsp        test-net            overlay             swarm
 +
 root@manager:~# docker network rm test-net root@manager:~# docker network rm test-net
 test-net test-net
Ligne 1654: Ligne 968:
 root@manager:~# docker network create --driver overlay --ingress --subnet=10.11.0.0/16 --gateway=10.11.0.2 --opt com.docker.network.driver.mtu=1200 my-ingress root@manager:~# docker network create --driver overlay --ingress --subnet=10.11.0.0/16 --gateway=10.11.0.2 --opt com.docker.network.driver.mtu=1200 my-ingress
 44ozn3vtg23zkksrvloxuulcl 44ozn3vtg23zkksrvloxuulcl
 +
 root@manager:~# docker network ls root@manager:~# docker network ls
 NETWORK ID          NAME                DRIVER              SCOPE NETWORK ID          NAME                DRIVER              SCOPE
Ligne 1888: Ligne 1203:
 </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 1904: Ligne 1219:
 {{ :elearning:workbooks:debian:6:avance:kubernetes16.png?direct&800 |}} {{ :elearning:workbooks:debian:6:avance:kubernetes16.png?direct&800 |}}
  
-====3.1 - Mise en Place avec Docker Swarm avec des réseaux Overlay====+====2.1 - 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 1916: Ligne 1231:
 </code> </code>
  
-Téléchargez maintenant le fichier **docker-stack.yml** :+Créez maintenant le fichier **docker-stack.yml** :
  
 <code> <code>
-root@manager:~# curl -O https://raw.githubusercontent.com/docker/example-voting-app/master/docker-stack.yml +root@manager:~# vi docker-stack.yml 
-  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current +
-                                 Dload  Upload   Total   Spent    Left  Speed +
-100  1707  100  1707    0       2030      0 --:--:-- --:--:-- --:--:--  2029 +
-</code>+
  
-Consultez le fichier téléchargé : 
- 
-<code> 
 root@manager:~# cat docker-stack.yml  root@manager:~# cat docker-stack.yml 
 version: "3" version: "3"
Ligne 2046: Ligne 1354:
 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 2066: Ligne 1377:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** - Notez que chaque réseau et chaque service a comme préfixe le nom de l'application **app**. **Important** - Notez que chaque réseau et chaque service a comme préfixe le nom de l'application **app**.
 </WRAP> </WRAP>
Ligne 2091: Ligne 1402:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que la configuration du service **visualizer** a exposé le port **8080**. De cette façon, ce service est disponible sur le port 8080 de chaque nœud dans la swarm. **Important** : Notez que la configuration du service **visualizer** a exposé le port **8080**. De cette façon, ce service est disponible sur le port 8080 de chaque nœud dans la swarm.
 </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 **Debian11_10.0.2.46_VNC**. Lancez ensuite un navigateur Internet. 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 |}}
 +
 +{{ :elearning:workbooks:docker:docker001.png |}}
  
 Comme vous pouvez constater, conformément au fichier **docker-stack.yml**, les trois conteneurs **db**, **worker** et **visualizer** ont été démarrés sur le nœud manager. Comme vous pouvez constater, conformément au fichier **docker-stack.yml**, les trois conteneurs **db**, **worker** et **visualizer** ont été démarrés sur le nœud manager.
Ligne 2116: Ligne 1429:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que les trois réseaux créés sont de type **overlay**. **Important** : Notez que les trois réseaux créés sont de type **overlay**.
 </WRAP> </WRAP>
Ligne 2131: Ligne 1444:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que seul le réseau **app_frontend** a été créé dans **worker1**. **Important** : Notez que seul le réseau **app_frontend** a été créé dans **worker1**.
 </WRAP> </WRAP>
Ligne 2147: Ligne 1460:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que les deux réseaux **app_frontend** et **app_backend** ont été créés dans **worker2**. **Important** : Notez que les deux réseaux **app_frontend** et **app_backend** ont été créés dans **worker2**.
 </WRAP> </WRAP>
Ligne 2223: Ligne 1536:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau est **10.0.3.0/24** et la passerelle **10.0.3.1**. **Important** : Notez que le réseau est **10.0.3.0/24** et la passerelle **10.0.3.1**.
 </WRAP> </WRAP>
Ligne 2296: Ligne 1609:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau est **10.0.2.0/24** et la passerelle **10.0.2.1**. **Important** : Notez que le réseau est **10.0.2.0/24** et la passerelle **10.0.2.1**.
 </WRAP> </WRAP>
Ligne 2361: Ligne 1674:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau est **10.0.1.0/24** et la passerelle **10.0.1.1**. **Important** : Notez que le réseau est **10.0.1.0/24** et la passerelle **10.0.1.1**.
 </WRAP> </WRAP>
Ligne 2375: Ligne 1688:
 NAME                SERVICES            ORCHESTRATOR NAME                SERVICES            ORCHESTRATOR
 app                                   Swarm app                                   Swarm
 +
 root@manager:~# docker stack rm app root@manager:~# docker stack rm app
 Removing service app_db Removing service app_db
Ligne 2385: Ligne 1699:
 Removing network app_backend Removing network app_backend
 Removing network app_default Removing network app_default
 +
 root@manager:~# docker ps -a root@manager:~# docker ps -a
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                 NAMES CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                 NAMES
Ligne 2391: Ligne 1706:
  
 ----- -----
-<html> + 
-<div align="center"> +Copyright © 2024 Hugh Norris.
-Copyright © 2021 Hugh NORRIS +
-</div> +
-</html>+
Menu