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:docker1:drf03 [2021/04/05 11:03] adminelearning:workbooks:docker1:drf03 [2021/12/29 10:32] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2021.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 des Conteneurs======
  
 =====Contenu du Module===== =====Contenu du Module=====
Ligne 26: Ligne 26:
       * 3.2 - Les Processus       * 3.2 - Les Processus
       * 3.3 - L'Activité en Continu       * 3.3 - L'Activité en Continu
-    * LAB #4 - Gestion des Ressources 
-      * 4.1 - Limiter la Mémoire 
  
 =====LAB #1 - Gestion des Volumes===== =====LAB #1 - Gestion des Volumes=====
Ligne 302: Ligne 300:
 </WRAP> </WRAP>
  
-https://docs.docker.com/storage/volumes/+Pour créer un volume à utiliser avec un conteneur utilisez la commande docker volume **create** : 
 + 
 +<code> 
 +root@debian9:~# docker volume create myvolume 
 +myvolume 
 +</code> 
 + 
 +Pour lister les volumes, utilisez la commande docker volume **ls** : 
 + 
 +<code> 
 +root@debian9:~# docker volume ls 
 +DRIVER              VOLUME NAME 
 +local               myvolume 
 +</code> 
 + 
 +Notez maintenant l'emplacement physique du volume créé : 
 + 
 +<code> 
 +root@debian9:~# docker volume inspect myvolume 
 +
 +    { 
 +        "CreatedAt": "2021-04-15T09:35:21+02:00", 
 +        "Driver": "local", 
 +        "Labels": {}, 
 +        "Mountpoint": "/var/lib/docker/volumes/myvolume/_data", 
 +        "Name": "myvolume", 
 +        "Options": {}, 
 +        "Scope": "local" 
 +    } 
 +
 +</code> 
 + 
 +Créez un fichier témoin dans le répertoire **/var/lib/docker/volumes/myvolume/_data/** : 
 + 
 +<code> 
 +root@debian9:~# touch /var/lib/docker/volumes/myvolume/_data/test-file 
 +</code> 
 + 
 +Démarrez maintenant un conteneur qui utilise ce volume : 
 + 
 +<code> 
 +root@debian9:~# docker run -it --name ubuntu-volume --mount source=myvolume,target=/myvolume ubuntu bash 
 +root@673f9c8bc837:/# ls 
 +bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  myvolume  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez l'utilisation de l'option **--mount** au lieu de l'option **--volume** ou **-v**Introduit en Docker version 17.06, Docker recommende l'utilisation de l'option --mount plutôt que l'option -v.. 
 +</WRAP> 
 + 
 +Notez que le fichier témoin **test-file** est disponible dans le conteneur : 
 + 
 +<code> 
 +root@673f9c8bc837:/# cd myvolume/ 
 +root@673f9c8bc837:/myvolume# ls 
 +test-file 
 +</code> 
 + 
 +Créez un deuxième fichier témoin dans le répertoire **/myvolume** du conteneur et quittez celui-ci : 
 + 
 +<code> 
 +root@673f9c8bc837:/myvolume# touch container_volume 
 +root@673f9c8bc837:/myvolume# exit 
 +</code> 
 + 
 +Contrôlez maintenant le contenu du répertoire **/var/lib/docker/volumes/myvolume/_data/** : 
 + 
 +<code> 
 +root@debian9:~# ls -l /var/lib/docker/volumes/myvolume/_data/ 
 +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 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez que les deux fichiers témoins sont visibles. 
 +</WRAP> 
 + 
 +<code> 
 +root@debian9:~# docker rm ubuntu-volume 
 +ubuntu-volume 
 +root@debian9:~# ls -l /var/lib/docker/volumes/myvolume/_data/ 
 +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 
 +</code> 
 + 
 +<WRAP center round important> 
 +**Important** : Notez que les deux fichiers témoins sont toujours visibles. 
 +</WRAP> 
 + 
 +Créez maintenant un deuxième conteneur en spécifiant un volume qui n'existe pas : 
 + 
 +<code> 
 +root@debian9:~# docker run -it --rm --name ubuntu-volume --mount source=myvolume1,target=/myvolume1 ubuntu bash 
 +root@b1476960de63:/# ls  
 +bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  myvolume1  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@b1476960de63:/# cd myvolume1 
 +root@b1476960de63:/myvolume1# touch file_myvolume1 
 +root@b1476960de63:/myvolume1# exit 
 +exit 
 +</code> 
 + 
 +Notez que Docker a automatiquement créé le volume : 
 + 
 +<code> 
 +root@debian9:~# docker volume ls 
 +DRIVER              VOLUME NAME 
 +local               myvolume 
 +local               myvolume1 
 +root@debian9:~# ls -l /var/lib/docker/volumes/myvolume1/_data/ 
 +total 0 
 +-rw-r--r-- 1 root root 0 avril 15 12:06 file_myvolume1 
 +</code> 
 + 
 +Un autre type de volume utilisable avec Docker est le **Bindmount**. Un Bindmount : 
 + 
 +  * dépend de la structure de l'arborescence de l'hôte Docker, 
 +  * 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** : 
 + 
 +<code> 
 +root@debian9:~# mkdir bindmount 
 +root@debian9:~# touch bindmount/test_bind 
 +</code> 
 + 
 +Montez le Bindmount à l'intérieur d'un conteneur : 
 + 
 +<code> 
 +root@debian9:~# docker run -it --name ubuntu-volume --mount type=bind,source=/root/bindmount,target=/bindmount ubuntu bash 
 +root@7b13fe558984:/# ls 
 +bin  bindmount  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@7b13fe558984:/# cd bindmount 
 +root@7b13fe558984:/bindmount# ls 
 +test_bind 
 +root@7b13fe558984:/bindmount# touch container_bind 
 +root@7b13fe558984:/bindmount# ls 
 +container_bind  test_bind 
 +root@7b13fe558984:/bindmount# exit 
 +exit 
 +</code> 
 + 
 +Conrôlez la présence du fichier témoin : 
 + 
 +<code> 
 +root@debian9:~# ls -l bindmount/ 
 +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:~# docker rm ubuntu-volume 
 +ubuntu-volume 
 +root@debian9:~# ls -l bindmount/ 
 +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 
 +</code> 
 + 
 +Notez que la CLI Docker n'a pas de connaissance de ce point de montage : 
 + 
 +<code> 
 +root@debian9:~# docker volume ls 
 +DRIVER              VOLUME NAME 
 +local               myvolume 
 +</code> 
  
 =====LAB #2 - Gestion du Réseau===== =====LAB #2 - Gestion du Réseau=====
Ligne 696: Ligne 859:
 Ce type de réseau est utilisé dans le cas où le réseau ne doit pas être isolé de l'hôte tout en isolant les autres aspects du conteneur. Les conteneurs utilisent la même interface que l'hôte en prenant la même adresse IP que la machine hôte. Ce type de réseau est utilisé dans le cas où le réseau ne doit pas être isolé de l'hôte tout en isolant les autres aspects du conteneur. Les conteneurs utilisent la même interface que l'hôte en prenant la même adresse IP que la machine hôte.
  
-Dans le cas de la machine virtuelle, l'adresse IP de l'interface connectée au réseau local est **10.0.2.15** :+Dans le cas de la machine virtuelle, l'adresse IP de l'interface connectée au réseau local est **10.0.2.60** :
  
 <code> <code>
-root@debian9:~# ip addr show enp0s3 +root@debian9:~# ip addr show ens18 
-2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000+2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
     link/ether 08:00:27:2e:77:01 brd ff:ff:ff:ff:ff:ff     link/ether 08:00:27:2e:77:01 brd ff:ff:ff:ff:ff:ff
-    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3+    inet 10.0.2.60/24 brd 10.0.2.255 scope global dynamic ens18
        valid_lft 83772sec preferred_lft 83772sec        valid_lft 83772sec preferred_lft 83772sec
     inet6 fe80::a00:27ff:fe2e:7701/64 scope link      inet6 fe80::a00:27ff:fe2e:7701/64 scope link 
Ligne 719: Ligne 882:
     inet6 ::1/128 scope host      inet6 ::1/128 scope host 
        valid_lft forever preferred_lft forever        valid_lft forever preferred_lft forever
-2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000+2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
     link/ether 08:00:27:2e:77:01 brd ff:ff:ff:ff:ff:ff     link/ether 08:00:27:2e:77:01 brd ff:ff:ff:ff:ff:ff
-    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3+    inet 10.0.2.60/24 brd 10.0.2.255 scope global dynamic ens18
        valid_lft 82102sec preferred_lft 82102sec        valid_lft 82102sec preferred_lft 82102sec
     inet6 fe80::a00:27ff:fe2e:7701/64 scope link      inet6 fe80::a00:27ff:fe2e:7701/64 scope link 
Ligne 736: Ligne 899:
 </code> </code>
  
-Le but de ce type de réseau est de permettre l'accès à des services dans le conteneur directement à partir de l'adresse IP de l'hôte Docker. Par exemple, un nginx dans le conteneur pourrait être joint directement sur 10.0.2.15:80 **sans** avoir besoin de passer par l'exposition du port. +Le but de ce type de réseau est de permettre l'accès à des services dans le conteneur directement à partir de l'adresse IP de l'hôte Docker. Par exemple, un nginx dans le conteneur pourrait être joint directement sur 10.0.2.60:80 **sans** avoir besoin de passer par l'exposition du port. 
  
 Pour cette raison, dans le cas de l'option **-p** utilisé dans la cas du réseau **host**, cette option n'est pas prise en compte et produit l'avertissement **WARNING: Published ports are discarded when using host network mode**. L'utilité majeure donc du réseau **host** se trouve dans le cas où de multiples ports dans le conteneur doivent être joignables. Pour cette raison, dans le cas de l'option **-p** utilisé dans la cas du réseau **host**, cette option n'est pas prise en compte et produit l'avertissement **WARNING: Published ports are discarded when using host network mode**. L'utilité majeure donc du réseau **host** se trouve dans le cas où de multiples ports dans le conteneur doivent être joignables.
Ligne 889: Ligne 1052:
  
 <code> <code>
-root@debian9:~/wordpress# docker run -e WORDPRESS_DB_PASSWORD=fenestros --name wordpress --link wordpressdb:mysql -p 10.0.2.15:80:80 -v "$PWD/html":/var/www/html -d wordpress+root@debian9:~/wordpress# docker run -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=fenestros --name wordpress --link wordpressdb:mysql -p 10.0.2.60:80:80 -v "$PWD/html":/var/www/html -d wordpress
 Unable to find image 'wordpress:latest' locally Unable to find image 'wordpress:latest' locally
 latest: Pulling from library/wordpress latest: Pulling from library/wordpress
Ligne 922: Ligne 1085:
 root@debian9:~/wordpress# docker ps root@debian9:~/wordpress# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
-9eb2f7fbfbd2        wordpress           "docker-entrypoint.s…"   2 minutes ago       Up About a minute   10.0.2.15:80->80/tcp   wordpress+9eb2f7fbfbd2        wordpress           "docker-entrypoint.s…"   2 minutes ago       Up About a minute   10.0.2.60:80->80/tcp   wordpress
 67831dacf002        mariadb:latest      "docker-entrypoint.s…"   9 minutes ago       Up 8 minutes        3306/tcp               wordpressdb 67831dacf002        mariadb:latest      "docker-entrypoint.s…"   9 minutes ago       Up 8 minutes        3306/tcp               wordpressdb
 </code> </code>
Ligne 929: Ligne 1092:
  
 <code> <code>
-root@debian9:~/wordpress# lynx --dump http://10.0.2.15+root@debian9:~/wordpress# lynx --dump http://10.0.2.60
    [1]WordPress    [1]WordPress
    Select a default language [English (United States)________]    Select a default language [English (United States)________]
Ligne 1028: Ligne 1191:
 </code> </code>
  
-=====LAB #4 Gestion des Ressources=====+-----
  
-La gestion de base des ressources allouées à un conteneur peut être réalisée par l'utilisation de deux options : +Copyright © 2022 Hugh Norris.
- +
-  * --memory +
-  * --cpu-shares +
- +
-====4.1 - Limiter la Mémoire==== +
- +
-Par exemple, exécutez un conteneur à partir de l'image nginx avec une limite de la mémoire fixée à 256 Mo : +
- +
-<code> +
-root@debian9:~# docker run -d -p 8081:80 --memory="256m" nginx +
-fc8ce16b3ec86433662719ca1f710a0588951d4f4abb8d90159b5953f419eef7 +
-</code> +
- +
-Exécutez ensuite la commande **docker stats** pour visualiser la limite de la mémoire : +
- +
-<code> +
-CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS +
-fc8ce16b3ec8        cool_blackwell      0.00%               1.793MiB / 256MiB   0.70%               2.45kB / 0B         0B / 0B             2 +
-</code> +
- +
-<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. +
-</WRAP> +
- +
------ +
-<html> +
-<div align="center"> +
-Copyright © 2021 Hugh NORRIS +
-</div> +
-</html>+
Menu