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 [2020/08/11 10:58] adminelearning:workbooks:docker2:drf02 [2022/04/29 07:57] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2020.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 - Préparation +    * LAB #1 - Les Réseaux Docker ayant un Scope Local 
-      * 1.1 - Importation des Machines Virtuelles +      * 1.1 - Bridge 
-        * Formations en FFP +        * Liens 
-        Formations en FAD +      1.2 - Host 
-      * 1.Connexion aux Machines Virtuelles +      * 1.None 
-        MAC, Linux et FAD +      1.4 - Lancer Wordpress dans un container 
-        Windows+      1.5 - Gestion d'une Architecture de Microservices
     * LAB #2 - Gestion du Réseau overlay     * LAB #2 - Gestion du Réseau overlay
       * 2.1 - Création d'un Réseau overlay       * 2.1 - Création d'un Réseau overlay
Ligne 26: Ligne 26:
       * 2.5 - Création d'un Réseau overlay Personnalisé       * 2.5 - Création d'un Réseau overlay Personnalisé
     * LAB #3 - Gestion de l'Architecture des Microservices     * LAB #3 - Gestion de l'Architecture des Microservices
-      * 3.1 - Rappel - Mise en Place avec Docker avec un réseau Bridge et des liens +      * 3.1 - Mise en Place avec Docker Swarm avec des réseaux Overlay
-      * 3.2 - Mise en Place avec Docker Swarm avec des réseaux Overlay+
  
 =====L'Approche Réseau Docker===== =====L'Approche Réseau Docker=====
Ligne 42: 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=====
  
-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é. +Docker fournit trois réseaux par défaut :
-  +
-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%+<code
-**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éePar contre le nœud sera incapable de communiquer.+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érieurPour 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> </WRAP>
  
-=====LAB #1 - Préparation=====+Vous pouvez déconnecter un conteneur du réseau en utilisant la commande suivante :
  
-====1.1 - Importation des Machines Virtuelles====+<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>
  
-===Formations en FFP===+Créez maintenant votre propre réseau ponté appelé **my-bridged-network** :
  
-Ouvrez VirtualBox et importez les quatre machines virtuelles **Manager**, **Worker1**, **Worker2** et **Debian_9** :+<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>
  
-  Fichier > Importer un appareil virtuel ...+Bien évidement, ce réseau est actuellement vide :
  
-Les quatre machines virtuelles sont dans un réseau NAT :+<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>
  
-^ Machine ^ Nom d'hôte ^ Adresse IP ^ Redirection de Port ^ +Lancez maintenant deux conteneurs et consultez les informations concernant le réseau : 
-| Manager | manager.i2tch.loc | 10.0.2.15 | 2222 | +
-| Worker1 | worker1.i2tch.loc | 10.0.2.4 | 2322 | +
-| Worker2 | worker2.i2tch.loc | 10.0.2.5 | 2422 | +
-| Debian_9_1 | client.i2tch.loc | 10.0.2.9 | 2522 |+
  
-Créez les redirections de ports dans le réseau NAT **NatNetwork** de VirtualBox (Fichier Paramètres > Réseau > NatNetwork > Redirection de ports) selon le tableau suivant :+<code> 
 +root@debian9:~# docker run -itd --name=centos1 centos 
 +9f36a628c72b383edfd4dc13ee4e4b2eaf5be0078d780f0334fcb8be0d977d0e
  
-^ Nom ^ Protocole ^ IP hôte ^ Port hôte ^ IP invité ^ Port invité ^ +root@debian9:~# docker run -itd --name=centos2 centos 
-| Manager | TCP | 127.0.0.1 | 2222 | 10.0.2.15 | 22 | +aaed3bc8e404ee1bccd6c87b39de32332940b5391514691fc70188edb17c1d7c
-| Worker1 | TCP | 127.0.0.1 | 2322 | 10.0.2.4 | 22 | +
-| Worker2 | TCP | 127.0.0.1 | 2422 | 10.0.2.5 | 22 | +
-| Debian_9_1 | TCP | 127.0.0.1 | 2522 | 10.0.2.9 | 22 |+
  
-Démarrez ensuite les quatre machines virtuelles.+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}}
  
-===Formations en FAD===+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}}
  
-Les quatre machines virtuelles ont été importées pour vousDémarrez +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>
  
-Créez donc les redirections de port dans le réseau NatNetwork :+Mettez le conteneur **centos1** dans le réseau **my-bridged-network** :
  
 <code> <code>
-desktop@server16:~$ VBoxManage natnetwork modify --netname NatNetwork --port-forward-"Docker_Manager:tcp:[]:2222:[10.0.2.15]:22+root@debian9:~# docker network connect my-bridged-network centos1 
-desktop@server16:~$ VBoxManage natnetwork modify --netname NatNetwork --port-forward-4 "Docker_Worker1:tcp:[]:2322:[10.0.2.4]:22+ 
-desktop@server16:~$ VBoxManage natnetwork modify --netname NatNetwork --port-forward-4 "Docker_Worker2:tcp:[]:2422:[10.0.2.5]:22+root@debian9:~# docker network inspect my-bridged-network 
-desktop@server16:~$ VBoxManage natnetwork modify --netname NatNetwork --port-forward-4 "Docker_Debian_9_1:tcp:[]:2522:[10.0.2.9]:22"+
 +    { 
 +        "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> </code>
  
-Démarrez ensuite les quatre machines virtuelles :+<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> <code>
-desktop@server16:~$ VBoxManage startvm Manager --type headless +root@debian9:~# docker network connect my-bridged-network centos2 
-Waiting for VM "Managerto power on... + 
-VM "Managerhas been successfully started. +root@debian9:~# docker network inspect my-bridged-network 
-desktop@server16:~$ VBoxManage startvm Worker1 --type headless +
-Waiting for VM "Worker1to power on... +    { 
-VM "Worker1has been successfully started+        "Name": "my-bridged-network", 
-desktop@server16:~$ VBoxManage startvm Worker2 --type headless +        "Id": "ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3", 
-Waiting for VM "Worker2to power on... +        "Created""2017-09-07T10:03:17.063730665+01:00", 
-VM "Worker2has been successfully started. +        "Scope": "local", 
-desktop@server16:~$ VBoxManage startvm Debian_9_1 --type headless +        "Driver": "bridge", 
-Waiting for VM "Debian_9_1to power on... +        "EnableIPv6": false, 
-VM "Debian_9_1has been successfully started.+        "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> </code>
  
-====1.2 Connexion aux Machines Virtuelles====+Connectez-vous au conteneur **centos1** en lançant bash :
  
-Les noms d'utilisateurs et les mots de passe sont identiques pour chaque machine :+<code> 
 +root@debian9:~# docker exec -it centos1 bash 
 +</code>
  
-^ Utilisateur ^ Mot de Passe ^ +Vérifiez que la connectivité fonctionne :
-| trainee | trainee | +
-| root | fenestros |+
  
-Vous devez vous connecter aux machines virtuelles de la façon suivante :+<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.3icmp_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>
  
-===MAC, Linux et FAD===+Les options possibles au niveau de la gestion du réseau sont vaste. Voici deux exemples supplémentaires.
  
-Ouvrez un terminal et tapez la commande suivante pour la machine **Manager** :+Il est possible d'ajouter une adresse d'un serveur DNS au lancement d'un conteneur :
  
-<file+<code
-$ ssh -l trainee localhost -p 2222 +[root@9f36a628c72b /]# exit 
-</file>+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>
  
-Ouvrez un autre terminal et tapez la commande suivante pour la machine **Worker1** :+ou de passer une entrée pour le fichier **/etc/hosts** :
  
-<file+<code
-$ ssh -l trainee localhost -p 2322 +root@735599480b45:/# exit 
-</file>+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>
  
-Ouvrez un autre terminal et tapez la commande suivante pour la machine **Worker2** :+===Liens===
  
-<file> +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** :
-$ ssh -trainee localhost -p 2422 +
-</file>+
  
-Ouvrez un autre terminal et tapez la commande suivante pour la machine **Debian_9** :+<code> 
 +root@332aa9930f30:/# exit 
 +exit
  
-<file> +root@debian9:~# docker run -itd --name centos3 --link centos2:alias centos 
-$ ssh -l trainee localhost -p 2522 +6a315259b2946c3bf2bb69f608cbe910d87edaadedb4f805e7a4dbf6af1eb916
-</file>+
  
-===Windows===+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
  
-Ouvrez **putty** et utilisez les informations suivantes pour vous connecter à **Manager** :+root@debian9:~# docker exec -it centos3 bash
  
-  * Host Name --> localhost +[root@6a315259b294 /]# ping centos2 
-  * Port --> 2222 +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 
-Ouvrez **putty** et utilisez les informations suivantes pour vous connecter à **Worker1** :+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
  
-  * Host Name --> localhost +[root@6a315259b294 /]# cat /etc/hosts 
-  * Port --> 2322+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
  
-Ouvrez **putty** et utilisez les informations suivantes pour vous connecter à **Worker2** :+[root@6a315259b294 /]# exit 
 +exit
  
-  * Host Name --> localhost +root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos3 
-  * Port --2422+172.17.0.2 
 +</code>
  
-Ouvrez **putty** et utilisez les informations suivantes pour vous connecter à **Debian_9** :+Notez cependant qu le lien est unidirectionnel :
  
-  * Host Name --localhost +<code
-  * Port --> 2522+root@debian9:~# docker exec -it centos2 bash
  
-=====LAB #2 - Gestion du Réseau overlay=====+[root@aaed3bc8e404 /]ping centos3 
 +ping: centos3: Name or service not known
  
-Commencez par re-créer un swarm :+[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> <code>
-root@manager:~# docker swarm leave +[root@aaed3bc8e404 /]# exit 
-Node left the swarm.+exit 
 +root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2 
 +172.17.0.4172.25.0.3 
 +</code>
  
-root@worker1:~# docker swarm leave +====1.2 - Host====
-Node left the swarm.+
  
-root@worker2:~# docker swarm leave +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.
-Node left the swarm.+
  
-root@manager:~# docker swarm init --advertise-addr 10.0.2.15+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]]**. 
 + 
 +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é. 
 +  
 +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%> 
 +**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> 
 + 
 +Commencez par re-créer un swarm en utilisant les machines virtuelles **manager**, **worker1** et **worker2** : 
 + 
 +<code> 
 +trainee@traineeXX:~$ ssh -l trainee 10.0.2.62 
 +... 
 +root@manager:~# docker swarm leave 
 +Node left the swarm. 
 +root@manager:~# docker swarm init --advertise-addr 10.0.2.62
 Swarm initialized: current node (tpn1zsk20sfsfafmk2cvefqjc) is now a manager. Swarm initialized: current node (tpn1zsk20sfsfafmk2cvefqjc) is now a manager.
  
 To add a worker to this swarm, run the following command: To add a worker to this swarm, run the following command:
  
-    docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.15: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. To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
 +root@manager:~# exit
 +trainee@manager:~# exit
 +</code>
  
-root@worker1:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.15:2377+Connectez-vous au **worker1** : 
 + 
 +<code> 
 +trainee@traineeXX:~$ ssh -l trainee 10.0.2.63 
 +... 
 +root@worker1:~# docker swarm leave 
 +Node left the swarm. 
 +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
 +trainee@worker1:~# exit
 +</code>
  
-root@worker2:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.15:2377+Connectez-vous au **worker2** : 
 + 
 +<code> 
 +trainee@traineeXX:~$ ssh -l trainee 10.0.2.64 
 +... 
 +root@worker2:~# docker swarm leave 
 +Node left the swarm. 
 +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
 +trainee@worker2:~# exit
 </code> </code>
  
Ligne 201: Ligne 792:
  
 <code> <code>
 +trainee@traineeXX:~$ ssh -l trainee 10.0.2.62
 +...
 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 235: Ligne 828:
 </WRAP> </WRAP>
  
-====2.- 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 478: Ligne 1071:
             {             {
                 "Name": "1199cab4a6dd",                 "Name": "1199cab4a6dd",
-                "IP": "10.0.2.15"+                "IP": "10.0.2.62"
             },             },
             {             {
                 "Name": "69676ae46ab9",                 "Name": "69676ae46ab9",
-                "IP": "10.0.2.4"+                "IP": "10.0.2.63"
             },             },
             {             {
                 "Name": "d058d363197d",                 "Name": "d058d363197d",
-                "IP": "10.0.2.5"+                "IP": "10.0.2.64"
             }             }
         ]         ]
Ligne 543: Ligne 1136:
             {             {
                 "Name": "69676ae46ab9",                 "Name": "69676ae46ab9",
-                "IP": "10.0.2.4"+                "IP": "10.0.2.63"
             },             },
             {             {
                 "Name": "d058d363197d",                 "Name": "d058d363197d",
-                "IP": "10.0.2.5"+                "IP": "10.0.2.64"
             },             },
             {             {
                 "Name": "1199cab4a6dd",                 "Name": "1199cab4a6dd",
-                "IP": "10.0.2.15"+                "IP": "10.0.2.62"
             }             }
         ]         ]
Ligne 615: Ligne 1208:
             {             {
                 "Name": "d058d363197d",                 "Name": "d058d363197d",
-                "IP": "10.0.2.5"+                "IP": "10.0.2.64"
             },             },
             {             {
                 "Name": "69676ae46ab9",                 "Name": "69676ae46ab9",
-                "IP": "10.0.2.4"+                "IP": "10.0.2.63"
             },             },
             {             {
                 "Name": "1199cab4a6dd",                 "Name": "1199cab4a6dd",
-                "IP": "10.0.2.15"+                "IP": "10.0.2.62"
             }             }
         ]         ]
Ligne 760: Ligne 1353:
             {             {
                 "Name": "69676ae46ab9",                 "Name": "69676ae46ab9",
-                "IP": "10.0.2.4"+                "IP": "10.0.2.63"
             },             },
             {             {
                 "Name": "1199cab4a6dd",                 "Name": "1199cab4a6dd",
-                "IP": "10.0.2.15"+                "IP": "10.0.2.62"
             },             },
             {             {
                 "Name": "d058d363197d",                 "Name": "d058d363197d",
-                "IP": "10.0.2.5"+                "IP": "10.0.2.64"
             }             }
         ]         ]
Ligne 880: Ligne 1473:
 </WRAP> </WRAP>
  
-Attachez-vous au conteneur **alpine2** sur **Worker1** et essayez de contacter le conteneur **alpine1** :+Attachez vous au conteneur **alpine2** sur **Worker1** et essayez de contacter le conteneur **alpine1** :
  
 <code> <code>
Ligne 901: Ligne 1494:
  
 <code> <code>
 +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 929: Ligne 1523:
 2 packets transmitted, 2 packets received, 0% packet loss 2 packets transmitted, 2 packets received, 0% packet loss
 round-trip min/avg/max = 0.642/1.163/1.684 ms round-trip min/avg/max = 0.642/1.163/1.684 ms
-/ # +/ # exit
 </code> </code>
  
Ligne 935: Ligne 1529:
  
 <code> <code>
-/ # exit 
 root@worker1:~# docker container stop alpine2 root@worker1:~# docker container stop alpine2
 alpine2 alpine2
Ligne 1209: Ligne 1802:
             {             {
                 "Name": "9a00e8bc72fe",                 "Name": "9a00e8bc72fe",
-                "IP": "10.0.2.15"+                "IP": "10.0.2.62"
             },             },
             {             {
                 "Name": "3ea669d48ca2",                 "Name": "3ea669d48ca2",
-                "IP": "10.0.2.5"+                "IP": "10.0.2.64"
             },             },
             {             {
                 "Name": "f30e39df1704",                 "Name": "f30e39df1704",
-                "IP": "10.0.2.4"+                "IP": "10.0.2.63"
             }             }
         ]         ]
Ligne 1230: Ligne 1823:
 my-nginx my-nginx
 </code> </code>
- 
-<WRAP center round important 60%> 
-**Important** : Prenez une instantanée de chacune de vos machines virtuelles.  
-</WRAP> 
  
 =====LAB #3 - Gestion d'une Architecture de Microservices===== =====LAB #3 - Gestion d'une Architecture de Microservices=====
Ligne 1251: Ligne 1840:
 {{ :elearning:workbooks:debian:6:avance:kubernetes16.png?direct&800 |}} {{ :elearning:workbooks:debian:6:avance:kubernetes16.png?direct&800 |}}
  
-====3.1 - Rappel - Mise en Place avec Docker avec un réseau Bridge et des liens==== +====3.1 - Mise en Place avec Docker Swarm avec des réseaux Overlay====
- +
-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. +
- +
-====3.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 1411: 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 1460: Ligne 2034:
 </WRAP> </WRAP>
  
-A partir de la machine virtuelle **manager**consultez donc 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 |}}
  
-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 noeud 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.
  
-Consultez maintenant l'état des réseaux dans les trois nœuds :+Retournez à votre connexion SSH et consultez l'état des réseaux dans les trois nœuds :
  
 <code> <code>
Ligne 1577: Ligne 2151:
             {             {
                 "Name": "377986fb7d5a",                 "Name": "377986fb7d5a",
-                "IP": "10.0.2.15"+                "IP": "10.0.2.62"
             },             },
             {             {
                 "Name": "5cc4b863da9f",                 "Name": "5cc4b863da9f",
-                "IP": "10.0.2.5"+                "IP": "10.0.2.64"
             }             }
         ]         ]
Ligne 1646: Ligne 2220:
             {             {
                 "Name": "0e21ba1bbfab",                 "Name": "0e21ba1bbfab",
-                "IP": "10.0.2.4"+                "IP": "10.0.2.63"
             },             },
             {             {
                 "Name": "5cc4b863da9f",                 "Name": "5cc4b863da9f",
-                "IP": "10.0.2.5"+                "IP": "10.0.2.64"
             },             },
             {             {
                 "Name": "377986fb7d5a",                 "Name": "377986fb7d5a",
-                "IP": "10.0.2.15"+                "IP": "10.0.2.62"
             }             }
         ]         ]
Ligne 1719: Ligne 2293:
             {             {
                 "Name": "377986fb7d5a",                 "Name": "377986fb7d5a",
-                "IP": "10.0.2.15"+                "IP": "10.0.2.62"
             }             }
         ]         ]
Ligne 1732: Ligne 2306:
 Schématiquement, la mise en place de l'application dans le Swarm est ainsi : Schématiquement, la mise en place de l'application dans le Swarm est ainsi :
  
-{{ :elearning:workbooks:docker:docker002.png?direct |}}+{{ :elearning:workbooks:docker2:docker002.png?nolink |}}
  
 Dernièrement, supprimez le stack : Dernièrement, supprimez le stack :
Ligne 1756: Ligne 2330:
  
 ----- -----
-<html> + 
-<div align="center"> +Copyright © 2022 Hugh Norris.
-Copyright © 2020 Hugh NORRIS +
-</div> +
-</html>+
Menu