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:drf03 [2020/08/10 14:13] – admin | elearning:workbooks:docker1:drf03 [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~~ | ||
- | ======DOF104 - Gestion des Volumes, du Réseau et des Ressources====== | + | ======DOF104 - Gestion des Volumes, du Réseau et de la Supervision |
=====Contenu du Module===== | =====Contenu du Module===== | ||
* **DOF104 - Gestion des Volumes, du Réseau et des Ressources** | * **DOF104 - Gestion des Volumes, du Réseau et des Ressources** | ||
+ | * Contenu du Module | ||
* LAB #1 - Gestion des Volumes | * LAB #1 - Gestion des Volumes | ||
- | * Gestion Automatique par Docker | + | * 1.1 - Gestion Automatique par Docker |
- | * Gestion Manuelle d'un Volume | + | * 1.2 - Gestion Manuelle d'un Volume |
* LAB #2 - Gestion du Réseau | * LAB #2 - Gestion du Réseau | ||
- | * L' | + | * 2.1 - L' |
* Bridge | * Bridge | ||
+ | * Host | ||
* None | * None | ||
* Liens | * Liens | ||
- | * Lancer Wordpress dans un container | + | * 2.2 - Lancer Wordpress dans un container |
- | * Gestion d'une Architecture de Microservices | + | * 2.3 - Gestion d'une Architecture de Microservices |
* LAB #3 - Superviser les Conteneurs | * LAB #3 - Superviser les Conteneurs | ||
- | * Les Journaux | + | * 3.1 - Les Journaux |
- | * Les Processus | + | * 3.2 - Les Processus |
- | * L' | + | * 3.3 - L' |
- | * LAB #3 - Gestion des Ressources | + | |
- | * Limiter la Mémoire | + | |
=====LAB #1 - Gestion des Volumes===== | =====LAB #1 - Gestion des Volumes===== | ||
Ligne 36: | Ligne 36: | ||
</ | </ | ||
- | ====Gestion Automatique de Volumes par Docker==== | + | ====1.1 - Gestion Automatique de Volumes par Docker==== |
Vérifiez que le processus est bien démarré dans le conteneur : | Vérifiez que le processus est bien démarré dans le conteneur : | ||
Ligne 183: | Ligne 183: | ||
</ | </ | ||
- | ====Gestion Manuelle d'un Volume==== | + | ====1.2 - Gestion Manuelle d'un Volume==== |
Arrêtez et supprimez le conteneur **mongo2** puis re-créez un conteneur avec un volume spécifique pour contenir les données placées dans **/ | Arrêtez et supprimez le conteneur **mongo2** puis re-créez un conteneur avec un volume spécifique pour contenir les données placées dans **/ | ||
Ligne 300: | Ligne 300: | ||
</ | </ | ||
- | https://docs.docker.com/storage/volumes/ | + | Pour créer un volume à utiliser avec un conteneur utilisez la commande docker volume **create** |
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | myvolume | ||
+ | </code> | ||
+ | |||
+ | Pour lister les volumes, utilisez la commande docker volume **ls** : | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | DRIVER | ||
+ | local | ||
+ | </code> | ||
+ | |||
+ | Notez maintenant l' | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | Créez un fichier témoin dans le répertoire **/ | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | </ | ||
+ | |||
+ | Démarrez maintenant un conteneur qui utilise ce volume : | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | root@673f9c8bc837:/# | ||
+ | bin boot dev etc home lib lib32 lib64 libx32 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | Notez que le fichier témoin **test-file** est disponible dans le conteneur : | ||
+ | |||
+ | < | ||
+ | root@673f9c8bc837:/# | ||
+ | root@673f9c8bc837:/ | ||
+ | test-file | ||
+ | </ | ||
+ | |||
+ | Créez un deuxième fichier témoin dans le répertoire **/ | ||
+ | |||
+ | < | ||
+ | root@673f9c8bc837:/ | ||
+ | root@673f9c8bc837:/ | ||
+ | </ | ||
+ | |||
+ | Contrôlez maintenant le contenu du répertoire **/var/lib/docker/ | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 root root 0 avril 15 10:22 container_volume | ||
+ | -rw-r--r-- 1 root root 0 avril 15 10:16 test-file | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que les deux fichiers témoins sont visibles. | ||
+ | </WRAP> | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | ubuntu-volume | ||
+ | root@debian9: | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 root root 0 avril 15 10:22 container_volume | ||
+ | -rw-r--r-- 1 root root 0 avril 15 10:16 test-file | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que les deux fichiers témoins sont toujours visibles. | ||
+ | </ | ||
+ | |||
+ | Créez maintenant un deuxième conteneur en spécifiant un volume qui n' | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | root@b1476960de63:/# | ||
+ | bin boot dev etc home lib lib32 lib64 libx32 | ||
+ | root@b1476960de63:/# | ||
+ | root@b1476960de63:/ | ||
+ | root@b1476960de63:/ | ||
+ | exit | ||
+ | </ | ||
+ | |||
+ | Notez que Docker a automatiquement créé le volume : | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | DRIVER | ||
+ | local | ||
+ | local | ||
+ | root@debian9: | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 root root 0 avril 15 12:06 file_myvolume1 | ||
+ | </ | ||
+ | |||
+ | Un autre type de volume utilisable avec Docker est le **Bindmount**. Un Bindmount : | ||
+ | |||
+ | * dépend de la structure de l' | ||
+ | * ne peut pas être contrôler par la CLI Docker. | ||
+ | |||
+ | Pour créer un Bindmount, commencez par créer le répertoire **bindmount** dans **/root** : | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | root@debian9: | ||
+ | </ | ||
+ | |||
+ | Montez le Bindmount à l' | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | root@7b13fe558984:/# | ||
+ | bin bindmount | ||
+ | root@7b13fe558984:/# | ||
+ | root@7b13fe558984:/ | ||
+ | test_bind | ||
+ | root@7b13fe558984:/ | ||
+ | root@7b13fe558984:/ | ||
+ | container_bind | ||
+ | root@7b13fe558984:/ | ||
+ | exit | ||
+ | </ | ||
+ | |||
+ | Conrôlez la présence du fichier témoin : | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 root root 0 avril 15 10:32 container_bind | ||
+ | -rw-r--r-- 1 root root 0 avril 15 10:32 test_bind | ||
+ | root@debian9: | ||
+ | ubuntu-volume | ||
+ | root@debian9: | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 root root 0 avril 15 10:32 container_bind | ||
+ | -rw-r--r-- 1 root root 0 avril 15 10:32 test_bind | ||
+ | </ | ||
+ | |||
+ | Notez que la CLI Docker n'a pas de connaissance de ce point de montage : | ||
+ | |||
+ | < | ||
+ | root@debian9: | ||
+ | DRIVER | ||
+ | local | ||
+ | </ | ||
=====LAB #2 - Gestion du Réseau===== | =====LAB #2 - Gestion du Réseau===== | ||
+ | |||
+ | ====2.1 - L' | ||
Docker fournit trois réseaux par défaut : | Docker fournit trois réseaux par défaut : | ||
Ligne 314: | Ligne 481: | ||
</ | </ | ||
- | ====Bridge==== | + | ===Bridge=== |
Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant Docker. Les conteneurs ne peuvent communiquer qu' | Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant Docker. Les conteneurs ne peuvent communiquer qu' | ||
Ligne 688: | Ligne 855: | ||
</ | </ | ||
- | ====Host==== | + | ===Host=== |
Ce type de réseau est utilisé dans le cas où le réseau ne doit pas être isolé de l' | Ce type de réseau est utilisé dans le cas où le réseau ne doit pas être isolé de l' | ||
- | Dans le cas de la machine virtuelle, l' | + | Dans le cas de la machine virtuelle, l' |
< | < | ||
- | root@debian9: | + | root@debian9: |
- | 2: enp0s3: < | + | 2: ens18: < |
link/ether 08: | link/ether 08: | ||
- | inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic | + | inet 10.0.2.60/24 brd 10.0.2.255 scope global dynamic |
| | ||
inet6 fe80:: | inet6 fe80:: | ||
Ligne 707: | Ligne 874: | ||
< | < | ||
- | root@debian9: | + | root@debian9: |
[root@debian9 /]# ip a | [root@debian9 /]# ip a | ||
1: lo: < | 1: lo: < | ||
Ligne 715: | Ligne 882: | ||
inet6 ::1/128 scope host | inet6 ::1/128 scope host | ||
| | ||
- | 2: enp0s3: < | + | 2: ens18: < |
link/ether 08: | link/ether 08: | ||
- | inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic | + | inet 10.0.2.60/24 brd 10.0.2.255 scope global dynamic |
| | ||
inet6 fe80:: | inet6 fe80:: | ||
Ligne 732: | Ligne 899: | ||
</ | </ | ||
- | ====None==== | + | Le but de ce type de réseau est de permettre l' |
+ | |||
+ | Pour cette raison, dans le cas de l' | ||
+ | |||
+ | <WRAP center round important 50%> | ||
+ | **Important** : Notez que le réseau de type **host** ne fonctionne que sous Linux. Il est donc incompatible avec Docker Desktop pour Mac, Docker Desktop pour Windows et Docker EE pour Windows Server. | ||
+ | </ | ||
+ | |||
+ | ===None=== | ||
Ce type de réseau est utilisé principalement dans le cas de l' | Ce type de réseau est utilisé principalement dans le cas de l' | ||
Ligne 749: | Ligne 924: | ||
</ | </ | ||
- | ====Liens==== | + | ===Liens=== |
Le mécanisme des liens entre conteneurs est très puissant et permet d' | Le mécanisme des liens entre conteneurs est très puissant et permet d' | ||
Ligne 836: | Ligne 1011: | ||
</ | </ | ||
- | ====Lancer Wordpress dans un container==== | + | ====2.2 - Lancer Wordpress dans un container==== |
Créez le répertoire ~/wordpress et placez-vous dedans : | Créez le répertoire ~/wordpress et placez-vous dedans : | ||
Ligne 877: | Ligne 1052: | ||
< | < | ||
- | root@debian9: | + | root@debian9: |
Unable to find image ' | Unable to find image ' | ||
latest: Pulling from library/ | latest: Pulling from library/ | ||
Ligne 910: | Ligne 1085: | ||
root@debian9: | root@debian9: | ||
CONTAINER ID IMAGE | CONTAINER ID IMAGE | ||
- | 9eb2f7fbfbd2 | + | 9eb2f7fbfbd2 |
67831dacf002 | 67831dacf002 | ||
</ | </ | ||
Ligne 917: | Ligne 1092: | ||
< | < | ||
- | root@debian9: | + | root@debian9: |
| | ||
| | ||
Ligne 943: | Ligne 1118: | ||
</ | </ | ||
- | ====Gestion d'une Architecture de Microservices==== | + | ====2.3 - Gestion d'une Architecture de Microservices==== |
Vous allez mettre en place une application simple sous forme de microservices, | Vous allez mettre en place une application simple sous forme de microservices, | ||
Ligne 963: | Ligne 1138: | ||
< | < | ||
docker run -d --name=redis redis | docker run -d --name=redis redis | ||
- | docker run -d --name=db postgres: | + | docker run -d --name=db |
docker run -d --name=vote -p 5000:80 --link redis:redis dockersamples/ | 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=result -p 5001:80 --link db:db dockersamples/ | ||
Ligne 974: | Ligne 1149: | ||
=====LAB #3 - Superviser les Conteneurs===== | =====LAB #3 - Superviser les Conteneurs===== | ||
- | ====Les Journaux==== | + | ====3.1 - Les Journaux==== |
Consultez les logs d'un conteneur : | Consultez les logs d'un conteneur : | ||
Ligne 996: | Ligne 1171: | ||
</ | </ | ||
- | ====Les Processus==== | + | ====3.2 - Les Processus==== |
Consultez les processus d'un conteneur : | Consultez les processus d'un conteneur : | ||
Ligne 1006: | Ligne 1181: | ||
</ | </ | ||
- | ====L' | + | ====3.3 - L' |
Pour voir l' | Pour voir l' | ||
Ligne 1016: | Ligne 1191: | ||
</ | </ | ||
- | =====LAB #4 - Gestion des Ressources===== | + | ----- |
- | La gestion de base des ressources allouées à un conteneur peut être réalisée par l' | + | Copyright © 2022 Hugh Norris. |
- | + | ||
- | * --memory | + | |
- | * --cpu-shares | + | |
- | + | ||
- | ====Limiter la Mémoire==== | + | |
- | + | ||
- | Par exemple, exécutez un conteneur à partir de l' | + | |
- | + | ||
- | < | + | |
- | root@debian9: | + | |
- | fc8ce16b3ec86433662719ca1f710a0588951d4f4abb8d90159b5953f419eef7 | + | |
- | </ | + | |
- | + | ||
- | Exécutez ensuite la commande **docker stats** pour visualiser la limite de la mémoire : | + | |
- | + | ||
- | < | + | |
- | CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O | + | |
- | fc8ce16b3ec8 | + | |
- | </ | + | |
- | + | ||
- | <WRAP center round important> | + | |
- | **Important** : Notez que la limite définie par **--memory** est une taille absolue tandis que la limite définie par **--cpu-shares** est relative. | + | |
- | </ | + | |
- | + | ||
- | ----- | + | |
- | < | + | |
- | <div align=" | + | |
- | Copyright © 2020 Hugh NORRIS | + | |
- | </ | + | |
- | </ | + |