Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
elearning:workbooks:docker3:drf05 [2023/12/27 07:51] – removed admin | elearning:workbooks:docker3:drf05 [2024/02/21 13:40] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ~~PDF: | ||
+ | Version : **2024.01** | ||
+ | |||
+ | Dernière mise-à-jour : ~~LASTMOD~~ | ||
+ | |||
+ | ======DOF606 - Gestion du Réseau Overlay avec Docker en mode Swarm====== | ||
+ | |||
+ | =====Contenu du Module===== | ||
+ | |||
+ | * **DOF606 - Gestion du Réseau Overlay avec Docker en mode Swarm** | ||
+ | * Contenu du Module | ||
+ | * L' | ||
+ | * LAB #1 - Gestion du Réseau overlay | ||
+ | * 1.1 - Création d'un Réseau overlay | ||
+ | * 1.2 - Création d'un Service | ||
+ | * 1.3 - Déplacer le Service vers un autre Réseau overlay | ||
+ | * 1.4 - DNS container discovery | ||
+ | * 1.5 - Création d'un Réseau overlay Personnalisé | ||
+ | * LAB #2 - Gestion de l' | ||
+ | * 2.1 - Mise en Place avec Docker Swarm avec des réseaux Overlay | ||
+ | |||
+ | =====L' | ||
+ | |||
+ | L' | ||
+ | |||
+ | * Sandbox, | ||
+ | * contient la configuration réseau du conteneur à savoir, la gestion des interfaces, la table de routage et le DNS, | ||
+ | * Endpoint, | ||
+ | * relie un sandbox à un network, | ||
+ | * Network, | ||
+ | * un groupe d' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | =====LAB #1 - 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' | ||
+ | |||
+ | 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' | ||
+ | |||
+ | 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' | ||
+ | |||
+ | <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. | ||
+ | </ | ||
+ | |||
+ | Commencez par re-créer un swarm en utilisant les machines virtuelles **manager**, | ||
+ | |||
+ | < | ||
+ | root@debian11: | ||
+ | The authenticity of host ' | ||
+ | ECDSA key fingerprint is SHA256: | ||
+ | Are you sure you want to continue connecting (yes/ | ||
+ | Warning: Permanently added ' | ||
+ | trainee@10.0.2.62' | ||
+ | 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 / | ||
+ | |||
+ | 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: | ||
+ | Mot de passe : fenestros | ||
+ | root@manager: | ||
+ | |||
+ | root@manager: | ||
+ | Node left the swarm. | ||
+ | root@manager: | ||
+ | Swarm initialized: | ||
+ | |||
+ | To add a worker to this swarm, run the following command: | ||
+ | |||
+ | docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62: | ||
+ | |||
+ | To add a manager to this swarm, run ' | ||
+ | root@manager: | ||
+ | trainee@manager: | ||
+ | </ | ||
+ | |||
+ | Connectez-vous au **worker1** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | The authenticity of host ' | ||
+ | ECDSA key fingerprint is SHA256: | ||
+ | Are you sure you want to continue connecting (yes/no)? yes | ||
+ | Warning: Permanently added ' | ||
+ | trainee@10.0.2.63' | ||
+ | Linux worker1.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 / | ||
+ | |||
+ | 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: | ||
+ | Mot de passe : fenestros | ||
+ | root@worker1: | ||
+ | |||
+ | root@worker1: | ||
+ | Node left the swarm. | ||
+ | |||
+ | root@worker1: | ||
+ | This node joined a swarm as a worker. | ||
+ | |||
+ | root@worker1: | ||
+ | déconnexion | ||
+ | |||
+ | trainee@worker1: | ||
+ | déconnexion | ||
+ | Connection to 10.0.2.63 closed. | ||
+ | |||
+ | root@manager: | ||
+ | </ | ||
+ | |||
+ | Connectez-vous au **worker2** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | The authenticity of host ' | ||
+ | ECDSA key fingerprint is SHA256: | ||
+ | Are you sure you want to continue connecting (yes/no)? yes | ||
+ | Warning: Permanently added ' | ||
+ | trainee@10.0.2.64' | ||
+ | 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 / | ||
+ | |||
+ | 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: | ||
+ | Mot de passe : fenestros | ||
+ | root@worker2: | ||
+ | |||
+ | root@worker2: | ||
+ | Node left the swarm. | ||
+ | |||
+ | root@worker2: | ||
+ | This node joined a swarm as a worker. | ||
+ | |||
+ | root@worker2: | ||
+ | déconnexion | ||
+ | |||
+ | trainee@worker2: | ||
+ | déconnexion | ||
+ | Connection to 10.0.2.64 closed. | ||
+ | |||
+ | root@manager: | ||
+ | </ | ||
+ | |||
+ | Vérifiez l' | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | ID HOSTNAME | ||
+ | b85hxlixbr1mh1txd1hrfe4us * | ||
+ | 4sui75vvdhmet4qvt0zbvzlzl | ||
+ | lbjtg5o9kw3x6xg7frm07jfuw | ||
+ | root@manager: | ||
+ | ID HOSTNAME | ||
+ | b85hxlixbr1mh1txd1hrfe4us * | ||
+ | root@manager: | ||
+ | ID HOSTNAME | ||
+ | 4sui75vvdhmet4qvt0zbvzlzl | ||
+ | lbjtg5o9kw3x6xg7frm07jfuw | ||
+ | </ | ||
+ | |||
+ | Vérifiez la présence du réseau overlay **ingress** ainsi que le réseau ponté **docker_gwbridge** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | 4edb7186dcc9 | ||
+ | d4c9b0c9437a | ||
+ | f3cb3bc3c581 | ||
+ | r8htcvc8oxmz | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 50%> | ||
+ | **Info** : Le réseau **docker_gwbridge** relie le réseau **ingress** à l' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round tip 50%> | ||
+ | **Best Practice** : Docker recommande l' | ||
+ | </ | ||
+ | |||
+ | ====1.1 - Création d'un Réseau overlay==== | ||
+ | |||
+ | A partir du Manager, créez un réseau de type overlay appelé **nginx-net** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | j57jhtug4kjxp22ai1y664lqr | ||
+ | root@manager: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | dde514eea83f | ||
+ | d4c9b0c9437a | ||
+ | f3cb3bc3c581 | ||
+ | r8htcvc8oxmz | ||
+ | j57jhtug4kjx | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | ====1.2 - Création d'un Service==== | ||
+ | |||
+ | Créez un service nginx qui utilise le réseau **nginx-net** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | fpydgix3e1rc1qum72gvwcb7f | ||
+ | overall progress: 5 out of 5 tasks | ||
+ | 1/5: running | ||
+ | 2/5: running | ||
+ | 3/5: running | ||
+ | 4/5: running | ||
+ | 5/5: running | ||
+ | verify: Service converged | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 50%> | ||
+ | **Info** : Le service publie le port 80 qui est visible de l' | ||
+ | </ | ||
+ | |||
+ | Vérifiez que le service fonctionne avant de poursuivre : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | ID NAME MODE REPLICAS | ||
+ | fpydgix3e1rc | ||
+ | </ | ||
+ | |||
+ | Consultez maintenant les détails du service : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez ici les informations concernant les ports et les Endpoints utilisés par le service. | ||
+ | </ | ||
+ | |||
+ | ====1.3 - Déplacer le Service vers un autre Réseau overlay==== | ||
+ | |||
+ | Consultez le réseau overlay **nginx-net** sur les trois nœuds : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | root@worker2: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | <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. | ||
+ | </ | ||
+ | |||
+ | Créez maintenant un deuxième réseau de type overlay, appelé **nginx-net-2** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | aez5huut9hd472qmldzf2tsud | ||
+ | </ | ||
+ | |||
+ | Déplacez le service **my-nginx** vers le réseau **nginx-net-2** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | my-nginx | ||
+ | overall progress: 5 out of 5 tasks | ||
+ | 1/5: running | ||
+ | 2/5: running | ||
+ | 3/5: running | ||
+ | 4/5: running | ||
+ | 5/5: running | ||
+ | verify: Service converged | ||
+ | </ | ||
+ | |||
+ | Vérifiez que le service fonctionne avant de poursuivre : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | ID NAME MODE REPLICAS | ||
+ | fpydgix3e1rc | ||
+ | </ | ||
+ | |||
+ | Vérifiez qu' | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | Vérifiez maintenant que les conteneurs se trouvent dans le réseau **nginx-net-2** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | Supprimez maintenant le service **my-nginx** ainsi que les deux réseaux overlay **nginx-net** et **nginx-net-2** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | my-nginx | ||
+ | |||
+ | root@manager: | ||
+ | nginx-net | ||
+ | nginx-net-2 | ||
+ | </ | ||
+ | |||
+ | ====1.4 - DNS container discovery==== | ||
+ | |||
+ | Le daemon Docker exécute un server DNS embarqué à l' | ||
+ | |||
+ | Pour que le **DNS container discovery** fonctionne, les ports suivants doivent être ouverts sur les nœuds : | ||
+ | |||
+ | * 2377/tcp | ||
+ | * 7946/tcp | ||
+ | * 7946/udp | ||
+ | * 4789/udp | ||
+ | |||
+ | Créez maintenant le réseau de type overlay **test-net** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | hrs25w4l951kkickhj6262mjg | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le **NETWORK-ID** ici est **hrs25w4l951kkickhj6262mjg**. | ||
+ | </ | ||
+ | |||
+ | Sur le Manager, démarrez un conteneur interactif appelé **alpine1** et qui se connecte au réseau **test-net** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | Unable to find image ' | ||
+ | latest: Pulling from library/ | ||
+ | 89d9c30c1d48: | ||
+ | Digest: sha256: | ||
+ | Status: Downloaded newer image for alpine: | ||
+ | / # | ||
+ | </ | ||
+ | |||
+ | Listez les réseaux disponibles sur **Worker1** : | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | 3fe43b514f9d | ||
+ | ee22b3e623ca | ||
+ | f3cb3bc3c581 | ||
+ | r8htcvc8oxmz | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le réseau **test-net** n'a pas été créé. | ||
+ | </ | ||
+ | |||
+ | Démarrez maintenant un conteneur **alpine2** sur **Worker1** : | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | Unable to find image ' | ||
+ | latest: Pulling from library/ | ||
+ | 89d9c30c1d48: | ||
+ | Digest: sha256: | ||
+ | Status: Downloaded newer image for alpine: | ||
+ | 5734e84cd460cdd33ce90970d98a96837a0305832a86fc4d86be38aecf51b23b | ||
+ | </ | ||
+ | |||
+ | Saisissez la commande **docker network ls** sur **Worker1** : | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | 3fe43b514f9d | ||
+ | ee22b3e623ca | ||
+ | f3cb3bc3c581 | ||
+ | r8htcvc8oxmz | ||
+ | de563e30d473 | ||
+ | hrs25w4l951k | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le réseau **test-net**, | ||
+ | </ | ||
+ | |||
+ | Listez les réseaux disponibles sur **Worker2** : | ||
+ | |||
+ | < | ||
+ | root@worker2: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | ff7308310f60 | ||
+ | 0ce1d8369c29 | ||
+ | f3cb3bc3c581 | ||
+ | r8htcvc8oxmz | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le réseau **test-net** n'a pas été créé. | ||
+ | </ | ||
+ | |||
+ | Attachez vous au conteneur **alpine2** sur **Worker1** et essayez de contacter le conteneur **alpine1** : | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | CONTAINER ID IMAGE | ||
+ | ce9097b864dc | ||
+ | |||
+ | root@worker1: | ||
+ | / # | ||
+ | |||
+ | / # ping -c 2 alpine1 | ||
+ | PING alpine1 (10.0.2.2): 56 data bytes | ||
+ | 64 bytes from 10.0.2.2: seq=0 ttl=64 time=1.874 ms | ||
+ | 64 bytes from 10.0.2.2: seq=1 ttl=64 time=1.669 ms | ||
+ | |||
+ | --- alpine1 ping statistics --- | ||
+ | 2 packets transmitted, | ||
+ | round-trip min/avg/max = 1.669/ | ||
+ | / # | ||
+ | </ | ||
+ | |||
+ | Retournez dans la VM **Manager** et essayez de contacter le conteneur **alpine2** à partir du conteneur **alpine1** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | / # | ||
+ | |||
+ | / # ping -c 2 alpine2 | ||
+ | PING alpine2 (10.0.0.4): 56 data bytes | ||
+ | 64 bytes from 10.0.0.4: seq=0 ttl=64 time=0.666 ms | ||
+ | 64 bytes from 10.0.0.4: seq=1 ttl=64 time=1.239 ms | ||
+ | |||
+ | --- alpine2 ping statistics --- | ||
+ | 2 packets transmitted, | ||
+ | round-trip min/avg/max = 0.666/ | ||
+ | / # | ||
+ | </ | ||
+ | |||
+ | Créez ensuite le conteneur **alpine3** sur le **Worker2** essayez de contacter le conteneur **alpine1** : | ||
+ | |||
+ | < | ||
+ | root@worker2: | ||
+ | Unable to find image ' | ||
+ | latest: Pulling from library/ | ||
+ | c9b1b535fdd9: | ||
+ | Digest: sha256: | ||
+ | Status: Downloaded newer image for alpine: | ||
+ | / # | ||
+ | |||
+ | / # ping -c 2 alpine1 | ||
+ | PING alpine1 (10.0.2.2): 56 data bytes | ||
+ | 64 bytes from 10.0.2.2: seq=0 ttl=64 time=0.642 ms | ||
+ | 64 bytes from 10.0.2.2: seq=1 ttl=64 time=1.684 ms | ||
+ | |||
+ | --- alpine1 ping statistics --- | ||
+ | 2 packets transmitted, | ||
+ | round-trip min/avg/max = 0.642/ | ||
+ | / # exit | ||
+ | </ | ||
+ | |||
+ | Arrêtez maintenant le conteneur **alpine2** sur **Worker1** : | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | alpine2 | ||
+ | </ | ||
+ | |||
+ | Saisissez la commande **docker network ls** : | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | 3bb80f391804 | ||
+ | ee22b3e623ca | ||
+ | f3cb3bc3c581 | ||
+ | r8htcvc8oxmz | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le réseau **test-net** a été supprimé. | ||
+ | </ | ||
+ | |||
+ | Supprimez le conteneur **alpine2**: | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | alpine2 | ||
+ | </ | ||
+ | |||
+ | Arrêtez le conteneur **alpine1** et supprimez le réseau **test-net** sur **Manager** : | ||
+ | |||
+ | < | ||
+ | / # exit | ||
+ | |||
+ | root@manager: | ||
+ | alpine1 | ||
+ | |||
+ | root@manager: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | a604e7db6f95 | ||
+ | d4c9b0c9437a | ||
+ | f3cb3bc3c581 | ||
+ | jxu667wzmj2u | ||
+ | de563e30d473 | ||
+ | 518l09lcjhsp | ||
+ | |||
+ | root@manager: | ||
+ | test-net | ||
+ | </ | ||
+ | |||
+ | ====2.5 - Création d'un Réseau overlay Personnalisé==== | ||
+ | |||
+ | Il est possible de créer un réseau overlay personnalisé. Dans ce cas là, il convient de supprimer le réseau ingress déjà existant : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | WARNING! Before removing the routing-mesh network, make sure all the nodes in your swarm run the same docker engine version. Otherwise, removal may not be effective and functionality of newly create ingress networks will be impaired. | ||
+ | Are you sure you want to continue? [y/N] y | ||
+ | ingress | ||
+ | </ | ||
+ | |||
+ | Créez ensuite votre réseau personnalisé : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | 44ozn3vtg23zkksrvloxuulcl | ||
+ | |||
+ | root@manager: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | 24be8a0f0ef5 | ||
+ | d4c9b0c9437a | ||
+ | f3cb3bc3c581 | ||
+ | 44ozn3vtg23z | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | Créez de nouveau le service **my-nginx** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | gp1iozmbi25dx3skn00m6suoz | ||
+ | overall progress: 5 out of 5 tasks | ||
+ | 1/5: running | ||
+ | 2/5: running | ||
+ | 3/5: running | ||
+ | 4/5: running | ||
+ | 5/5: running | ||
+ | verify: Service converged | ||
+ | |||
+ | root@manager: | ||
+ | ID NAME MODE REPLICAS | ||
+ | gp1iozmbi25d | ||
+ | |||
+ | root@manager: | ||
+ | ID NAME IMAGE | ||
+ | upmbwmtr76cm | ||
+ | qz6p1li7zmef | ||
+ | me50mkhd11yk | ||
+ | sctjud70ihkl | ||
+ | kql9qx3phb73 | ||
+ | </ | ||
+ | |||
+ | Consultez les informations concernant le service **my-nginx** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | Vérifiez maintenant que les conteneurs se trouvent dans le réseau **my-ingress** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | Supprimez maintenant le service **my-nginx** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | my-nginx | ||
+ | </ | ||
+ | |||
+ | =====LAB #2 - 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 : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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 : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ====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, | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | ID HOSTNAME | ||
+ | b85hxlixbr1mh1txd1hrfe4us * | ||
+ | 4sui75vvdhmet4qvt0zbvzlzl | ||
+ | lbjtg5o9kw3x6xg7frm07jfuw | ||
+ | </ | ||
+ | |||
+ | Créez maintenant le fichier **docker-stack.yml** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | |||
+ | root@manager: | ||
+ | version: " | ||
+ | services: | ||
+ | |||
+ | redis: | ||
+ | image: redis: | ||
+ | networks: | ||
+ | - frontend | ||
+ | deploy: | ||
+ | replicas: 1 | ||
+ | update_config: | ||
+ | parallelism: | ||
+ | delay: 10s | ||
+ | restart_policy: | ||
+ | condition: on-failure | ||
+ | db: | ||
+ | image: postgres: | ||
+ | environment: | ||
+ | POSTGRES_USER: | ||
+ | POSTGRES_PASSWORD: | ||
+ | volumes: | ||
+ | - db-data:/ | ||
+ | networks: | ||
+ | - backend | ||
+ | deploy: | ||
+ | placement: | ||
+ | constraints: | ||
+ | vote: | ||
+ | image: dockersamples/ | ||
+ | ports: | ||
+ | - 5000:80 | ||
+ | networks: | ||
+ | - frontend | ||
+ | depends_on: | ||
+ | - redis | ||
+ | deploy: | ||
+ | replicas: 2 | ||
+ | update_config: | ||
+ | parallelism: | ||
+ | restart_policy: | ||
+ | condition: on-failure | ||
+ | result: | ||
+ | image: dockersamples/ | ||
+ | ports: | ||
+ | - 5001:80 | ||
+ | networks: | ||
+ | - backend | ||
+ | depends_on: | ||
+ | - db | ||
+ | deploy: | ||
+ | replicas: 1 | ||
+ | update_config: | ||
+ | parallelism: | ||
+ | delay: 10s | ||
+ | restart_policy: | ||
+ | condition: on-failure | ||
+ | |||
+ | worker: | ||
+ | image: dockersamples/ | ||
+ | networks: | ||
+ | - frontend | ||
+ | - backend | ||
+ | depends_on: | ||
+ | - db | ||
+ | - redis | ||
+ | deploy: | ||
+ | mode: replicated | ||
+ | replicas: 1 | ||
+ | labels: [APP=VOTING] | ||
+ | restart_policy: | ||
+ | condition: on-failure | ||
+ | delay: 10s | ||
+ | max_attempts: | ||
+ | window: 120s | ||
+ | placement: | ||
+ | constraints: | ||
+ | |||
+ | visualizer: | ||
+ | image: dockersamples/ | ||
+ | ports: | ||
+ | - " | ||
+ | stop_grace_period: | ||
+ | volumes: | ||
+ | - "/ | ||
+ | deploy: | ||
+ | placement: | ||
+ | constraints: | ||
+ | |||
+ | networks: | ||
+ | frontend: | ||
+ | backend: | ||
+ | |||
+ | volumes: | ||
+ | db-data: | ||
+ | </ | ||
+ | |||
+ | Dans ce fichier on peut constater 6 services, **redis**, **db**, **vote**, **result**, **worker** et **visualizer**. Les 5 premiers services forment ensemble l' | ||
+ | |||
+ | Dans un premier temps, regardez la clef **deploy** du service **worker** : | ||
+ | |||
+ | < | ||
+ | ... | ||
+ | deploy: | ||
+ | mode: replicated | ||
+ | replicas: 1 | ||
+ | labels: [APP=VOTING] | ||
+ | restart_policy: | ||
+ | condition: on-failure | ||
+ | delay: 10s | ||
+ | max_attempts: | ||
+ | window: 120s | ||
+ | placement: | ||
+ | constraints: | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | 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' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | * **replicas** - spécifie le nombre de replicas | ||
+ | * **restart_policy** spécifie ce qui se passe en cas d' | ||
+ | * **placement** - spécifie où le service doit être démarré. | ||
+ | |||
+ | Déployez maintenant le stack : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | Creating network app_backend | ||
+ | Creating network app_default | ||
+ | Creating network app_frontend | ||
+ | Creating service app_worker | ||
+ | Creating service app_visualizer | ||
+ | Creating service app_redis | ||
+ | Creating service app_db | ||
+ | Creating service app_vote | ||
+ | Creating service app_result | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** - Notez que chaque réseau et chaque service a comme préfixe le nom de l' | ||
+ | </ | ||
+ | |||
+ | Consultez maintenant l' | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | NAME SERVICES | ||
+ | app | ||
+ | </ | ||
+ | |||
+ | Consultez ensuite l' | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | ID NAME MODE REPLICAS | ||
+ | d0i4ac4fshw0 | ||
+ | funp5kboyip1 | ||
+ | dpdkc49oj671 | ||
+ | vrkahv38v5mn | ||
+ | t4u16cpdrx21 | ||
+ | so40eljbcviy | ||
+ | </ | ||
+ | |||
+ | <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. | ||
+ | </ | ||
+ | |||
+ | Retournez à la fenêtre d' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Comme vous pouvez constater, conformément au fichier **docker-stack.yml**, | ||
+ | |||
+ | Retournez à votre connexion SSH et consultez l' | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | NETWORK ID NAME | ||
+ | sw489bb290zb | ||
+ | smuxoglyudpo | ||
+ | lfizui95od90 | ||
+ | 24be8a0f0ef5 | ||
+ | d4c9b0c9437a | ||
+ | f3cb3bc3c581 | ||
+ | x7l4mk4ldb75 | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que les trois réseaux créés sont de type **overlay**. | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | root@worker1: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | qhysvpoolsw0 | ||
+ | f9a69d02de3b | ||
+ | ee22b3e623ca | ||
+ | f3cb3bc3c581 | ||
+ | x7l4mk4ldb75 | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que seul le réseau **app_frontend** a été créé dans **worker1**. | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | root@worker2: | ||
+ | NETWORK ID NAME DRIVER | ||
+ | s4gbgi4isp1i | ||
+ | qhysvpoolsw0 | ||
+ | 0e6c118bf3fd | ||
+ | 0ce1d8369c29 | ||
+ | f3cb3bc3c581 | ||
+ | x7l4mk4ldb75 | ||
+ | de563e30d473 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que les deux réseaux **app_frontend** et **app_backend** ont été créés dans **worker2**. | ||
+ | </ | ||
+ | |||
+ | Consultez les informations concernant le réseau **app_backend** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le réseau est **10.0.3.0/ | ||
+ | </ | ||
+ | |||
+ | Consultez les informations concernant le réseau **app_frontend** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le réseau est **10.0.2.0/ | ||
+ | </ | ||
+ | |||
+ | Consultez les informations concernant le réseau **app_default** : | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le réseau est **10.0.1.0/ | ||
+ | </ | ||
+ | |||
+ | Schématiquement, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Dernièrement, | ||
+ | |||
+ | < | ||
+ | root@manager: | ||
+ | NAME SERVICES | ||
+ | app | ||
+ | |||
+ | root@manager: | ||
+ | Removing service app_db | ||
+ | Removing service app_redis | ||
+ | Removing service app_result | ||
+ | Removing service app_visualizer | ||
+ | Removing service app_vote | ||
+ | Removing service app_worker | ||
+ | Removing network app_frontend | ||
+ | Removing network app_backend | ||
+ | Removing network app_default | ||
+ | |||
+ | root@manager: | ||
+ | CONTAINER ID IMAGE | ||
+ | d02c6115724c | ||
+ | </ | ||
+ | |||
+ | ----- | ||
+ | |||
+ | Copyright © 2024 Hugh Norris. |