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:docker1:drf06 [2020/02/08 12:53] – admin | elearning:workbooks:docker1:drf06 [2021/12/29 10:32] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~PDF: | ~~PDF: | ||
- | Version : **2020.01** | + | Version : **2022.01** |
Dernière mise-à-jour : ~~LASTMOD~~ | Dernière mise-à-jour : ~~LASTMOD~~ | ||
- | ======DOF107 | + | ======XW330 - Validation de la Formation====== |
- | Cette unité contient trois LABs : | + | =====Contenu du Module===== |
- | * LAB #5 - Gestion | + | * **XW330 |
- | * LAB #6 - Création d'un Réseau overlay Personnalisé, | + | * Contenu |
- | * LAB #7 - Gestion | + | * Support de Cours |
+ | * Rappel du Programme de la Formation | ||
+ | * Jour #1 | ||
+ | * Jour #2 | ||
+ | * Évaluation | ||
- | =====L' | + | =====Support de Cours===== |
- | L'approche réseau | + | L'accès au supports |
- | * Sandbox, | + | L'utilisation de cette plateforme permet : |
- | * 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'endpoints qui communiquent directement. | + | |
- | {{ : | + | * de mesurer le niveau du stagiaire avant la formation et celui atteint en fin de formation grâce aux tests de validations des acquis, |
+ | * de suivre du travail de chaque participant en termes de temps passé dans chaque module grâce à un reporting détaillé. | ||
- | 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**, | + | L'abonnement permet aux stagiaires |
- | Comme son nom indique, un réseau overlay est un réseau qui se positionne au-dessus du réseau | + | * de télécharger |
- | + | * de refaire les LABS en mode autonome en cas de missions décalées en relation avec le contenu | |
- | Le trafic lié à la gestion des services swarm est crypté par défaut avec l’algorithme AES en mode GCM. Afin de crypter | + | * de rester en contact avec le formateur en cas de problèmes |
+ | * de consulter | ||
+ | * d' | ||
- | <WRAP center round important 60%> | + | =====Rappel du Programme |
- | **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. | + | |
- | </ | + | |
- | =====LAB #5 - Gestion du Réseau overlay===== | + | ====Jour #1==== |
- | ====Importation des Machines Virtuelles==== | + | * **XW330 - Docker : Mise en oeuvre** - 1 heure. |
+ | * Contenu du Module | ||
+ | * Prérequis | ||
+ | * Matériel | ||
+ | * Logiciels | ||
+ | * Internet | ||
+ | * Utilisation de l' | ||
+ | * Programme de la Formation | ||
- | Ouvrez VirtualBox et importez | + | * **DOF101 - La Virtualisation par Isolation** - 3 heures. |
+ | * Présentation de la Virtualisation par Isolation | ||
+ | * Historique | ||
+ | * Présentation des Namespaces | ||
+ | * Présentation des CGroups | ||
+ | * LAB #1 - Travailler avec les CGroups | ||
+ | * 1.1 - Limitation de la Mémoire | ||
+ | * 1.2 - Le Paquet cgroup-tools | ||
+ | * La commande cgcreate | ||
+ | * La Commande cgexec | ||
+ | * La Commande cgdelete | ||
+ | * Le Fichier / | ||
+ | * Présentation de Linux Containers | ||
+ | * LAB #2 - Travailler avec LXC | ||
+ | * 2.1 - Installation | ||
+ | * 2.2 - Création d'un Conteneur Simple | ||
+ | * 2.3 - Démarrage d'un Conteneur Simple | ||
+ | * 2.4 - S' | ||
+ | * 2.5 - Commandes LXC de Base | ||
+ | * La Commande lxc-console | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | | + | |
+ | * Présentation de Docker | ||
+ | * LAB #1 - Travailler avec Docker | ||
+ | * 1.1 - Installer docker | ||
+ | * 1.2 - Démarrer | ||
+ | * 1.3 - Consulter la Liste des Conteneurs et Images | ||
+ | * 1.4 - Rechercher une Image dans un Dépôt | ||
+ | * 1.5 - Supprimer un Conteneur d'une Image | ||
+ | * 1.6 - Créer une Image à partir d'un Conteneur Modifié | ||
+ | * 1.7 - Supprimer une Image | ||
+ | * 1.8 - Créer un Conteneur avec un Nom Spécifique | ||
+ | * 1.9 - Exécuter une Commande dans un Conteneur | ||
+ | * 1.10 - Injecter des Variables d' | ||
+ | * 1.11 - Modifier le Nom d' | ||
+ | * 1.12 - Mapper des Ports d'un Conteneur | ||
+ | * 1.13 - Démarrer un Conteneur en mode Détaché | ||
+ | * 1.14 - Accéder aux Services d'un Conteneur de l' | ||
+ | * 1.15 - Arrêter et Démarrer un Conteneur | ||
+ | * 1.16 - Utiliser des Signaux avec un Conteneur | ||
+ | * 1.17 - Forcer la Suppression d'un Conteneur en cours d' | ||
+ | * 1.18 - Utilisation Simple d'un Volume | ||
+ | * 1.19 - Télécharger une image sans créer un conteneur | ||
+ | * 1.20 - S' | ||
+ | * 1.21 - Installer un logiciel dans le conteneur | ||
+ | * 1.22 - Utilisation de la commande docker commit | ||
+ | * 1.23 - Se connecter au serveur du conteneur de l' | ||
- | Les quatre machines virtuelles sont dans un réseau NAT : | + | ====Jour #2==== |
- | ^ Machine ^ Nom d'hôte ^ Adresse IP ^ Redirection de Port ^ | + | * **DOF103 - Gérer les Images Docker** - 2 heures. |
- | | Manager | manager.i2tch.loc | 10.0.2.15 | 2222 | | + | * Contenu du Module |
- | | Worker1 | worker1.i2tch.loc | 10.0.2.4 | 2322 | | + | * LAB #1 - Re-créer une image officielle docker |
- | | Worker2 | worker2.i2tch.loc | 10.0.2.5 | 2422 | | + | * 1.1 - Utilisation |
- | | Debian_9 | client.i2tch.loc | 10.0.2.9 | 2522 | | + | * 1.2 - FROM |
+ | * 1.3 - RUN | ||
+ | * 1.4 - ENV | ||
+ | * 1.5 - VOLUME | ||
+ | * 1.6 - COPY | ||
+ | * 1.7 - ENTRYPOINT | ||
+ | * 1.8 - EXPOSE | ||
+ | * 1.9 - CMD | ||
+ | * 1.10 - Autres Commandes | ||
+ | * LAB #2 - Créer un Dockerfile | ||
+ | * 2.1 - Création et test du script | ||
+ | * 2.2 - Bonnes Pratiques liées au Cache | ||
- | Les noms d'utilisateurs et les mots de passe sont identiques pour chaque machine : | + | * **DOF104 - Gestion des Volumes, du Réseau et des Ressources** - 2 heures. |
+ | * LAB #1 - Gestion des Volumes | ||
+ | * 1.1 - Gestion Automatique par Docker | ||
+ | * 1.2 - Gestion Manuelle | ||
+ | * LAB #2 - Gestion du Réseau | ||
+ | * 2.1 - L' | ||
+ | * Bridge | ||
+ | * Host | ||
+ | * None | ||
+ | * Liens | ||
+ | * 2.2 - Lancer Wordpress dans un container | ||
+ | * 2.3 - Gestion d'une Architecture | ||
+ | * LAB #3 - Superviser les Conteneurs | ||
+ | * 3.1 - Les Journaux | ||
+ | * 3.2 - Les Processus | ||
+ | * 3.3 - L' | ||
+ | * LAB #4 - Gestion des Ressources | ||
+ | * 4.1 - Limiter la Mémoire | ||
- | ^ Utilisateur ^ Mot de Passe ^ | + | * **DOF202 - Docker Compose, Docker Machine et Docker Swarm** - 2 heures. |
- | | trainee | trainee | | + | * LAB #1 - Docker Compose |
- | | root | fenestros | | + | * 1.1 - Installation |
+ | * 1.2 - Utiliser docker-compose | ||
+ | * LAB #2 - Docker Machine | ||
+ | * 2.1 - Présentation | ||
+ | * 2.2 - Création | ||
+ | * 2.3 - Lister les VM Docker | ||
+ | * 2.4 - Obtenir l' | ||
+ | * 2.5 - Se connecter à une VM Docker | ||
+ | * LAB #3 - Docker Swarm | ||
+ | * 3.1 - Présentation | ||
+ | * 3.2 - Initialiser Docker Swarm | ||
+ | * 3.3 - Le Statut Leader | ||
+ | * 3.4 - Rejoindre le Swarm | ||
+ | * 3.5 - Consulter les Informations de Swarm | ||
+ | * 3.6 - Démarrer un Service | ||
+ | * 3.7 - Augmentation et Réduction du Service | ||
+ | * 3.8 - Consulter le Statut d'un Nœud | ||
+ | * 3.9 - Haute Disponibilité | ||
+ | * 3.10 - Supprimer un Service | ||
+ | * 3.11 - Sauvegarder Docker Swarm | ||
+ | * 3.12 - Restaurer Docker Swarm | ||
- | <WRAP center round todo 60%> | + | |
- | **A Faire** : Créez les redirections | + | * Support |
- | </ | + | |
+ | | ||
+ | | ||
+ | | ||
+ | * Validation des acquis | ||
- | ====Connexion aux Machines Virtuelles==== | ||
- | Vous devez vous connecter aux machines virtuelles | + | =====Évaluation |
- | ===MAC et Linux=== | + | Afin de valider votre formation, veuillez compléter l’Évaluation de la Formation ainsi que la Validation des Acquis. |
- | Ouvrez un terminal et tapez la commande suivante pour la machine **Manager** : | + | ----- |
- | < | + | Copyright © 2022 Hugh Norris |
- | $ ssh -l trainee localhost | + | |
- | </ | + | |
- | Ouvrez un autre terminal et tapez la commande suivante pour la machine **Worker1** : | ||
- | |||
- | < | ||
- | $ ssh -l trainee localhost -p 2322 | ||
- | </ | ||
- | |||
- | Ouvrez un autre terminal et tapez la commande suivante pour la machine **Worker2** : | ||
- | |||
- | < | ||
- | $ ssh -l trainee localhost -p 2422 | ||
- | </ | ||
- | |||
- | Ouvrez un autre terminal et tapez la commande suivante pour la machine **Debian_9** : | ||
- | |||
- | < | ||
- | $ ssh -l trainee localhost -p 2522 | ||
- | </ | ||
- | |||
- | ===Windows=== | ||
- | |||
- | Ouvrez **putty** et utilisez les informations suivantes pour vous connecter à **Manager** : | ||
- | |||
- | * Host Name --> localhost | ||
- | * Port --> 2222 | ||
- | |||
- | Ouvrez **putty** et utilisez les informations suivantes pour vous connecter à **Worker1** : | ||
- | |||
- | * Host Name --> localhost | ||
- | * Port --> 2322 | ||
- | |||
- | Ouvrez **putty** et utilisez les informations suivantes pour vous connecter à **Worker2** : | ||
- | |||
- | * Host Name --> localhost | ||
- | * Port --> 2422 | ||
- | |||
- | Ouvrez **putty** et utilisez les informations suivantes pour vous connecter à **Debian_9** : | ||
- | |||
- | * Host Name --> localhost | ||
- | * Port --> 2522 | ||
- | |||
- | Commencez par vérifiez le statut du swarm : | ||
- | |||
- | < | ||
- | 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 60%> | ||
- | **Info** : Le réseau **docker_gwbridge** relie le réseau **ingress** à l' | ||
- | </ | ||
- | |||
- | <WRAP center round tip 60%> | ||
- | **Best Practice** : Docker recommande l' | ||
- | </ | ||
- | |||
- | ====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 | ||
- | </ | ||
- | |||
- | ====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 60%> | ||
- | **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 60%> | ||
- | **Important** : Notez ici les informations concernant les ports et les Endpoints utilisés par le service. | ||
- | </ | ||
- | |||
- | ====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 60%> | ||
- | **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 | ||
- | </ | ||
- | |||
- | ====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 60%> | ||
- | **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 60%> | ||
- | **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 60%> | ||
- | **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 60%> | ||
- | **Important** : Notez que le réseau **test-net** n'a pas été créé. | ||
- | </ | ||
- | |||
- | Retournez dans la VM **Manager** et essayez de contacter le conteneur **alpine2** à partir du conteneur **alpine1** : | ||
- | |||
- | < | ||
- | / # 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 **Worker1** essayez de contacter le conteneur **alpine1** : | ||
- | |||
- | < | ||
- | root@worker1: | ||
- | / # ping -c 2 alpine1 | ||
- | PING alpine1 (10.0.0.2): 56 data bytes | ||
- | 64 bytes from 10.0.0.2: seq=0 ttl=64 time=0.703 ms | ||
- | 64 bytes from 10.0.0.2: seq=1 ttl=64 time=1.679 ms | ||
- | |||
- | --- alpine1 ping statistics --- | ||
- | 2 packets transmitted, | ||
- | round-trip min/avg/max = 0.703/ | ||
- | / # | ||
- | </ | ||
- | |||
- | Arrêtez maintenant le conteneur **alpine2** sur **Worker1** : | ||
- | |||
- | < | ||
- | / # exit | ||
- | root@worker1: | ||
- | alpine2 | ||
- | </ | ||
- | |||
- | Saisissez la commande **docker network ls** : | ||
- | |||
- | < | ||
- | root@worker1: | ||
- | NETWORK ID NAME DRIVER | ||
- | 3bb80f391804 | ||
- | ee22b3e623ca | ||
- | f3cb3bc3c581 | ||
- | r8htcvc8oxmz | ||
- | de563e30d473 | ||
- | </ | ||
- | |||
- | <WRAP center round important 60%> | ||
- | **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** : | ||
- | |||
- | < | ||
- | root@manager: | ||
- | test-net | ||
- | </ | ||
- | |||
- | =====LAB #6 - 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 | ||
- | </ | ||
- | |||
- | 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 | ||
- | </ | ||
- | |||
- | <WRAP center round important 60%> | ||
- | **Important** : Prenez une instantanée de chacune de vos machines virtuelles. | ||
- | </ | ||
- | |||
- | =====LAB #7 - 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' | ||
- | |||
- | {{ : | ||
- | |||
- | ====Mise en Place avec Docker==== | ||
- | |||
- | Cette application pourrait être mise en place sous docker avec les commandes suivantes : | ||
- | |||
- | < | ||
- | docker run -d --name=redis redis | ||
- | docker run -d --name=db postgres: | ||
- | docker run -d --name=vote -p 5000:80 --link redis:redis dockersamples/ | ||
- | docker run -d --name=result -p 5001:80 --link db:db dockersamples/ | ||
- | docker run -d --name=worker --link db:db ---link redis:redis dockersamples/ | ||
- | </ | ||
- | |||
- | Par contre, Docker annonce le retrait éventuel de l' | ||
- | |||
- | " | ||
- | |||
- | Deuxièmement, | ||
- | |||
- | ====Mise en Place avec Docker 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, | ||
- | |||
- | < | ||
- | root@manager: | ||
- | ID HOSTNAME | ||
- | b85hxlixbr1mh1txd1hrfe4us * | ||
- | 4sui75vvdhmet4qvt0zbvzlzl | ||
- | lbjtg5o9kw3x6xg7frm07jfuw | ||
- | </ | ||
- | |||
- | Téléchargez maintenant le fichier **docker-stack.yml** : | ||
- | |||
- | < | ||
- | root@manager: | ||
- | % Total % Received % Xferd Average Speed | ||
- | | ||
- | 100 1707 100 1707 0 | ||
- | </ | ||
- | |||
- | Consultez le fichier téléchargé : | ||
- | |||
- | < | ||
- | 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: | ||
- | 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 60%> | ||
- | **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 60%> | ||
- | **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. | ||
- | </ | ||
- | |||
- | A partir de la machine virtuelle **manager**, | ||
- | |||
- | {{ : | ||
- | |||
- | Comme vous pouvez constater, conformément au fichier **docker-stack.yml**, | ||
- | |||
- | Consultez maintenant l' | ||
- | |||
- | < | ||
- | root@manager: | ||
- | NETWORK ID NAME | ||
- | sw489bb290zb | ||
- | smuxoglyudpo | ||
- | lfizui95od90 | ||
- | 24be8a0f0ef5 | ||
- | d4c9b0c9437a | ||
- | f3cb3bc3c581 | ||
- | x7l4mk4ldb75 | ||
- | de563e30d473 | ||
- | </ | ||
- | |||
- | <WRAP center round important 60%> | ||
- | **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 60%> | ||
- | **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 60%> | ||
- | **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 60%> | ||
- | **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 60%> | ||
- | **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 60%> | ||
- | **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 | ||
- | </ | ||
- | |||
- | ----- | ||
- | < | ||
- | <div align=" | ||
- | Copyright © 2020 Hugh NORRIS | ||
- | </ | ||
- | </ |