Ajout du TP n°1

This commit is contained in:
stiti
2025-04-01 17:10:17 +02:00
parent 70db1dfb82
commit 90b5c314e5
5 changed files with 440 additions and 1 deletions

View File

@@ -1,2 +1,32 @@
# Docker # Docker - Travaux Pratiques
Bienvenue dans mon dépôt pour les TP Docker.
## Structure du dépôt
```
.
├── README.md # Ce fichier
├── TP1
│ ├── COMMANDS.md # Liste des commandes utilisées et leurs résultats
│ ├── QUESTIONS.md # Réponses aux questions de compréhension
└── tp0.pdf # Sujet du TP
```
## Contenu des TP
### TP1: Introduction à Docker et Cycle de Vie
Ce TP couvre les concepts fondamentaux de Docker, incluant:
- Installation de Docker
- Gestion des images et conteneurs
- Cycle de vie des conteneurs Docker
- Inspection et débogage
- Manipulation des volumes
- ...
## Navigation dans le dépôt
- Pour consulter les commandes utilisées pendant le TP avec leurs résultats, consultez le fichier [TP1/COMMANDS.md](./TP1/COMMANDS.md)
- Pour voir les réponses aux questions de compréhension, consultez le fichier [TP1/QUESTIONS.md](./TP1/QUESTIONS.md)

362
TP1/COMMANDS.md Normal file
View File

@@ -0,0 +1,362 @@
# 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
<none> <none> 87a2e3453d58 12 days ago 509MB
<none> <none> 93d79f7e6a26 12 days ago 509MB
<none> <none> 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
[...]
```

47
TP1/QUESTIONS.md Normal file
View File

@@ -0,0 +1,47 @@
# Questions de compréhension
## Sommaire
- [3.2 Mode détaché vs Mode non-détaché](#32-mode-détaché-vs-mode-non-détaché)
- [Question 1](#1-quelle-est-la-différence-entre-une-image-et-un-conteneur)
- [Question 2](#2-expliquez-la-différence-entre-docker-stop-et-docker-kill)
- [Question 3](#3-pourquoi-utilise-t-on-le-mode-détaché)
- [Question 4](#4-comment-vérifier-la-santé-dun-conteneur)
- [Question 5](#5-quels-sont-les-différents-états-possibles-dun-conteneur)
## 3.2 Mode détaché vs Mode non-détaché
Quand on utilise la commande `sudo docker run nginx`, le conteneur se lance directement dans le terminal, et on peut voir tous les messages générés pendant le démarrage du serveur Nginx. Cela permet de suivre ce qui se passe à l'intérieur du conteneur, mais l'inconvénient est que l'on reste "bloqué" dans le terminal, et les logs du conteneur continuent à s'afficher. Cela peut être gênant si on n'a pas besoin de ces informations et si on veut simplement que le conteneur fonctionne en arrière-plan.
En revanche, si on utilise la commande `sudo docker run -d nginx`, cela lance le conteneur en mode détaché, c'est-à-dire en arrière-plan. Dans ce cas, le conteneur démarre sans afficher les logs dans le terminal. Docker renvoie alors un identifiant unique pour le conteneur. Cet identifiant permet de revenir plus tard pour interagir avec le conteneur, par exemple pour vérifier son état ou l'arrêter, sans être dérangé par les messages qui s'afficheraient normalement.
La différence principale réside donc dans le fait qu'avec la commande sans `-d`, on reste dans le terminal et on voit tous les logs du conteneur, tandis qu'avec l'option `-d`, le conteneur tourne en arrière-plan et on reçoit seulement un ID pour pouvoir gérer le conteneur plus tard. Cela est particulièrement utile quand on veut que le conteneur fonctionne en arrière-plan sans encombrer le terminal.
## 1. Quelle est la différence entre une image et un conteneur ?
**Image** : Une image Docker est un fichier statique qui contient tout le nécessaire pour exécuter une application : le système d'exploitation, les bibliothèques, les fichiers d'application, et les configurations. C'est une sorte de "modèle" ou "gabarit" pour créer des conteneurs. Les images sont immuables (elles ne changent pas une fois créées).
**Conteneur** : Un conteneur est une instance en cours d'exécution d'une image. C'est un environnement isolé qui exécute une application et qui peut interagir avec d'autres conteneurs et services. Les conteneurs sont dynamiques, car vous pouvez les démarrer, arrêter, modifier, etc.
## 2. Expliquez la différence entre docker stop et docker kill
**docker stop** : Cette commande permet d'arrêter un conteneur en envoyant un signal SIGTERM (par défaut), puis un signal SIGKILL après un délai de grâce si le conteneur ne se ferme pas proprement. Le conteneur a l'opportunité de terminer ses processus en cours avant de s'arrêter. Cela permet de fermer les applications proprement.
**docker kill** : Cette commande arrête immédiatement le conteneur en envoyant un signal SIGKILL, ce qui force le conteneur à se terminer sans lui permettre de fermer ses processus de manière ordonnée. Cela arrête le conteneur de manière brutale.
## 3. Pourquoi utilise-t-on le mode détaché ?
Le mode détaché (avec l'option `-d` de la commande `docker run`) permet de lancer un conteneur en arrière-plan. Cela permet à l'utilisateur de continuer à travailler sur d'autres tâches dans le terminal tout en maintenant le conteneur en fonctionnement. En mode détaché, le terminal n'est pas bloqué par l'exécution du conteneur, ce qui est utile pour des services de longue durée, comme les serveurs web ou les bases de données.
## 4. Comment vérifier la santé d'un conteneur ?
On peut utiliser `docker ps` pour vérifier la santé d'un conteneur. Cette commande affiche tous les conteneurs en cours d'exécution avec leur statut, ce qui permet de s'assurer qu'ils fonctionnent correctement. Pour une inspection plus détaillée, on peut utiliser `docker inspect` pour obtenir des informations complètes sur le conteneur, ou `docker logs` pour examiner les journaux du conteneur.
## 5. Quels sont les différents états possibles d'un conteneur ?
Un conteneur peut se trouver dans les états suivants :
- **Created** : Le conteneur a été créé, mais il n'est pas encore démarré.
- **Running** : Le conteneur est en cours d'exécution.
- **Paused** : Le conteneur est en pause (les processus sont arrêtés temporairement, mais la mémoire et l'état sont conservés).
- **Exited** : Le conteneur a arrêté de fonctionner (normalement ou de manière anormale). Il est toujours présent, mais il ne tourne plus.
- **Dead** : Le conteneur est dans un état "mort", ce qui signifie qu'il a échoué de manière irrécupérable.

BIN
TP1/docker Executable file

Binary file not shown.

BIN
TP1/tp0.pdf Normal file

Binary file not shown.