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:drf03 [2023/12/27 07:50] – removed adminelearning:workbooks:docker3:drf03 [2024/02/21 13:40] (Version actuelle) admin
Ligne 1: Ligne 1:
 +~~PDF:LANDSCAPE~~
  
 +Version : **2024.01**
 +
 +Dernière mise-à-jour : ~~LASTMOD~~
 +
 +======DOF604 - Gestion des Volumes, du Réseau et de la Supervision des Conteneurs======
 +
 +=====Contenu du Module=====
 +
 +  * **DOF604 - Gestion des Volumes, du Réseau et des Ressources**
 +    * Contenu du Module
 +    * LAB #1 - Gestion des Volumes
 +      * 1.1 - Gestion Automatique par Docker
 +      * 1.2 - Gestion Manuelle d'un Volume
 +      * 1.3 - Gestion Manuelle d'un Bindmount
 +    * LAB #2 - Gestion du Réseau
 +      * 2.1 - L'Approche Réseau Docker
 +        * Bridge
 +        * Host
 +        * None
 +        * Liens
 +      * 2.2 - Lancer Wordpress dans un container
 +      * 2.3 - Gestion d'une Architecture de Microservices
 +    * LAB #3 - Superviser les Conteneurs
 +      * 3.1 - Les Journaux
 +      * 3.2 - Les Processus
 +      * 3.3 - L'Activité en Continu
 +
 +=====LAB #1 - Gestion des Volumes=====
 +
 +Lancez le conteneur **mongo2** :
 +
 +<code>
 +root@debian11:~# docker start mongo2
 +mongo2
 +</code>
 +
 +====1.1 - Gestion Automatique de Volumes par Docker====
 +
 +Vérifiez que le processus est bien démarré dans le conteneur :
 +
 +<code>
 +root@debian11:~# docker ps
 +CONTAINER ID   IMAGE            COMMAND                  CREATED      STATUS          PORTS       NAMES
 +880733c6bdc3   i2tch/mongodb2   "docker-entrypoint.s…"   4 days ago   Up 43 seconds   27017/tcp   mongo2
 +</code>
 +
 +Identifiez ensuite le point de montage du répertoire **/data/db** du conteneur :
 +
 +<code>
 +root@debian11:~# docker inspect mongo2
 +...
 +        "Mounts": [
 +            {
 +                "Type": "volume",
 +                "Name": "537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703",
 +                "Source": "/var/lib/docker/volumes/537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703/_data",
 +                "Destination": "/data/db",
 +                "Driver": "local",
 +                "Mode": "",
 +                "RW": true,
 +                "Propagation": ""
 +            },
 +            {
 +                "Type": "volume",
 +                "Name": "58795fb69d54b87b11fcb6ab752a1fa10736e5aa37c8a14b1c36db1306853a59",
 +                "Source": "/var/lib/docker/volumes/58795fb69d54b87b11fcb6ab752a1fa10736e5aa37c8a14b1c36db1306853a59/_data",
 +                "Destination": "/data/configdb",
 +                "Driver": "local",
 +                "Mode": "",
 +                "RW": true,
 +                "Propagation": ""
 +            }
 +        ],
 +...
 +            "Volumes": {
 +                "/data/configdb": {},
 +                "/data/db": {}
 +            },
 +...
 +</code>
 +
 +En regardant le contenu du répertoire **/data/db**, on constate une arborescence classique de stockage de données de mongodb :
 +
 +<code>
 +root@debian11:~# ls /var/lib/docker/volumes/537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703/_data
 +collection-0-2505194079268383602.wt  index-5-2505194079268383602.wt  storage.bson
 +collection-2-2505194079268383602.wt  index-6-2505194079268383602.wt  WiredTiger
 +collection-4-2505194079268383602.wt  journal                         WiredTigerLAS.wt
 +diagnostic.data                      _mdb_catalog.wt                 WiredTiger.lock
 +index-1-2505194079268383602.wt       mongod.lock                     WiredTiger.turtle
 +index-3-2505194079268383602.wt       sizeStorer.wt                   WiredTiger.wt
 +</code>
 +
 +Arrêtez et supprimez le conteneur **mongo2** :
 +
 +<code>
 +root@debian11:~# docker stop mongo2
 +mongo2
 +
 +root@debian11:~# docker rm mongo2
 +mongo2
 +</code>
 +
 +Re-créez maintenant un conteneur à partir de l'image **i2tch/mongodb2** :
 +
 +<code>
 +root@debian11:~# docker run -d --name mongo2 i2tch/mongodb2
 +1980be05ac73d70979f5e932f1a58b6526ae1001a335fd8ca010bbfaac48ca5e
 +
 +root@debian11:~# docker ps
 +CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS       NAMES
 +1980be05ac73   i2tch/mongodb2   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   27017/tcp   mongo2
 +</code>
 +
 +Utilisez de nouveau la commande **docker inspect** pour identifier le point de montage du répertoire **/data/db** :
 +
 +<code>
 +root@debian11:~# docker inspect mongo2
 +...
 +        "Mounts": [
 +            {
 +                "Type": "volume",
 +                "Name": "2ec1edeca3acd91aede62091e0d96252eb31e403a00fef324ca2244b2952bb48",
 +                "Source": "/var/lib/docker/volumes/2ec1edeca3acd91aede62091e0d96252eb31e403a00fef324ca2244b2952bb48/_data",
 +                "Destination": "/data/configdb",
 +                "Driver": "local",
 +                "Mode": "",
 +                "RW": true,
 +                "Propagation": ""
 +            },
 +            {
 +                "Type": "volume",
 +                "Name": "4abe232050675d853d0a4d8beefe31f884e1252c985828c3be47a983aac58605",
 +                "Source": "/var/lib/docker/volumes/4abe232050675d853d0a4d8beefe31f884e1252c985828c3be47a983aac58605/_data",
 +                "Destination": "/data/db",
 +                "Driver": "local",
 +                "Mode": "",
 +                "RW": true,
 +                "Propagation": ""
 +            }
 +        ],
 +...
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez que le répertoire des données du précédent conteneur, **/var/lib/docker/volumes/537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703/_data** n'est pas le même que le conteneur courant **/var/lib/docker/volumes/4abe232050675d853d0a4d8beefe31f884e1252c985828c3be47a983aac58605/_data**.
 +</WRAP>
 +
 +Les conteneurs n'ayant pas été arrêtés avec l'option **-v**, on peut constater que les répertoires persistent dans **/var/lib/docker** :
 +
 +<code>
 +root@debian11:~# ls -l /var/lib/docker/volumes/
 +total 60
 +drwx-----x 3 root root  4096 Dec 15 14:39 2ec1edeca3acd91aede62091e0d96252eb31e403a00fef324ca2244b2952bb48
 +drwx-----x 3 root root  4096 Dec 10 17:12 396ad783162131dcc92a649366ab79e24720bf866ce6803868e2ba2df8e90074
 +drwx-----x 3 root root  4096 Dec 15 14:39 4abe232050675d853d0a4d8beefe31f884e1252c985828c3be47a983aac58605
 +drwx-----x 3 root root  4096 Dec 10 17:16 537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703
 +drwx-----x 3 root root  4096 Dec 10 17:16 58795fb69d54b87b11fcb6ab752a1fa10736e5aa37c8a14b1c36db1306853a59
 +drwx-----x 3 root root  4096 Dec 10 18:32 7d7b25232f6ec411dc9dfb888048eebbee919eb2cedc301969bc325a8a8d055e
 +brw------- 1 root root 8, 33 Dec 15 09:56 backingFsBlockDev
 +drwx-----x 3 root root  4096 Dec 10 17:12 f766fb3cd11eee28312b8804c1439c0f7b0a7d58a0ce4d61ba50af17b7630c8f
 +-rw------- 1 root root 65536 Dec 15 14:39 metadata.db
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez que non-seulement ceci représente une source de perte d'espace disque mais prouve aussi que les données ne sont pas persistantes entre deux instances d'un conteneur d'**i2tch/mongodb2**. Ceci crée bien évidement un problème important en production.
 +</WRAP>
 +
 +====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 **/data/db** du conteneur par mongodb :
 +
 +<code>
 +root@debian11:~# docker stop mongo2
 +mongo2
 +
 +root@debian11:~# docker rm mongo2
 +mongo2
 +
 +root@debian11:~# docker run -d --name mongo2 -v persistent_data:/data/db i2tch/mongodb2
 +8b2207df56a727a8472b2949d7a83a1925e751ad0216fe98b6a3db83230c0988
 +
 +root@debian11:~# docker ps
 +CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS       NAMES
 +8b2207df56a7   i2tch/mongodb2   "docker-entrypoint.s…"   6 seconds ago   Up 6 seconds   27017/tcp   mongo2
 +
 +root@debian11:~# docker logs mongo2
 +2023-12-15T13:45:40.845+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=8b2207df56a7
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten] db version v4.1.9
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten] git version: a5fa363117062a20d6056c76e01edb3a08f71b7c
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.1.1  11 Sep 2018
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten] allocator: tcmalloc
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten] modules: none
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten] build environment:
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten]     distmod: ubuntu1804
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten]     distarch: x86_64
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten]     target_arch: x86_64
 +2023-12-15T13:45:40.847+0000 I CONTROL  [initandlisten] options: { net: { bindIp: "*" } }
 +2023-12-15T13:45:40.847+0000 I STORAGE  [initandlisten] 
 +2023-12-15T13:45:40.847+0000 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
 +2023-12-15T13:45:40.847+0000 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
 +2023-12-15T13:45:40.847+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=7485M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
 +2023-12-15T13:45:41.621+0000 I STORAGE  [initandlisten] WiredTiger message [1702647941:621009][1:0x7f381cfeaa40], txn-recover: Set global recovery timestamp: (0,0)
 +2023-12-15T13:45:41.665+0000 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
 +2023-12-15T13:45:41.708+0000 I STORAGE  [initandlisten] Timestamp monitor starting
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] 
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] ** NOTE: This is a development version (4.1.9) of MongoDB.
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] **       Not recommended for production.
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] 
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] 
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] 
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
 +2023-12-15T13:45:41.727+0000 I CONTROL  [initandlisten] 
 +2023-12-15T13:45:41.728+0000 I STORAGE  [initandlisten] createCollection: admin.system.version with provided UUID: 1e149d35-bbda-46a7-bc8e-3a300abb052f
 +2023-12-15T13:45:41.815+0000 I INDEX    [initandlisten] index build: done building index _id_ on ns admin.system.version
 +2023-12-15T13:45:41.815+0000 I SHARDING [initandlisten] Marking collection admin.system.version as collection version: <unsharded>
 +2023-12-15T13:45:41.815+0000 I COMMAND  [initandlisten] setting featureCompatibilityVersion to 4.2
 +2023-12-15T13:45:41.819+0000 I SHARDING [initandlisten] Marking collection local.system.replset as collection version: <unsharded>
 +2023-12-15T13:45:41.819+0000 I SHARDING [initandlisten] Marking collection admin.system.roles as collection version: <unsharded>
 +2023-12-15T13:45:41.819+0000 I STORAGE  [initandlisten] createCollection: local.startup_log with generated UUID: 759d58f7-7f35-441f-bd93-f090f4a14427
 +2023-12-15T13:45:41.856+0000 I INDEX    [initandlisten] index build: done building index _id_ on ns local.startup_log
 +2023-12-15T13:45:41.856+0000 I SHARDING [initandlisten] Marking collection local.startup_log as collection version: <unsharded>
 +2023-12-15T13:45:41.856+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
 +2023-12-15T13:45:41.857+0000 I NETWORK  [initandlisten] Listening on /tmp/mongodb-27017.sock
 +2023-12-15T13:45:41.857+0000 I NETWORK  [initandlisten] Listening on 0.0.0.0
 +2023-12-15T13:45:41.857+0000 I SHARDING [LogicalSessionCacheRefresh] Marking collection config.system.sessions as collection version: <unsharded>
 +2023-12-15T13:45:41.857+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
 +2023-12-15T13:45:41.857+0000 I STORAGE  [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: 6936ac77-1578-4a80-b907-f00774284e52
 +2023-12-15T13:45:41.894+0000 I INDEX    [LogicalSessionCacheRefresh] index build: done building index _id_ on ns config.system.sessions
 +2023-12-15T13:45:41.932+0000 I INDEX    [LogicalSessionCacheRefresh] index build: starting on config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 } using method: Hybrid
 +2023-12-15T13:45:41.932+0000 I INDEX    [LogicalSessionCacheRefresh] build may temporarily use up to 500 megabytes of RAM
 +2023-12-15T13:45:41.932+0000 I INDEX    [LogicalSessionCacheRefresh] index build: collection scan done. scanned 0 total records in 0 seconds
 +2023-12-15T13:45:41.932+0000 I INDEX    [LogicalSessionCacheRefresh] index build: inserted 0 keys from external sorter into index in 0 seconds
 +2023-12-15T13:45:41.933+0000 I INDEX    [LogicalSessionCacheRefresh] index build: done building index lsidTTLIndex on ns config.system.sessions
 +</code>
 +
 +Notez que cette fois-ci, docker a créé un répertoire **persistent_data** dans le répertoire **/var/lib/docker/volumes/** :
 +
 +<code>
 +root@debian11:~# ls -l /var/lib/docker/volumes/
 +total 68
 +drwx-----x 3 root root  4096 Dec 15 14:39 2ec1edeca3acd91aede62091e0d96252eb31e403a00fef324ca2244b2952bb48
 +drwx-----x 3 root root  4096 Dec 10 17:12 396ad783162131dcc92a649366ab79e24720bf866ce6803868e2ba2df8e90074
 +drwx-----x 3 root root  4096 Dec 15 14:39 4abe232050675d853d0a4d8beefe31f884e1252c985828c3be47a983aac58605
 +drwx-----x 3 root root  4096 Dec 10 17:16 537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703
 +drwx-----x 3 root root  4096 Dec 10 17:16 58795fb69d54b87b11fcb6ab752a1fa10736e5aa37c8a14b1c36db1306853a59
 +drwx-----x 3 root root  4096 Dec 10 18:32 7d7b25232f6ec411dc9dfb888048eebbee919eb2cedc301969bc325a8a8d055e
 +brw------- 1 root root 8, 33 Dec 15 09:56 backingFsBlockDev
 +drwx-----x 3 root root  4096 Dec 10 17:12 f766fb3cd11eee28312b8804c1439c0f7b0a7d58a0ce4d61ba50af17b7630c8f
 +drwx-----x 3 root root  4096 Dec 15 14:45 fa3330b3415f534a7d0053ba95d74fe02765cde317c11cac9691c3132cec3d47
 +-rw------- 1 root root 65536 Dec 15 14:45 metadata.db
 +drwx-----x 3 root root  4096 Dec 15 14:45 persistent_data
 +</code>
 +
 +Arrêtez et supprimez le conteneur **mongo2** puis re-créez un conteneur en utilisant le même volume spécifique pour contenir les données placées dans **/data/db** du conteneur par mongodb :
 +
 +<code>
 +root@debian11:~# docker stop mongo2
 +mongo2
 +
 +root@debian11:~# docker rm mongo2
 +mongo2
 +
 +root@debian11:~# docker run -d --name mongo2 -v persistent_data:/data/db i2tch/mongodb2
 +cc7cc8f3b43346fe47cc5107225b0b98851a73a9b2938530077ca7a3207581a0
 +
 +root@debian11:~# docker ps
 +CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS       NAMES
 +cc7cc8f3b433   i2tch/mongodb2   "docker-entrypoint.s…"   18 seconds ago   Up 18 seconds   27017/tcp   mongo2
 +</code>
 +
 +Encore une fois, cherchez le point de montage de **/data/db** grâce à l'utilisation de la commande **docker inspect** :
 +
 +<code>
 +root@debian11:~# docker inspect mongo2
 +...
 +        "Mounts": [
 +            {
 +                "Type": "volume",
 +                "Name": "persistent_data",
 +                "Source": "/var/lib/docker/volumes/persistent_data/_data",
 +                "Destination": "/data/db",
 +                "Driver": "local",
 +                "Mode": "z",
 +                "RW": true,
 +                "Propagation": ""
 +            },
 +            {
 +                "Type": "volume",
 +                "Name": "cef4abb286a1b519e6cdfb4a2327659cd124dc1513ed55288c014e61a8bf27b7",
 +                "Source": "/var/lib/docker/volumes/cef4abb286a1b519e6cdfb4a2327659cd124dc1513ed55288c014e61a8bf27b7/_data",
 +                "Destination": "/data/configdb",
 +                "Driver": "local",
 +                "Mode": "",
 +                "RW": true,
 +                "Propagation": ""
 +            }
 +        ],
 +...
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez ici que l'utilisation du même répertoire entre les deux conteneurs rend les données persistantes et évite la création de volumes orphelins. Pour plus d'information sur les volumes, consultez la page : **[[https://docs.docker.com/storage/volumes/]]**.
 +</WRAP>
 +
 +Pour créer un volume à utiliser avec un conteneur utilisez la commande docker volume **create** :
 +
 +<code>
 +root@debian11:~# docker volume create myvolume
 +myvolume
 +</code>
 +
 +Pour lister les volumes, utilisez la commande docker volume **ls** :
 +
 +<code>
 +root@debian11:~# docker volume ls
 +DRIVER    VOLUME NAME
 +local     2ec1edeca3acd91aede62091e0d96252eb31e403a00fef324ca2244b2952bb48
 +local     4abe232050675d853d0a4d8beefe31f884e1252c985828c3be47a983aac58605
 +local     7d7b25232f6ec411dc9dfb888048eebbee919eb2cedc301969bc325a8a8d055e
 +local     396ad783162131dcc92a649366ab79e24720bf866ce6803868e2ba2df8e90074
 +local     537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703
 +local     58795fb69d54b87b11fcb6ab752a1fa10736e5aa37c8a14b1c36db1306853a59
 +local     cef4abb286a1b519e6cdfb4a2327659cd124dc1513ed55288c014e61a8bf27b7
 +local     f766fb3cd11eee28312b8804c1439c0f7b0a7d58a0ce4d61ba50af17b7630c8f
 +local     fa3330b3415f534a7d0053ba95d74fe02765cde317c11cac9691c3132cec3d47
 +local     myvolume
 +local     persistent_data
 +</code>
 +
 +Notez maintenant l'emplacement physique du volume créé :
 +
 +<code>
 +root@debian11:~# docker volume inspect myvolume
 +[
 +    {
 +        "CreatedAt": "2023-12-15T14:50:18+01:00",
 +        "Driver": "local",
 +        "Labels": null,
 +        "Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
 +        "Name": "myvolume",
 +        "Options": null,
 +        "Scope": "local"
 +    }
 +]
 +</code>
 +
 +Créez un fichier témoin dans le répertoire **/var/lib/docker/volumes/myvolume/_data/** :
 +
 +<code>
 +root@debian11:~# touch /var/lib/docker/volumes/myvolume/_data/test-file
 +</code>
 +
 +Démarrez maintenant un conteneur qui utilise ce volume :
 +
 +<code>
 +root@debian11:~# docker run -it --name ubuntu-volume --mount source=myvolume,target=/myvolume ubuntu bash
 +</code>
 +
 +<WRAP center round important 50%>
 +**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@ff76d3820051:/# cd myvolume/
 +root@ff76d3820051:/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@ff76d3820051:/myvolume# touch container_volume
 +root@ff76d3820051:/myvolume# exit
 +exit
 +root@debian11:~#
 +</code>
 +
 +Contrôlez maintenant le contenu du répertoire **/var/lib/docker/volumes/myvolume/_data/** :
 +
 +<code>
 +root@debian11:~# ls -l /var/lib/docker/volumes/myvolume/_data/
 +total 0
 +-rw-r--r-- 1 root root 0 Dec 15 14:55 container_volume
 +-rw-r--r-- 1 root root 0 Dec 15 14:51 test-file
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez que les deux fichiers témoins sont visibles.
 +</WRAP>
 +
 +<code>
 +root@debian11:~# docker rm ubuntu-volume
 +ubuntu-volume
 +
 +root@debian11:~# ls -l /var/lib/docker/volumes/myvolume/_data/
 +total 0
 +-rw-r--r-- 1 root root 0 Dec 15 14:55 container_volume
 +-rw-r--r-- 1 root root 0 Dec 15 14:51 test-file
 +</code>
 +
 +<WRAP center round important 50%>
 +**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@debian11:~# docker run -it --rm --name ubuntu-volume --mount source=myvolume1,target=/myvolume1 ubuntu bash
 +
 +root@5547f3231534:/# ls
 +bin   dev  home  lib32  libx32  mnt        opt   root  sbin  sys  usr
 +boot  etc  lib   lib64  media   myvolume1  proc  run   srv   tmp  var
 +
 +root@5547f3231534:/# cd myvolume1
 +
 +root@5547f3231534:/myvolume1# touch file_myvolume1
 +
 +root@5547f3231534:/myvolume1# exit
 +exit
 +root@debian11:~#
 +</code>
 +
 +Notez que Docker a automatiquement créé le volume :
 +
 +<code>
 +root@debian11:~# docker volume ls
 +DRIVER    VOLUME NAME
 +local     2ec1edeca3acd91aede62091e0d96252eb31e403a00fef324ca2244b2952bb48
 +local     4abe232050675d853d0a4d8beefe31f884e1252c985828c3be47a983aac58605
 +local     7d7b25232f6ec411dc9dfb888048eebbee919eb2cedc301969bc325a8a8d055e
 +local     396ad783162131dcc92a649366ab79e24720bf866ce6803868e2ba2df8e90074
 +local     537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703
 +local     58795fb69d54b87b11fcb6ab752a1fa10736e5aa37c8a14b1c36db1306853a59
 +local     cef4abb286a1b519e6cdfb4a2327659cd124dc1513ed55288c014e61a8bf27b7
 +local     f766fb3cd11eee28312b8804c1439c0f7b0a7d58a0ce4d61ba50af17b7630c8f
 +local     fa3330b3415f534a7d0053ba95d74fe02765cde317c11cac9691c3132cec3d47
 +local     myvolume
 +local     myvolume1
 +local     persistent_data
 +
 +root@debian11:~# ls -l /var/lib/docker/volumes/myvolume1/_data/
 +total 0
 +-rw-r--r-- 1 root root 0 Dec 15 15:01 file_myvolume1
 +</code>
 +
 +====1.3 - Gestion Manuelle d'un Bindmount====
 +
 +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@debian11:~# mkdir bindmount
 +root@debian11:~# touch bindmount/test_bind
 +</code>
 +
 +Montez le Bindmount à l'intérieur d'un conteneur :
 +
 +<code>
 +root@debian11:~# docker run -it --name ubuntu-volume --mount type=bind,source=/root/bindmount,target=/bindmount ubuntu bash
 +
 +root@1cd3cc50e6c0:/# ls
 +bin        boot  etc   lib    lib64   media  opt   root  sbin  sys  usr
 +bindmount  dev   home  lib32  libx32  mnt    proc  run   srv   tmp  var
 +
 +root@1cd3cc50e6c0:/# cd bindmount/
 +
 +root@1cd3cc50e6c0:/bindmount# ls
 +test_bind
 +
 +root@1cd3cc50e6c0:/bindmount# touch container_bind
 +
 +root@1cd3cc50e6c0:/bindmount# ls
 +container_bind  test_bind
 +
 +root@1cd3cc50e6c0:/bindmount# exit
 +exit
 +root@debian11:~#
 +</code>
 +
 +Contrôlez la présence du fichier témoin :
 +
 +<code>
 +root@debian11:~# ls -l bindmount/
 +total 0
 +-rw-r--r-- 1 root root 0 Dec 15 15:27 container_bind
 +-rw-r--r-- 1 root root 0 Dec 15 15:25 test_bind
 +
 +root@debian11:~# docker rm ubuntu-volume
 +ubuntu-volume
 +
 +root@debian11:~# ls -l bindmount/
 +total 0
 +-rw-r--r-- 1 root root 0 Dec 15 15:27 container_bind
 +-rw-r--r-- 1 root root 0 Dec 15 15:25 test_bind
 +</code>
 +
 +Notez que la CLI Docker n'a pas de connaissance de ce point de montage :
 +
 +<code>
 +root@debian11:~# docker volume ls
 +DRIVER    VOLUME NAME
 +local     2ec1edeca3acd91aede62091e0d96252eb31e403a00fef324ca2244b2952bb48
 +local     4abe232050675d853d0a4d8beefe31f884e1252c985828c3be47a983aac58605
 +local     7d7b25232f6ec411dc9dfb888048eebbee919eb2cedc301969bc325a8a8d055e
 +local     396ad783162131dcc92a649366ab79e24720bf866ce6803868e2ba2df8e90074
 +local     537cc5d0f0f0aa0af9dd959b45fc9fcbe8467a868b9d61919991366a2813f703
 +local     58795fb69d54b87b11fcb6ab752a1fa10736e5aa37c8a14b1c36db1306853a59
 +local     cef4abb286a1b519e6cdfb4a2327659cd124dc1513ed55288c014e61a8bf27b7
 +local     f766fb3cd11eee28312b8804c1439c0f7b0a7d58a0ce4d61ba50af17b7630c8f
 +local     fa3330b3415f534a7d0053ba95d74fe02765cde317c11cac9691c3132cec3d47
 +local     myvolume
 +local     myvolume1
 +local     persistent_data
 +</code>
 +
 +=====LAB #2 - Gestion du Réseau=====
 +
 +====2.1 - L'Approche Réseau Docker====
 +
 +Docker fournit trois réseaux par défaut :
 +
 +<code>
 +root@debian11:~# docker network ls
 +NETWORK ID     NAME      DRIVER    SCOPE
 +2473b0d9324a   bridge    bridge    local
 +b0a285caf920   host      host      local
 +a2da9933cdce   none      null      local
 +</code>
 +
 +===Bridge===
 +
 +Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant Docker. Les conteneurs ne peuvent communiquer qu'entre eux et ils ne sont pas accessibles depuis l'extérieur. Pour que les conteneurs sur le réseau puissent communiquer ou être accessibles du monde extérieur, il faut configurer le mappage de port.
 +
 +Par défaut Docker fonctionne en mode **Pont** ou (//Bridge//) et crée une interface intermédiaire à cet effet appelé **docker0** :
 +
 +<code>
 +root@debian11:~# ip addr show docker0
 +3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
 +    link/ether 02:42:07:c9:88:32 brd ff:ff:ff:ff:ff:ff
 +    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
 +       valid_lft forever preferred_lft forever
 +    inet6 fe80::42:7ff:fec9:8832/64 scope link 
 +       valid_lft forever preferred_lft forever
 +</code>
 +
 +Démarrez un conteneur dénommé **resotest** à partir d'une image de CentOS : 
 +
 +<code>
 +root@debian11:~# docker run -itd --name=resotest centos
 +2126924504d8dedb920728cc7c2a6c73e87f8c5c3d13c17c4fcc2bfe8ff93cc9
 +</code>
 +
 +Lancez ensuite la commande **docker network inspect bridge** à partir de la machine virtuelle hôte de Debian_9 :
 +
 +<code>
 +root@debian11:~# docker network inspect bridge
 +[
 +    {
 +        "Name": "bridge",
 +        "Id": "2473b0d9324a421018cdf501060801d34c599991bed76751ae328bc68126a180",
 +        "Created": "2023-12-15T09:56:50.183135221+01:00",
 +        "Scope": "local",
 +        "Driver": "bridge",
 +        "EnableIPv6": false,
 +        "IPAM": {
 +            "Driver": "default",
 +            "Options": null,
 +            "Config": [
 +                {
 +                    "Subnet": "172.17.0.0/16",
 +                    "Gateway": "172.17.0.1"
 +                }
 +            ]
 +        },
 +        "Internal": false,
 +        "Attachable": false,
 +        "Ingress": false,
 +        "ConfigFrom": {
 +            "Network": ""
 +        },
 +        "ConfigOnly": false,
 +        "Containers": {
 +            "2126924504d8dedb920728cc7c2a6c73e87f8c5c3d13c17c4fcc2bfe8ff93cc9": {
 +                "Name": "resotest",
 +                "EndpointID": "e9ae0ba15d4588571fe77a9a8e1564e92620f9532bed8ee38d060b954116b20c",
 +                "MacAddress": "02:42:ac:11:00:03",
 +                "IPv4Address": "172.17.0.3/16",
 +                "IPv6Address": ""
 +            },
 +            "cc7cc8f3b43346fe47cc5107225b0b98851a73a9b2938530077ca7a3207581a0": {
 +                "Name": "mongo2",
 +                "EndpointID": "d9f30326f473f12a45f6aacf97cee0f12c9c545e45ed7808b0cba809fa48ae9a",
 +                "MacAddress": "02:42:ac:11:00:02",
 +                "IPv4Address": "172.17.0.2/16",
 +                "IPv6Address": ""
 +            }
 +        },
 +        "Options": {
 +            "com.docker.network.bridge.default_bridge": "true",
 +            "com.docker.network.bridge.enable_icc": "true",
 +            "com.docker.network.bridge.enable_ip_masquerade": "true",
 +            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
 +            "com.docker.network.bridge.name": "docker0",
 +            "com.docker.network.driver.mtu": "1500"
 +        },
 +        "Labels": {}
 +    }
 +]
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez ici que les conteneurs **mongo2** et **resotest** ne disposent pas de la même adresse que l'interface **docker0** de la machine hôte. Cependant les adresses se trouvent dans le même segment - **172.17.0.0/16** indiqué par la sortie **"Subnet": "172.17.0.0/16"**.
 +</WRAP>
 +
 +Vous pouvez déconnecter un conteneur du réseau en utilisant la commande suivante :
 +
 +<code>
 +root@debian11:~# docker network disconnect bridge resotest
 +
 +root@debian11:~# docker network inspect bridge
 +[
 +    {
 +        "Name": "bridge",
 +        "Id": "2473b0d9324a421018cdf501060801d34c599991bed76751ae328bc68126a180",
 +        "Created": "2023-12-15T09:56:50.183135221+01:00",
 +        "Scope": "local",
 +        "Driver": "bridge",
 +        "EnableIPv6": false,
 +        "IPAM": {
 +            "Driver": "default",
 +            "Options": null,
 +            "Config": [
 +                {
 +                    "Subnet": "172.17.0.0/16",
 +                    "Gateway": "172.17.0.1"
 +                }
 +            ]
 +        },
 +        "Internal": false,
 +        "Attachable": false,
 +        "Ingress": false,
 +        "ConfigFrom": {
 +            "Network": ""
 +        },
 +        "ConfigOnly": false,
 +        "Containers": {
 +            "cc7cc8f3b43346fe47cc5107225b0b98851a73a9b2938530077ca7a3207581a0": {
 +                "Name": "mongo2",
 +                "EndpointID": "d9f30326f473f12a45f6aacf97cee0f12c9c545e45ed7808b0cba809fa48ae9a",
 +                "MacAddress": "02:42:ac:11:00:02",
 +                "IPv4Address": "172.17.0.2/16",
 +                "IPv6Address": ""
 +            }
 +        },
 +        "Options": {
 +            "com.docker.network.bridge.default_bridge": "true",
 +            "com.docker.network.bridge.enable_icc": "true",
 +            "com.docker.network.bridge.enable_ip_masquerade": "true",
 +            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
 +            "com.docker.network.bridge.name": "docker0",
 +            "com.docker.network.driver.mtu": "1500"
 +        },
 +        "Labels": {}
 +    }
 +]
 +</code>
 +
 +Créez maintenant votre propre réseau ponté appelé **my-bridged-network** :
 +
 +<code>
 +root@debian11:~# docker network create -d bridge --subnet 172.25.0.0/16 --gateway 172.25.0.1 my-bridged-network
 +4d26c1192dd7b25c3c787ef41b7bfb94d0eb989d230f33906db6d54ed9c128cc
 +
 +root@debian11:~# docker network ls
 +NETWORK ID     NAME                 DRIVER    SCOPE
 +2473b0d9324a   bridge               bridge    local
 +b0a285caf920   host                 host      local
 +4d26c1192dd7   my-bridged-network   bridge    local
 +a2da9933cdce   none                 null      local           
 +</code>
 +
 +Bien évidement, ce réseau est actuellement vide :
 +
 +<code>
 +root@debian11:~# docker network inspect my-bridged-network
 +[
 +    {
 +        "Name": "my-bridged-network",
 +        "Id": "4d26c1192dd7b25c3c787ef41b7bfb94d0eb989d230f33906db6d54ed9c128cc",
 +        "Created": "2023-12-15T15:34:02.824127656+01:00",
 +        "Scope": "local",
 +        "Driver": "bridge",
 +        "EnableIPv6": false,
 +        "IPAM": {
 +            "Driver": "default",
 +            "Options": {},
 +            "Config": [
 +                {
 +                    "Subnet": "172.25.0.0/16",
 +                    "Gateway": "172.25.0.1"
 +                }
 +            ]
 +        },
 +        "Internal": false,
 +        "Attachable": false,
 +        "Ingress": false,
 +        "ConfigFrom": {
 +            "Network": ""
 +        },
 +        "ConfigOnly": false,
 +        "Containers": {},
 +        "Options": {},
 +        "Labels": {}
 +    }
 +]
 +</code>
 +
 +Lancez maintenant deux conteneurs et consultez les informations concernant le réseau : 
 +
 +<code>
 +root@debian11:~# docker run -itd --name=centos1 centos
 +cb2875ab1059e66308228d9179b810db748ad287453cf758206a7025f57b0176
 +
 +root@debian11:~# docker run -itd --name=centos2 centos
 +fc417b22a20d3f9de674889962452bfe453ced1fc389410b225055f865cb817f
 +
 +root@debian11:~# docker inspect --format='{{json .NetworkSettings.Networks}}'  centos1
 +{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"2473b0d9324a421018cdf501060801d34c599991bed76751ae328bc68126a180","EndpointID":"a0e5d67f4652be807583fba65a76bf1a0462200aa198c92ab29845f88c45d559","Gateway":"172.17.0.1","IPAddress":"172.17.0.3","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:03","DriverOpts":null}}
 +
 +root@debian11:~# docker inspect --format='{{json .NetworkSettings.Networks}}'  centos2
 +{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"2473b0d9324a421018cdf501060801d34c599991bed76751ae328bc68126a180","EndpointID":"15ed4b05703524f64015b12683ea01729dd26a7dfe68ab638383ea075d8d1428","Gateway":"172.17.0.1","IPAddress":"172.17.0.4","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:04","DriverOpts":null}}
 +
 +root@debian11:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos1
 +172.17.0.3
 +
 +root@debian11:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2
 +172.17.0.4
 +</code>
 +
 +Mettez le conteneur **centos1** dans le réseau **my-bridged-network** :
 +
 +<code>
 +root@debian11:~# docker network connect my-bridged-network centos1
 +
 +root@debian11:~# docker network inspect my-bridged-network
 +[
 +    {
 +        "Name": "my-bridged-network",
 +        "Id": "4d26c1192dd7b25c3c787ef41b7bfb94d0eb989d230f33906db6d54ed9c128cc",
 +        "Created": "2023-12-15T15:34:02.824127656+01:00",
 +        "Scope": "local",
 +        "Driver": "bridge",
 +        "EnableIPv6": false,
 +        "IPAM": {
 +            "Driver": "default",
 +            "Options": {},
 +            "Config": [
 +                {
 +                    "Subnet": "172.25.0.0/16",
 +                    "Gateway": "172.25.0.1"
 +                }
 +            ]
 +        },
 +        "Internal": false,
 +        "Attachable": false,
 +        "Ingress": false,
 +        "ConfigFrom": {
 +            "Network": ""
 +        },
 +        "ConfigOnly": false,
 +        "Containers": {
 +            "cb2875ab1059e66308228d9179b810db748ad287453cf758206a7025f57b0176": {
 +                "Name": "centos1",
 +                "EndpointID": "a7de8c07d195168c20548b33b506073caa03c16770f330a2e576aedcda25662c",
 +                "MacAddress": "02:42:ac:19:00:02",
 +                "IPv4Address": "172.25.0.2/16",
 +                "IPv6Address": ""
 +            }
 +        },
 +        "Options": {},
 +        "Labels": {}
 +    }
 +]
 +
 +root@debian11:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos1
 +172.17.0.3172.25.0.2
 +</code>
 +
 +<WRAP center round important 50%>
 +**Important** : Notez  que le conteneur **centos1** se trouve dans deux réseaux.
 +</WRAP>
 +
 +Faites la même chose pour le conteneur **centos2** :
 +
 +<code>
 +root@debian11:~# docker network connect my-bridged-network centos2
 +
 +root@debian11:~# docker network inspect my-bridged-network
 +[
 +    {
 +        "Name": "my-bridged-network",
 +        "Id": "4d26c1192dd7b25c3c787ef41b7bfb94d0eb989d230f33906db6d54ed9c128cc",
 +        "Created": "2023-12-15T15:34:02.824127656+01:00",
 +        "Scope": "local",
 +        "Driver": "bridge",
 +        "EnableIPv6": false,
 +        "IPAM": {
 +            "Driver": "default",
 +            "Options": {},
 +            "Config": [
 +                {
 +                    "Subnet": "172.25.0.0/16",
 +                    "Gateway": "172.25.0.1"
 +                }
 +            ]
 +        },
 +        "Internal": false,
 +        "Attachable": false,
 +        "Ingress": false,
 +        "ConfigFrom": {
 +            "Network": ""
 +        },
 +        "ConfigOnly": false,
 +        "Containers": {
 +            "cb2875ab1059e66308228d9179b810db748ad287453cf758206a7025f57b0176": {
 +                "Name": "centos1",
 +                "EndpointID": "a7de8c07d195168c20548b33b506073caa03c16770f330a2e576aedcda25662c",
 +                "MacAddress": "02:42:ac:19:00:02",
 +                "IPv4Address": "172.25.0.2/16",
 +                "IPv6Address": ""
 +            },
 +            "fc417b22a20d3f9de674889962452bfe453ced1fc389410b225055f865cb817f": {
 +                "Name": "centos2",
 +                "EndpointID": "8467b7d4233dbf855d0538dbc9b1fe718874434913baae403391b3da81ccb92b",
 +                "MacAddress": "02:42:ac:19:00:03",
 +                "IPv4Address": "172.25.0.3/16",
 +                "IPv6Address": ""
 +            }
 +        },
 +        "Options": {},
 +        "Labels": {}
 +    }
 +]
 +
 +root@debian11:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2
 +172.17.0.4172.25.0.3
 +</code>
 +
 +Connectez-vous au conteneur **centos1** en lançant bash :
 +
 +<code>
 +root@debian11:~# docker exec -it centos1 bash
 +[root@cb2875ab1059 /]#
 +</code>
 +
 +Vérifiez que la connectivité fonctionne :
 +
 +<code>
 +[root@cb2875ab1059 /]# ping 172.25.0.3
 +PING 172.25.0.3 (172.25.0.3) 56(84) bytes of data.
 +64 bytes from 172.25.0.3: icmp_seq=1 ttl=64 time=0.140 ms
 +64 bytes from 172.25.0.3: icmp_seq=2 ttl=64 time=0.099 ms
 +^C
 +--- 172.25.0.3 ping statistics ---
 +2 packets transmitted, 2 received, 0% packet loss, time 1021ms
 +rtt min/avg/max/mdev = 0.099/0.119/0.140/0.023 ms
 +</code>
 +
 +Les options possibles au niveau de la gestion du réseau sont vaste. Voici deux exemples supplémentaires.
 +
 +Il est possible d'ajouter une adresse d'un serveur DNS au lancement d'un conteneur :
 +
 +<code>
 +[root@cb2875ab1059 /]# exit
 +exit
 +
 +root@debian11:~# docker stop mongo2
 +mongo2
 +
 +root@debian11:~# docker rm mongo2
 +mongo2
 +
 +root@debian11:~# docker run -it --name mongo2 --dns 8.8.8.8 i2tch/mongodb2 bash
 +
 +root@aa2717305397:/# cat /etc/resolv.conf
 +nameserver 8.8.8.8
 +</code>
 +
 +ou de passer une entrée pour le fichier **/etc/hosts** :
 +
 +<code>
 +root@aa2717305397:/# exit
 +exit
 +
 +root@debian11:~# docker stop mongo2
 +mongo2
 +
 +root@debian11:~# docker rm mongo2
 +mongo2
 +
 +root@debian11:~# docker run -it --name mongo2 --add-host mickeymouse:127.0.0.1 i2tch/mongodb2 bash
 +root@519423c7fb32:/# cat /etc/hosts
 +127.0.0.1       localhost
 +::1     localhost ip6-localhost ip6-loopback
 +fe00::0 ip6-localnet
 +ff00::0 ip6-mcastprefix
 +ff02::1 ip6-allnodes
 +ff02::2 ip6-allrouters
 +127.0.0.1       mickeymouse
 +172.17.0.2      519423c7fb32
 +
 +root@519423c7fb32:/# exit
 +exit
 +root@debian11:~# 
 +</code>
 +
 +===Host===
 +
 +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.46** :
 +
 +<code>
 +root@debian11:~# ip addr show ens18
 +2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 +    link/ether 56:a3:fd:18:02:6d brd ff:ff:ff:ff:ff:ff
 +    altname enp0s18
 +    inet 10.0.2.46/24 brd 10.0.2.255 scope global noprefixroute ens18
 +       valid_lft forever preferred_lft forever
 +    inet6 fe80::54a3:fdff:fe18:26d/64 scope link noprefixroute 
 +       valid_lft forever preferred_lft forever
 +</code>
 +
 +Démarrez un conteneur à partir de l'image **centos** dans un réseau de type **host** :
 +
 +<code>
 +root@debian11:~# docker run -it --rm --network host --name centos3 centos bash
 +
 +[root@debian11 /]# ip a
 +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
 +    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 +    inet 127.0.0.1/8 scope host lo
 +       valid_lft forever preferred_lft forever
 +    inet6 ::1/128 scope host 
 +       valid_lft forever preferred_lft forever
 +2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 +    link/ether 56:a3:fd:18:02:6d brd ff:ff:ff:ff:ff:ff
 +    altname enp0s18
 +    inet 10.0.2.46/24 brd 10.0.2.255 scope global noprefixroute ens18
 +       valid_lft forever preferred_lft forever
 +    inet6 fe80::54a3:fdff:fe18:26d/64 scope link noprefixroute 
 +       valid_lft forever preferred_lft forever
 +3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
 +    link/ether 02:42:07:c9:88:32 brd ff:ff:ff:ff:ff:ff
 +    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
 +       valid_lft forever preferred_lft forever
 +    inet6 fe80::42:7ff:fec9:8832/64 scope link 
 +       valid_lft forever preferred_lft forever
 +102: br-4d26c1192dd7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
 +    link/ether 02:42:2d:69:ac:d5 brd ff:ff:ff:ff:ff:ff
 +    inet 172.25.0.1/16 brd 172.25.255.255 scope global br-4d26c1192dd7
 +       valid_lft forever preferred_lft forever
 +    inet6 fe80::42:2dff:fe69:acd5/64 scope link 
 +       valid_lft forever preferred_lft forever
 +104: vethc5ca04a@if103: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
 +    link/ether 42:98:9a:1c:41:76 brd ff:ff:ff:ff:ff:ff link-netnsid 2
 +    inet6 fe80::4098:9aff:fe1c:4176/64 scope link 
 +       valid_lft forever preferred_lft forever
 +106: veth6a46250@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
 +    link/ether 5e:9d:9a:86:23:b0 brd ff:ff:ff:ff:ff:ff link-netnsid 3
 +    inet6 fe80::5c9d:9aff:fe86:23b0/64 scope link 
 +       valid_lft forever preferred_lft forever
 +108: vethc5ccfca@if107: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-4d26c1192dd7 state UP group default 
 +    link/ether f2:37:cb:08:ff:8f brd ff:ff:ff:ff:ff:ff link-netnsid 2
 +    inet6 fe80::f037:cbff:fe08:ff8f/64 scope link 
 +       valid_lft forever preferred_lft forever
 +110: vetha87ff61@if109: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-4d26c1192dd7 state UP group default 
 +    link/ether 2e:e0:2d:5c:5d:c7 brd ff:ff:ff:ff:ff:ff link-netnsid 3
 +    inet6 fe80::2ce0:2dff:fe5c:5dc7/64 scope link 
 +       valid_lft forever preferred_lft forever
 +
 +[root@debian11 /]# hostname
 +debian11
 +
 +[root@debian11 /]# exit
 +exit
 +root@debian11:~#
 +</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.46: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.
 +
 +<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.
 +</WRAP>
 +
 +===None===
 +
 +Ce type de réseau est utilisé principalement dans le cas de l'utilisation d'un plugin réseau disponible dans le **[[https://hub.docker.com/search/?category=network&q=&type=plugin|Docker Hub]]**.
 +
 +Il est donc possible de lancer un conteneur totalement étanche grâce au réseau **none** :
 +
 +<code>
 +root@debian11:~# docker stop mongo2
 +mongo2
 +root@debian11:~# docker rm mongo2
 +mongo2
 +root@debian11:~# docker run -it --name mongo2 --network none i2tch/mongodb2 bash
 +root@5bfbf0306ad7:/#
 +
 +===Liens===
 +
 +Le mécanisme des liens entre conteneurs est très puissant et permet d'atteindre un autre conteneur facilement à condition que les deux conteneurs soient dans le même réseau. Créez donc un conteneur dénommé **centos3** qui est lié au conteneur **centos2** qu'il connait aussi sous l'alias **alias** :
 +
 +<code>
 +root@332aa9930f30:/# exit
 +exit
 +
 +root@debian9:~# docker run -itd --name centos3 --link centos2:alias centos
 +6a315259b2946c3bf2bb69f608cbe910d87edaadedb4f805e7a4dbf6af1eb916
 +
 +root@debian9:~# docker ps -a
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
 +6a315259b294        centos              "/bin/bash"              33 seconds ago      Up 32 seconds                                     centos3
 +332aa9930f30        i2tch/mongodb2      "docker-entrypoint..."   3 minutes ago       Exited (127) 39 seconds ago                       mongo2
 +aaed3bc8e404        centos              "/bin/bash"              16 minutes ago      Up 16 minutes                                     centos2
 +9f36a628c72b        centos              "/bin/bash"              16 minutes ago      Up 16 minutes                                     centos1
 +2169360fcbfd        centos              "/bin/bash"              20 minutes ago      Up 20 minutes                                     resotest
 +ea239635e141        testcache           "more /tmp/moment"       7 hours ago         Exited (0) 7 hours ago                            test1
 +21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   7 hours ago         Exited (137) 6 hours ago                          myDocker
 +bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                       27017/tcp           mongo1
 +f5b45072b831        i2tch/mongodb       "bash"                   19 hours ago        Exited (137) 6 hours ago                          mongo
 +9731a48f126a        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 6 hours ago                            cocky_gates
 +eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                           adoring_yonath
 +cffb4456e9c4        ubuntu              "/bin/bash"              20 hours ago        Exited (0) 20 hours ago                           i2tch
 +
 +root@debian11:~# docker exec -it centos3 bash
 +
 +[root@57e92a8b25d7 /]# ping centos2
 +PING alias (172.17.0.4) 56(84) bytes of data.
 +64 bytes from alias (172.17.0.4): icmp_seq=1 ttl=64 time=0.146 ms
 +64 bytes from alias (172.17.0.4): icmp_seq=2 ttl=64 time=0.088 ms
 +64 bytes from alias (172.17.0.4): icmp_seq=3 ttl=64 time=0.081 ms
 +64 bytes from alias (172.17.0.4): icmp_seq=4 ttl=64 time=0.070 ms
 +^C
 +--- alias ping statistics ---
 +4 packets transmitted, 4 received, 0% packet loss, time 3079ms
 +rtt min/avg/max/mdev = 0.070/0.096/0.146/0.030 ms
 +
 +[root@57e92a8b25d7 /]# cat /etc/hosts
 +127.0.0.1       localhost
 +::1     localhost ip6-localhost ip6-loopback
 +fe00::0 ip6-localnet
 +ff00::0 ip6-mcastprefix
 +ff02::1 ip6-allnodes
 +ff02::2 ip6-allrouters
 +172.17.0.4      alias fc417b22a20d centos2
 +172.17.0.2      57e92a8b25d7
 +
 +[root@57e92a8b25d7 /]# exit
 +exit
 +root@debian11:~#
 +
 +root@debian11:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos3
 +172.17.0.2
 +</code>
 +
 +Notez cependant qu le lien est unidirectionnel :
 +
 +<code>
 +root@debian11:~# docker exec -it centos2 bash
 +
 +[root@fc417b22a20d /]# ping centos3
 +ping: centos3: Name or service not known
 +
 +[root@fc417b22a20d /]# ping 172.17.0.2
 +PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
 +64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.097 ms
 +64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.082 ms
 +64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.125 ms
 +^C
 +--- 172.17.0.2 ping statistics ---
 +3 packets transmitted, 3 received, 0% packet loss, time 2029ms
 +rtt min/avg/max/mdev = 0.082/0.101/0.125/0.019 ms
 +</code>
 +
 +Dans le cas ci-dessus, **centos2** peut atteindre **centos3** en utilisant l'adresse IP **172.17.0.2** car **centos2** se trouve dans les deux réseaux avec les adresses IP 172.17.0.4 et 172.25.0.3  :
 +
 +<code>
 +[root@fc417b22a20d /]# exit
 +exit
 +
 +root@debian11:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2
 +172.17.0.4172.25.0.3
 +</code>
 +
 +====2.2 - Lancer Wordpress dans un container====
 +
 +Créez le répertoire ~/wordpress et placez-vous dedans :
 +
 +<code>
 +root@debian11:~# mkdir ~/wordpress && cd ~/wordpress
 +</code>
 +
 +Créez un conteneur dénommé **wordpressdb** à partir de l'image **mariadb:latest** :
 +
 +<code>
 +root@debian11:~/wordpress# docker run -e MYSQL_ROOT_PASSWORD=fenestros -e MYSQL_DATABASE=wordpress --name wordpressdb -v "$PWD/database":/var/lib/mysql -d mysql:latest
 +Unable to find image 'mysql:latest' locally
 +latest: Pulling from library/mysql
 +e9f2695d7e5b: Pull complete 
 +80c6055edb33: Pull complete 
 +c646ab461d8b: Pull complete 
 +012006c6a591: Pull complete 
 +929d5fa34b95: Pull complete 
 +17e0243877fa: Pull complete 
 +1850b459cd2f: Pull complete 
 +8dceaed53baf: Pull complete 
 +197b834ea1cd: Pull complete 
 +8df78c25b227: Pull complete 
 +Digest: sha256:ceb98918916bd5261b3e9866ac8271d75d276b8a4db56f1dc190770342a77a9b
 +Status: Downloaded newer image for mysql:latest
 +db3732939266ed8a112857db9c970ca39571785e62db74175bda9be5a0f9d726
 +</code>
 +
 +Vérifiez que le conteneur fonctionne :
 +
 +<code>
 +root@debian11:~/wordpress# docker ps
 +CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS          PORTS                 NAMES
 +db3732939266   mysql:latest   "docker-entrypoint.s…"   About a minute ago   Up 52 seconds   3306/tcp, 33060/tcp   wordpressdb
 +57e92a8b25d7   centos         "/bin/bash"              12 minutes ago       Up 12 minutes                         centos3
 +fc417b22a20d   centos         "/bin/bash"              25 minutes ago       Up 25 minutes                         centos2
 +cb2875ab1059   centos         "/bin/bash"              26 minutes ago       Up 25 minutes                         centos1
 +2126924504d8   centos         "/bin/bash"              29 minutes ago       Up 29 minutes                         resotest
 +</code>
 +
 +Créez un conteneur appellé **wordpress** lié au conteneur wordpressdb :
 +
 +<code>
 +root@debian11:~/wordpress# docker run -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=fenestros --name wordpress --link wordpressdb:mysql -p 10.0.2.46:80:80 -v "$PWD/html":/var/www/html -d wordpress
 +Unable to find image 'wordpress:latest' locally
 +latest: Pulling from library/wordpress
 +1f7ce2fa46ab: Already exists 
 +48824c101c6a: Pull complete 
 +249ff3a7bbe6: Pull complete 
 +aa5d47f22b64: Pull complete 
 +851cb5d3b62c: Pull complete 
 +090f07e09d3e: Pull complete 
 +74f97600920f: Pull complete 
 +f48a9f994636: Pull complete 
 +108b4c091efa: Pull complete 
 +94f753607622: Pull complete 
 +5d0ec11ef45d: Pull complete 
 +87757e6fac28: Pull complete 
 +899a04597fc2: Pull complete 
 +44506e60b7c1: Pull complete 
 +305ecc1d68f5: Pull complete 
 +a4e6cb47406c: Pull complete 
 +8d4e2943ab66: Pull complete 
 +cab275157cee: Pull complete 
 +b12b496c1035: Pull complete 
 +5bc81c9fd938: Pull complete 
 +e737031fb816: Pull complete 
 +Digest: sha256:3a2a8b925c86967a43027ec3ba146e1859de1fa0f0f535dd9b40f4d39f8b9caa
 +Status: Downloaded newer image for wordpress:latest
 +63fec083f4d6bb6a17563d9c6b4aefce2430abea6a2172997038c8f6edabab78
 +</code>
 +
 +Vérifiez que le conteneur fonctionne :
 +
 +<code>
 +root@debian11:~/wordpress# docker ps
 +CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                  NAMES
 +63fec083f4d6   wordpress      "docker-entrypoint.s…"   About a minute ago   Up About a minute   10.0.2.46:80->80/tcp   wordpress
 +db3732939266   mysql:latest   "docker-entrypoint.s…"   6 minutes ago        Up 6 minutes        3306/tcp, 33060/tcp    wordpressdb
 +57e92a8b25d7   centos         "/bin/bash"              18 minutes ago       Up 18 minutes                              centos3
 +fc417b22a20d   centos         "/bin/bash"              31 minutes ago       Up 31 minutes                              centos2
 +cb2875ab1059   centos         "/bin/bash"              31 minutes ago       Up 31 minutes                              centos1
 +2126924504d8   centos         "/bin/bash"              35 minutes ago       Up 35 minutes                              resotest
 +</code>
 +
 +Vérifiez que le Wordpress fonctionne :
 +
 +<code>
 +root@debian11:~/wordpress# lynx --dump http://10.0.2.46
 +   WordPress
 +   Select a default language [English (United States)__________]
 +
 +   Continue
 +root@debian11:~/wordpress# 
 +
 +root@debian11:~/wordpress# cd -
 +/root
 +root@debian11:~#
 +</code>
 +
 +====2.3 - Gestion d'une Architecture de Microservices====
 +
 +Vous allez mettre en place une application simple sous forme de microservices, développé par Docker et appelé **demo-voting-app**,  :
 +
 +{{ :elearning:workbooks:debian:6:avance:app.png?direct&400 |}}
 +
 +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 :
 +
 +{{ :elearning:workbooks:debian:6:avance:kubernetes15.png?direct&800 |}}
 +
 +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'application **result-app** qui tourne sous NodeJS lit ensuite la table dans la base de données PostgreSQL et affiche le résultat sous forme HTML :
 +
 +{{ :elearning:workbooks:debian:6:avance:kubernetes16.png?direct&800 |}}
 +
 +Cette application peut être mise en place sous docker avec les commandes suivantes :
 +
 +<code>
 +root@debian11:~# docker run -d --name=redis redis
 +Unable to find image 'redis:latest' locally
 +latest: Pulling from library/redis
 +1f7ce2fa46ab: Already exists 
 +4827e9d1e197: Pull complete 
 +5845062cfda9: Pull complete 
 +44d659adcf8b: Pull complete 
 +b6962d83313d: Pull complete 
 +5d29cf86ecab: Pull complete 
 +4f4fb700ef54: Pull complete 
 +3a2d9f90268c: Pull complete 
 +Digest: sha256:396b0f027ba2f33bf385771a621b58c1fd834fd2c522c35c98fd24fc17863c2f
 +Status: Downloaded newer image for redis:latest
 +227554e3e4c198272cbf21dd468e7cf78d4a75ad5ed000a9df364aa98726bc86
 +
 +root@debian11:~# docker run -d --name=db -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres postgres:9.4 
 +Unable to find image 'postgres:9.4' locally
 +9.4: Pulling from library/postgres
 +619014d83c02: Pull complete 
 +7ec0fe6664f6: Pull complete 
 +9ca7ba8f7764: Pull complete 
 +9e1155d037e2: Pull complete 
 +febcfb7f8870: Pull complete 
 +8c78c79412b5: Pull complete 
 +5a35744405c5: Pull complete 
 +27717922e067: Pull complete 
 +36f0c5255550: Pull complete 
 +dbf0a396f422: Pull complete 
 +ec4c06ea33e5: Pull complete 
 +e8dd33eba6d1: Pull complete 
 +51c81b3b2c20: Pull complete 
 +2a03dd76f5d7: Pull complete 
 +Digest: sha256:42a7a6a647a602efa9592edd1f56359800d079b93fa52c5d92244c58ac4a2ab9
 +Status: Downloaded newer image for postgres:9.4
 +5083545dcbf88ed9d1e605d306fe8dba86df1c130fcc843e7fba30eadd524545
 +
 +root@debian11:~# docker run -d --name=vote -p 5000:80 --link redis:redis dockersamples/examplevotingapp_vote
 +Unable to find image 'dockersamples/examplevotingapp_vote:latest' locally
 +latest: Pulling from dockersamples/examplevotingapp_vote
 +a378f10b3218: Pull complete 
 +c11bdfacfd25: Pull complete 
 +64fc9a66a5d8: Pull complete 
 +5146634606ba: Pull complete 
 +479ce1f6823a: Pull complete 
 +070425b38bdc: Pull complete 
 +ce42fc94cbff: Pull complete 
 +6bad37ec452b: Pull complete 
 +edf50a17349a: Pull complete 
 +db9bdfb7847f: Pull complete 
 +Digest: sha256:797919beacc239d80f6c568e170ad4be0a6afd0ff0567e89d45f1dc3350b87f7
 +Status: Downloaded newer image for dockersamples/examplevotingapp_vote:latest
 +81e6fcb9f6920c048b3062e3da8e7e48b0475e5de3059ff3e5e63cbf73cb5fe6
 +
 +root@debian11:~# docker run -d --name=result -p 5001:80 --link db:db dockersamples/examplevotingapp_result
 +Unable to find image 'dockersamples/examplevotingapp_result:latest' locally
 +latest: Pulling from dockersamples/examplevotingapp_result
 +a378f10b3218: Already exists 
 +bc194d4002b7: Pull complete 
 +231a505b2fbc: Pull complete 
 +71731700a241: Pull complete 
 +9c2ee871f3d2: Pull complete 
 +a5ec303d8450: Pull complete 
 +0548d3f3cdbd: Pull complete 
 +c33ac9356c9f: Pull complete 
 +495a50ede288: Pull complete 
 +66140bd7f458: Pull complete 
 +4d77129208cd: Pull complete 
 +Digest: sha256:0b8fe15d93c08b9b90ad2eba02af526c1bee8bc9fab162a6b93b3186aa0a5faf
 +Status: Downloaded newer image for dockersamples/examplevotingapp_result:latest
 +33a264a36bdc63ba7c0a4e3412e437d20357b1142a02e26b6f6ccfb4aaab6cf2
 +
 +root@debian11:~# docker run -d --name=worker --link db:db --link redis:redis dockersamples/examplevotingapp_worker
 +Unable to find image 'dockersamples/examplevotingapp_worker:latest' locally
 +latest: Pulling from dockersamples/examplevotingapp_worker
 +e67fdae35593: Pull complete 
 +0ab66724116f: Pull complete 
 +14ccddebb1bc: Pull complete 
 +5e265b51b431: Pull complete 
 +9ac34f7bda15: Pull complete 
 +17081859cc14: Pull complete 
 +Digest: sha256:bfa42cb2a0200cef7d384635225ca670f08c063341fc401bd27bae67ba6afc04
 +Status: Downloaded newer image for dockersamples/examplevotingapp_worker:latest
 +cf27f30654d2c527f30c1ed4b80a517ab589dc1579c30af7bd4e53eba746354a
 +
 +root@debian11:~# docker ps
 +CONTAINER ID   IMAGE                                   COMMAND                  CREATED              STATUS              PORTS                                   NAMES
 +cf27f30654d2   dockersamples/examplevotingapp_worker   "dotnet Worker.dll"      7 seconds ago        Up 3 seconds                                                worker
 +33a264a36bdc   dockersamples/examplevotingapp_result   "/usr/bin/tini -- no…"   31 seconds ago       Up 26 seconds       0.0.0.0:5001->80/tcp, :::5001->80/tcp   result
 +81e6fcb9f692   dockersamples/examplevotingapp_vote     "gunicorn app:app -b…"   55 seconds ago       Up 50 seconds       0.0.0.0:5000->80/tcp, :::5000->80/tcp   vote
 +5083545dcbf8   postgres:9.4                            "docker-entrypoint.s…"   About a minute ago   Up About a minute   5432/tcp                                db
 +227554e3e4c1   redis                                   "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp                                redis
 +63fec083f4d6   wordpress                               "docker-entrypoint.s…"   43 minutes ago       Up 42 minutes       10.0.2.46:80->80/tcp                    wordpress
 +db3732939266   mysql:latest                            "docker-entrypoint.s…"   48 minutes ago       Up 48 minutes       3306/tcp, 33060/tcp                     wordpressdb
 +57e92a8b25d7   centos                                  "/bin/bash"              59 minutes ago       Up 59 minutes                                               centos3
 +fc417b22a20d   centos                                  "/bin/bash"              About an hour ago    Up About an hour                                            centos2
 +cb2875ab1059   centos                                  "/bin/bash"              About an hour ago    Up About an hour                                            centos1
 +2126924504d8   centos                                  "/bin/bash"              About an hour ago    Up About an hour                                            resotest
 +</code>
 +
 +Cette solution utilise un réseau de type Bridge. Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant Docker. Les conteneurs ne peuvent communiquer qu'entre eux et ils ne sont pas accessibles depuis l'extérieur. Pour que les conteneurs sur le réseau puissent communiquer ou être accessibles du monde extérieur, il faut configurer le mappage de port.
 +
 +=====LAB #3 - Superviser les Conteneurs=====
 +
 +====3.1 - Les Journaux====
 +
 +Consultez les logs d'un conteneur :
 +
 +<code>
 +root@debian11:~# docker logs mongo2
 +root@5bfbf0306ad7:/# ip a
 +bash: ip: command not found
 +root@5bfbf0306ad7:/# ip addr
 +bash: ip: command not found
 +root@5bfbf0306ad7:/# exit
 +exit
 +</code>
 +
 +====3.2 - Les Processus====
 +
 +Consultez les processus d'un conteneur :
 +
 +<code>
 +root@debian11:~# docker top centos3
 +UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
 +root                818263              818243              0                   15:49               pts/              00:00:00            /bin/bash
 +</code>
 +
 +====3.3 - L'Activité en Continu====
 +
 +Pour voir l'activité d'un conteneur, utilisez la commande suivante :
 +
 +<code>
 +root@debian11:~# docker stats centos3
 +CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O         BLOCK I/O    PIDS
 +57e92a8b25d7   centos3   0.00%     880KiB / 15.62GiB   0.01%     4.72kB / 854B   0B / 4.1kB   1
 +^C
 +root@debian11:~# 
 +</code>
 +
 +-----
 +
 +Copyright © 2024 Hugh Norris.
Menu