# TP1 - Introduction à docker et cycle de vie ## Sommaire 2. [Installation](#2-installation) - [2.1. Installation de Docker](#21-installation-de-docker) - [2.2. Vérification de l'installation](#22-vérification-de-linstallation) 3. [Premiers pas avec Docker](#3-premiers-pas-avec-docker) - [3.1. Images Docker](#31-images-docker) - [3.1.1. Lister les images disponibles](#311-lister-les-images-disponibles) - [3.1.2. Télécharger une image](#312-télécharger-une-image) - [3.1.3. Rechercher une image](#313-rechercher-une-image) - [3.2. Gestion basique des conteneurs](#32-gestion-basique-des-conteneurs) - [3.2.1. Créer un premier conteneur](#321-créer-un-premier-conteneur) - [3.2.2. Observer la différence en mode détaché](#322-observer-la-différence-en-mode-détaché) 4. [Cycle de vie des conteneurs](#4-cycle-de-vie-des-conteneurs) - [4.1. États des conteneurs](#41-états-des-conteneurs) - [4.1.1. Commandes d'observation](#411-commandes-dobservation) - [4.1.2. Exercice pratique](#412-exercice-pratique) - [4.2. Manipulation des états](#42-manipulation-des-états) 5. [Inspection et Debug](#5-inspection-et-debug) - [5.1. Logs et monitoring](#51-logs-et-monitoring) - [5.2. Inspection détaillée](#52-inspection-détaillée) 6. [Exercice final](#6-exercice-final) ## 2. Installation ### 2.1. Installation de Docker URL de la page de documentation : https://docs.docker.com/desktop/setup/install/linux/archlinux/ **Note** : Docker est déjà installé sur le système des machines de l'IUT. ### 2.2 Vérification de l'installation ```bash # Vérification de la version installée sudo docker --version ``` **Résultat** : ``` Docker version 27.2.0, build 3ab4256958 ``` ```bash # Test de fonctionnement avec l'image "hello-world" sudo docker run hello-world ``` **Résultat** : ``` Hello from Docker! This message shows that your installation appears to be working correctly. ``` ## 3. Premiers pas avec Docker ### 3.1. Images Docker #### 3.1.1. Lister les images disponibles ```bash sudo docker images ``` **Résultat** : ``` REPOSITORY TAG IMAGE ID CREATED SIZE 87a2e3453d58 12 days ago 509MB 93d79f7e6a26 12 days ago 509MB 7f2d24628277 12 days ago 509MB chocolate_app-backend latest d7032a3bdf2f 12 days ago 509MB [...] ``` #### 3.1.2. Télécharger une image ```bash sudo docker pull nginx ``` **Résultat** : ``` Using default tag: latest latest: Pulling from library/nginx 6e909acdb790: Already exists 5eaa34f5b9c2: Pull complete 417c4bccf534: Pull complete e7e0ca015e55: Pull complete 373fe654e984: Pull complete 97f5c0f51d43: Pull complete c22eb46e871a: Pull complete Digest: sha256:124b44bfc9ccd1f3cedf4b592d4d1e8bddb78b51ec2ed5056c52d3692baebc19 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest ``` #### 3.1.3. Rechercher une image ```bash sudo docker search ubuntu ``` **Résultat** : ``` NAME DESCRIPTION STARS OFFICIAL ubuntu Ubuntu is a Debian-based Linux operating sys… 17524 [OK] ubuntu/squid Squid is a caching proxy for the Web. Long-t… 108 ubuntu/nginx Nginx, a high-performance reverse proxy & we… 128 ubuntu/cortex Cortex provides storage for Prometheus. Long… 4 ubuntu/kafka Apache Kafka, a distributed event streaming … 53 ``` ### 3.2 Gestion basique des conteneurs #### 3.2.1. Créer un premier conteneur ```bash sudo docker run nginx ``` **Résultat** : ``` /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh [...] ``` #### 3.2.2. Observer la différence en mode détaché ```bash sudo docker run -d nginx ``` **Résultat** : ``` e624c2ff986d10b23dc4836b3a0cb4c89013f0188b48693a307280d96735e0ff ``` ## 4. Cycle de vie des conteneurs ### 4.1. États des conteneurs #### 4.1.1. Commandes d'observation ```bash # Conteneurs en cours d'exécution sudo docker ps ``` **Résultat** : ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e624c2ff986d nginx "/docker-entrypoint.…" 6 minutes ago Up 6 minutes 80/tcp gallant_roentgen ``` ```bash # Liste de tous les conteneurs (actifs et inactifs) sudo docker ps -a ``` **Résultat** : ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e624c2ff986d nginx "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 80/tcp gallant_roentgen 1ec88668966f nginx "/docker-entrypoint.…" 9 minutes ago Exited (0) 8 minutes ago musing_kowalevski f27bbe04a801 hello-world "/hello" 13 minutes ago Exited (0) 13 minutes ago loving_ritchie 8e68c7f4032a hello-world "/hello" 13 minutes ago Exited (0) 13 minutes ago wonderful_proskuriakova [...] ``` #### 4.1.2. Exercice pratique 1. Création de trois conteneurs nginx avec des noms différents : ```bash sudo docker run -d --name web1 nginx ``` **Résultat** : ``` 74ea9e483cdfc65659e8d957de11da91c8e4c8e523f950f5bb140596fb197e90 ``` ```bash sudo docker run -d --name web2 nginx ``` **Résultat** : ``` 10df9341c62a04d78b7ba5649c5e45c865013ea616b21362fbbd026a99e86f90 ``` ```bash sudo docker run -d --name web3 nginx ``` **Résultat** : ``` 1ecd55481aedc61da233a6b26f5b4041f24f2eaa378e9cb44aed4a1180d4c97c ``` 2. Observation des états des conteneurs : ```bash sudo docker ps ``` **Résultat** : ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ecd55481aed nginx "/docker-entrypoint.…" 22 seconds ago Up 22 seconds 80/tcp web3 10df9341c62a nginx "/docker-entrypoint.…" 25 seconds ago Up 25 seconds 80/tcp web2 74ea9e483cdf nginx "/docker-entrypoint.…" 29 seconds ago Up 28 seconds 80/tcp web1 e624c2ff986d nginx "/docker-entrypoint.…" 11 minutes ago Up 11 minutes 80/tcp gallant_roentgen ``` 3. Colonnes importantes dans la sortie de `docker ps` : - **STATUS** : pour voir le statut actuel du conteneur - **NAMES** : pour voir le nom attribué au conteneur - **CONTAINER ID** : pour identifier le conteneur de manière unique - **PORTS** : pour voir les ports exposés par le conteneur ### 4.2. Manipulation des états ```bash sudo docker stop web1 ``` **Résultat** : ``` web1 ``` ```bash sudo docker start web1 ``` **Résultat** : ``` web1 ``` ```bash sudo docker restart web2 ``` **Résultat** : ``` web2 ``` ```bash sudo docker pause web3 ``` **Résultat** : ``` web3 ``` ```bash sudo docker unpause web3 ``` **Résultat** : ``` web3 ``` ```bash sudo docker kill web1 ``` **Résultat** : ``` web1 ``` ## 5. Inspection et Debug ### 5.1. Logs et monitoring ```bash sudo docker logs web3 ``` **Résultat** : ``` /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh [...] [FIN DE L'EXECUTION] ``` ```bash sudo docker logs -f web3 ``` **Résultat** : ``` /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh [...] [NE S'ARRETE PAS] ``` ```bash sudo docker stats ``` **Résultat** : ``` CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 1ecd55481aed web3 0.00% 12.8MiB / 15.4GiB 0.08% 4.43kB / 0B 0B / 12.3kB 17 10df9341c62a web2 0.00% 12.62MiB / 15.4GiB 0.08% 2.69kB / 0B 0B / 4.1kB 17 e624c2ff986d gallant_roentgen 0.00% 12.74MiB / 15.4GiB 0.08% 7.23kB / 0B 0B / 12.3kB 17 ``` ### 5.2. Inspection détaillée ```bash sudo docker inspect web3 ``` **Résultat** : ```json [ { "Id": "1ecd55481aedc61da233a6b26f5b4041f24f2eaa378e9cb44aed4a1180d4c97c", "Created": "2025-04-01T13:37:34.201569663Z", "Path": "/docker-entrypoint.sh", [...] } } ] ``` ```bash sudo docker exec -it web3 /bin/bash ``` **Résultat** : ``` root@1ecd55481aed:/# ``` *Note: Cette commande permet d'accéder à un terminal interactif à l'intérieur du conteneur.* ## 6. Exercice final ```bash sudo docker run -d --name web-test nginx ``` **Résultat** : ``` c7bd94aad4f8f9f9e24fada2c5eb09c60771852a434a3245561ebda94372ad63 ``` ```bash sudo docker ps ``` **Résultat** : ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c7bd94aad4f8 nginx "/docker-entrypoint.…" 42 seconds ago Up 41 seconds 80/tcp web-test 1ecd55481aed nginx "/docker-entrypoint.…" 35 minutes ago Up 35 minutes 80/tcp web3 10df9341c62a nginx "/docker-entrypoint.…" 35 minutes ago Up 6 minutes 80/tcp web2 e624c2ff986d nginx "/docker-entrypoint.…" 46 minutes ago Up 46 minutes 80/tcp gallant_roentgen ``` ```bash sudo docker ps -a ``` **Résultat** : ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c7bd94aad4f8 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp web-test 1ecd55481aed nginx "/docker-entrypoint.…" 36 minutes ago Up 36 minutes 80/tcp web3 10df9341c62a nginx "/docker-entrypoint.…" 36 minutes ago Up 6 minutes 80/tcp web2 74ea9e483cdf nginx "/docker-entrypoint.…" 36 minutes ago Exited (137) 6 minutes ago web1 [...] ``` ```bash sudo docker logs web-test ``` **Résultat** : ``` /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh [...] ```