Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:docker3:drf05 [2021/11/26 15:41] adminelearning:workbooks:docker3:drf05 [2024/02/21 13:40] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2021.01**+Version : **2024.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
Ligne 42: Ligne 42:
 Le trafic lié à la gestion des services swarm est crypté par défaut avec l’algorithme AES en mode GCM. Afin de crypter le trafic des données liées aux applications il est possible d'utiliser l'option **--opt encrypted** lors de la création du réseau overlay. Dans ce cas, Docker crée des tunnels IPSEC entre chaque nœud qui utilise le même algorithme que le trafic des services swarm. Il y a donc une dégradation des performances à évaluer avant la mise en production. Dans les deux cas les clefs sont modifiées toutes les 12 heures (voir [[https://www.vaultproject.io/docs/internals/rotation.html]]) Le trafic lié à la gestion des services swarm est crypté par défaut avec l’algorithme AES en mode GCM. Afin de crypter le trafic des données liées aux applications il est possible d'utiliser l'option **--opt encrypted** lors de la création du réseau overlay. Dans ce cas, Docker crée des tunnels IPSEC entre chaque nœud qui utilise le même algorithme que le trafic des services swarm. Il y a donc une dégradation des performances à évaluer avant la mise en production. Dans les deux cas les clefs sont modifiées toutes les 12 heures (voir [[https://www.vaultproject.io/docs/internals/rotation.html]])
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **ATTENTION** : Le cryptage des données liées aux applications n'est pas compatible avec Windows(tm). Lors de la connexion du nœud Windows(tm) à un réseau overlay crypté, aucune erreur ne sera rapportée. Par contre le nœud sera incapable de communiquer. **ATTENTION** : Le cryptage des données liées aux applications n'est pas compatible avec Windows(tm). Lors de la connexion du nœud Windows(tm) à un réseau overlay crypté, aucune erreur ne sera rapportée. Par contre le nœud sera incapable de communiquer.
 </WRAP> </WRAP>
Ligne 49: Ligne 49:
  
 <code> <code>
-trainee@traineeXX:~ssh -l trainee 10.0.2.62 +root@debian11:~ssh -l trainee 10.0.2.62 
-...+The authenticity of host '10.0.2.62 (10.0.2.62)' can't be established. 
 +ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. 
 +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
 +Warning: Permanently added '10.0.2.62' (ECDSA) to the list of known hosts. 
 +trainee@10.0.2.62's password: trainee 
 +Linux manager.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 
 + 
 +The programs included with the Debian GNU/Linux system are free software; 
 +the exact distribution terms for each program are described in the 
 +individual files in /usr/share/doc/*/copyright. 
 + 
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
 +permitted by applicable law. 
 +Last login: Sun Jul 17 08:27:29 2022 from 10.0.2.1 
 +trainee@manager:~$ su - 
 +Mot de passe : fenestros 
 +root@manager:~# 
 root@manager:~# docker swarm leave root@manager:~# docker swarm leave
 Node left the swarm. Node left the swarm.
Ligne 68: Ligne 85:
  
 <code> <code>
-trainee@traineeXX:~ssh -l trainee 10.0.2.63 +root@manager:~ssh -l trainee 10.0.2.63 
-...+The authenticity of host '10.0.2.63 (10.0.2.63)' can't be established. 
 +ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. 
 +Are you sure you want to continue connecting (yes/no)? yes 
 +Warning: Permanently added '10.0.2.63' (ECDSA) to the list of known hosts. 
 +trainee@10.0.2.63's password: trainee 
 +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 /usr/share/doc/*/copyright. 
 + 
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
 +permitted by applicable law. 
 +Last login: Sun Mar 21 16:34:26 2021 from 10.0.2.11 
 +trainee@worker1:~$ su - 
 +Mot de passe : fenestros 
 +root@worker1:~# 
 root@worker1:~# docker swarm leave root@worker1:~# docker swarm leave
 Node left the swarm. Node left the swarm.
 +
 root@worker1:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377 root@worker1:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377
 This node joined a swarm as a worker. This node joined a swarm as a worker.
 +
 root@worker1:~# exit root@worker1:~# exit
-trainee@worker1:~exit+déconnexion 
 + 
 +trainee@worker1:~exit 
 +déconnexion 
 +Connection to 10.0.2.63 closed. 
 + 
 +root@manager:~# 
 </code> </code>
  
Ligne 81: Ligne 123:
  
 <code> <code>
-trainee@traineeXX:~ssh -l trainee 10.0.2.64 +root@manager:~ssh -l trainee 10.0.2.64 
-...+The authenticity of host '10.0.2.64 (10.0.2.64)' can't be established. 
 +ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. 
 +Are you sure you want to continue connecting (yes/no)? yes 
 +Warning: Permanently added '10.0.2.64' (ECDSA) to the list of known hosts. 
 +trainee@10.0.2.64's password: trainee 
 +Linux worker2.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 
 + 
 +The programs included with the Debian GNU/Linux system are free software; 
 +the exact distribution terms for each program are described in the 
 +individual files in /usr/share/doc/*/copyright. 
 + 
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
 +permitted by applicable law. 
 +Last login: Sun Mar 21 16:18:25 2021 from 10.0.2.11 
 +trainee@worker2:~$ su - 
 +Mot de passe : fenestros 
 +root@worker2:~#  
 root@worker2:~# docker swarm leave root@worker2:~# docker swarm leave
 Node left the swarm. Node left the swarm.
 +
 root@worker2:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377 root@worker2:~# docker swarm join --token SWMTKN-1-23d7n1fkkk9rvlhty106q9390bfpf9daljjguq3s807le6c5qs-e0s1yqsajvmi7s8t9l9mw48ao 10.0.2.62:2377
 This node joined a swarm as a worker. This node joined a swarm as a worker.
 +
 root@worker2:~# exit root@worker2:~# exit
-trainee@worker2:~exit+déconnexion 
 + 
 +trainee@worker2:~exit 
 +déconnexion 
 +Connection to 10.0.2.64 closed. 
 + 
 +root@manager:~# 
 </code> </code>
  
Ligne 94: Ligne 161:
  
 <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 122: Ligne 187:
 </code> </code>
  
-<WRAP center round info 60%>+<WRAP center round info 50%>
 **Info** : Le réseau **docker_gwbridge** relie le réseau **ingress** à l'adaptateur réseau de l'hôte et par conséquent relie le démon Docker aux autres démons Docker qui participent dans swarm. **Info** : Le réseau **docker_gwbridge** relie le réseau **ingress** à l'adaptateur réseau de l'hôte et par conséquent relie le démon Docker aux autres démons Docker qui participent dans swarm.
 </WRAP> </WRAP>
  
-<WRAP center round tip 60%>+<WRAP center round tip 50%>
 **Best Practice** : Docker recommande l'utilisation de réseaux de type overlay différents pour chaque application ou groupe d'applications. **Best Practice** : Docker recommande l'utilisation de réseaux de type overlay différents pour chaque application ou groupe d'applications.
 </WRAP> </WRAP>
Ligne 163: Ligne 228:
 </code> </code>
  
-<WRAP center round info 60%>+<WRAP center round info 50%>
 **Info** : Le service publie le port 80 qui est visible de l'extérieur. Les conteneurs communiquent entre eux sans ouvrir de ports supplémentaires. **Info** : Le service publie le port 80 qui est visible de l'extérieur. Les conteneurs communiquent entre eux sans ouvrir de ports supplémentaires.
 </WRAP> </WRAP>
Ligne 308: Ligne 373:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez ici les informations concernant les ports et les Endpoints utilisés par le service. **Important** : Notez ici les informations concernant les ports et les Endpoints utilisés par le service.
 </WRAP> </WRAP>
Ligne 525: Ligne 590:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **nginx-net** a été créé automatiquement sur les deux Workers. Notez aussi le contenu de la section **Peers** qui liste les nœuds ainsi que la section **Containers** qui liste les conteneurs sur chaque nœud qui sont connectés au réseau overlay. **Important** : Notez que le réseau **nginx-net** a été créé automatiquement sur les deux Workers. Notez aussi le contenu de la section **Peers** qui liste les nœuds ainsi que la section **Containers** qui liste les conteneurs sur chaque nœud qui sont connectés au réseau overlay.
 </WRAP> </WRAP>
Ligne 675: Ligne 740:
 root@manager:~# docker service rm my-nginx root@manager:~# docker service rm my-nginx
 my-nginx my-nginx
 +
 root@manager:~# docker network rm nginx-net nginx-net-2 root@manager:~# docker network rm nginx-net nginx-net-2
 nginx-net nginx-net
Ligne 698: Ligne 764:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le **NETWORK-ID** ici est **hrs25w4l951kkickhj6262mjg**. **Important** : Notez que le **NETWORK-ID** ici est **hrs25w4l951kkickhj6262mjg**.
 </WRAP> </WRAP>
Ligne 726: Ligne 792:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **test-net** n'a pas été créé. **Important** : Notez que le réseau **test-net** n'a pas été créé.
 </WRAP> </WRAP>
Ligne 755: Ligne 821:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **test-net**, ayant le même **NETWORK ID**, a été automatiquement créé lors de la création du conteneur **alpine2**.  **Important** : Notez que le réseau **test-net**, ayant le même **NETWORK ID**, a été automatiquement créé lors de la création du conteneur **alpine2**. 
 </WRAP> </WRAP>
Ligne 771: Ligne 837:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **test-net** n'a pas été créé. **Important** : Notez que le réseau **test-net** n'a pas été créé.
 </WRAP> </WRAP>
Ligne 781: Ligne 847:
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
 ce9097b864dc        alpine              "/bin/sh"           23 minutes ago      Up 23 minutes                           alpine2 ce9097b864dc        alpine              "/bin/sh"           23 minutes ago      Up 23 minutes                           alpine2
 +
 root@worker1:~# docker attach alpine2 root@worker1:~# docker attach alpine2
 +/ # 
 +
 / # ping -c 2 alpine1 / # ping -c 2 alpine1
 PING alpine1 (10.0.2.2): 56 data bytes PING alpine1 (10.0.2.2): 56 data bytes
Ligne 797: Ligne 866:
 <code> <code>
 root@manager:~# docker attach alpine1 root@manager:~# docker attach alpine1
 +/ # 
 +
 / # ping -c 2 alpine2 / # ping -c 2 alpine2
 PING alpine2 (10.0.0.4): 56 data bytes PING alpine2 (10.0.0.4): 56 data bytes
Ligne 817: Ligne 888:
 Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d
 Status: Downloaded newer image for alpine:latest Status: Downloaded newer image for alpine:latest
 +/ # 
 +
 / # ping -c 2 alpine1 / # ping -c 2 alpine1
 PING alpine1 (10.0.2.2): 56 data bytes PING alpine1 (10.0.2.2): 56 data bytes
Ligne 847: Ligne 920:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau **test-net** a été supprimé. **Important** : Notez que le réseau **test-net** a été supprimé.
 </WRAP> </WRAP>
Ligne 862: Ligne 935:
 <code> <code>
 / # exit / # exit
 +
 root@manager:~# docker container stop alpine1 root@manager:~# docker container stop alpine1
 alpine1 alpine1
 +
 root@manager:~# docker network ls root@manager:~# docker network ls
 NETWORK ID          NAME                DRIVER              SCOPE NETWORK ID          NAME                DRIVER              SCOPE
Ligne 872: Ligne 947:
 de563e30d473        none                null                local de563e30d473        none                null                local
 518l09lcjhsp        test-net            overlay             swarm 518l09lcjhsp        test-net            overlay             swarm
 +
 root@manager:~# docker network rm test-net root@manager:~# docker network rm test-net
 test-net test-net
Ligne 892: Ligne 968:
 root@manager:~# docker network create --driver overlay --ingress --subnet=10.11.0.0/16 --gateway=10.11.0.2 --opt com.docker.network.driver.mtu=1200 my-ingress root@manager:~# docker network create --driver overlay --ingress --subnet=10.11.0.0/16 --gateway=10.11.0.2 --opt com.docker.network.driver.mtu=1200 my-ingress
 44ozn3vtg23zkksrvloxuulcl 44ozn3vtg23zkksrvloxuulcl
 +
 root@manager:~# docker network ls root@manager:~# docker network ls
 NETWORK ID          NAME                DRIVER              SCOPE NETWORK ID          NAME                DRIVER              SCOPE
Ligne 1154: Ligne 1231:
 </code> </code>
  
-Téléchargez maintenant le fichier **docker-stack.yml** :+Créez maintenant le fichier **docker-stack.yml** :
  
 <code> <code>
-root@manager:~# curl -O https://raw.githubusercontent.com/docker/example-voting-app/master/docker-stack.yml +root@manager:~# vi docker-stack.yml 
-  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current +
-                                 Dload  Upload   Total   Spent    Left  Speed +
-100  1707  100  1707    0       2030      0 --:--:-- --:--:-- --:--:--  2029 +
-</code>+
  
-Consultez le fichier téléchargé : 
- 
-<code> 
 root@manager:~# cat docker-stack.yml  root@manager:~# cat docker-stack.yml 
 version: "3" version: "3"
Ligne 1284: Ligne 1354:
 La clef **deploy** permet de spécifier des options lors du déploiement du service : La clef **deploy** permet de spécifier des options lors du déploiement du service :
  
-  * **mode** - Il existe deux types de services. **Replicated** où on spécifie le nombre d'instances que Docker doit mettre en place sur les conteneurs **disponibles** et **Global** qui implique que Docker démarrera une instance du service sur chaque conteneur chaque fois qu'un conteneur devient disponible.+  * **mode** - Il existe deux types de services. **Replicated** où on spécifie le nombre d'instances que Docker doit mettre en place sur les hôtes **disponibles** en fonction de la valeur de **replicas** et **Global** qui implique que Docker démarrera une instance du service sur chaque hôte chaque fois qu'un hôte devient disponible. 
 + 
 +{{ :elearning:workbooks:docker2:tvl1m.png?nolink&400 |}} 
   * **replicas** - spécifie le nombre de replicas   * **replicas** - spécifie le nombre de replicas
   * **restart_policy** spécifie ce qui se passe en cas d'arrêt du service. Dans le cas ci-dessus, docker va essayer de re-démarrer le service **3** fois (**max_attempts**) à des intervalles de **10** secondes (**delay**) en attendant chaque fois **120** secondes (**window**) pour constater si le service s'est effectivement re-démarré,   * **restart_policy** spécifie ce qui se passe en cas d'arrêt du service. Dans le cas ci-dessus, docker va essayer de re-démarrer le service **3** fois (**max_attempts**) à des intervalles de **10** secondes (**delay**) en attendant chaque fois **120** secondes (**window**) pour constater si le service s'est effectivement re-démarré,
Ligne 1304: Ligne 1377:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** - Notez que chaque réseau et chaque service a comme préfixe le nom de l'application **app**. **Important** - Notez que chaque réseau et chaque service a comme préfixe le nom de l'application **app**.
 </WRAP> </WRAP>
Ligne 1329: Ligne 1402:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que la configuration du service **visualizer** a exposé le port **8080**. De cette façon, ce service est disponible sur le port 8080 de chaque nœud dans la swarm. **Important** : Notez que la configuration du service **visualizer** a exposé le port **8080**. De cette façon, ce service est disponible sur le port 8080 de chaque nœud dans la swarm.
 </WRAP> </WRAP>
  
-Retournez à la fenêtre d'Apache Guacamole dans le navigateur de **votre** ordinateur. Cliquez sur la connexion **TraineeXX_VNC**. Lancez ensuite un navigateur Internet dans la machine virtuelle **debian9**. Naviguez à l'URL http://10.0.2.62:8080 et consultez le service **visualizer** :+Retournez à la fenêtre d'Apache Guacamole dans le navigateur de **votre** ordinateur. Cliquez sur la connexion **Debian11_10.0.2.46_VNC**. Lancez ensuite un navigateur Internet. Naviguez à l'URL http://10.0.2.62:8080 et consultez le service **visualizer** :
  
 {{ :elearning:workbooks:docker:docker001.png?direct&600 |}} {{ :elearning:workbooks:docker:docker001.png?direct&600 |}}
 +
 +{{ :elearning:workbooks:docker:docker001.png |}}
  
 Comme vous pouvez constater, conformément au fichier **docker-stack.yml**, les trois conteneurs **db**, **worker** et **visualizer** ont été démarrés sur le nœud manager. Comme vous pouvez constater, conformément au fichier **docker-stack.yml**, les trois conteneurs **db**, **worker** et **visualizer** ont été démarrés sur le nœud manager.
Ligne 1354: Ligne 1429:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que les trois réseaux créés sont de type **overlay**. **Important** : Notez que les trois réseaux créés sont de type **overlay**.
 </WRAP> </WRAP>
Ligne 1369: Ligne 1444:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que seul le réseau **app_frontend** a été créé dans **worker1**. **Important** : Notez que seul le réseau **app_frontend** a été créé dans **worker1**.
 </WRAP> </WRAP>
Ligne 1385: Ligne 1460:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que les deux réseaux **app_frontend** et **app_backend** ont été créés dans **worker2**. **Important** : Notez que les deux réseaux **app_frontend** et **app_backend** ont été créés dans **worker2**.
 </WRAP> </WRAP>
Ligne 1461: Ligne 1536:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau est **10.0.3.0/24** et la passerelle **10.0.3.1**. **Important** : Notez que le réseau est **10.0.3.0/24** et la passerelle **10.0.3.1**.
 </WRAP> </WRAP>
Ligne 1534: Ligne 1609:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau est **10.0.2.0/24** et la passerelle **10.0.2.1**. **Important** : Notez que le réseau est **10.0.2.0/24** et la passerelle **10.0.2.1**.
 </WRAP> </WRAP>
Ligne 1599: Ligne 1674:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que le réseau est **10.0.1.0/24** et la passerelle **10.0.1.1**. **Important** : Notez que le réseau est **10.0.1.0/24** et la passerelle **10.0.1.1**.
 </WRAP> </WRAP>
Ligne 1613: Ligne 1688:
 NAME                SERVICES            ORCHESTRATOR NAME                SERVICES            ORCHESTRATOR
 app                                   Swarm app                                   Swarm
 +
 root@manager:~# docker stack rm app root@manager:~# docker stack rm app
 Removing service app_db Removing service app_db
Ligne 1623: Ligne 1699:
 Removing network app_backend Removing network app_backend
 Removing network app_default Removing network app_default
 +
 root@manager:~# docker ps -a root@manager:~# docker ps -a
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                 NAMES CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                 NAMES
Ligne 1629: Ligne 1706:
  
 ----- -----
-<html> + 
-<div align="center"> +Copyright © 2024 Hugh Norris.
-Copyright © 2021 Hugh NORRIS +
-</div> +
-</html>+
Menu