ajout dev docker
This commit is contained in:
@@ -0,0 +1,213 @@
|
||||
# Commandes utilisées - TP1
|
||||
|
||||
## 2. Installation
|
||||
|
||||
### 2.2 Vérification de l'installation :
|
||||
```shell
|
||||
sudo docker --version
|
||||
# Docker version 28.3.3, build 980b856816
|
||||
|
||||
sudo docker run hello-world
|
||||
# Unable to find image 'hello-world:latest' locally
|
||||
# latest: Pulling from library/hello-world
|
||||
# 4f55086f7dd0: Pull complete
|
||||
# Digest: sha256:452a468a4bf985040037cb6d5392410206e47db9bf5b7278d281f94d1c2d0931
|
||||
# Status: Downloaded newer image for hello-world:latest
|
||||
|
||||
# Hello from Docker!
|
||||
```
|
||||
|
||||
## 3 Premiers pas avec Docker
|
||||
|
||||
### 3.1 Images Docker
|
||||
### 3.1.1 Lister les images disponibles
|
||||
```shell
|
||||
sudo docker images
|
||||
# REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
# hello-world latest e2ac70e7319a 2 weeks ago 10.1kB
|
||||
# prog_python latest 3dabe55bd71c 7 weeks ago 1.12GB
|
||||
# <none> <none> 21d22a499c76 7 weeks ago 1.12GB
|
||||
# python 3.15-rc-trixie 3bf0ec7eb030 2 months ago 1.12GB
|
||||
# imunes/template latest 58009592de73 2 years ago 387MB
|
||||
```
|
||||
|
||||
### 3.1.2 Télécharger une image
|
||||
```shell
|
||||
sudo docker pull nginx
|
||||
# Using default tag: latest
|
||||
# latest: Pulling from library/nginx
|
||||
# 5435b2dcdf5c: Pull complete
|
||||
# 054715a6bffa: Pull complete
|
||||
# 88d1d984b765: Pull complete
|
||||
# 4a038fd18db1: Pull complete
|
||||
# 84e114c2bb36: Pull complete
|
||||
# 7b5d674621c2: Pull complete
|
||||
# 448ea5cac5d5: Pull complete
|
||||
# Digest: sha256:7f0adca1fc6c29c8dc49a2e90037a10ba20dc266baaed0988e9fb4d0d8b85ba0
|
||||
# Status: Downloaded newer image for nginx:latest
|
||||
# docker.io/library/nginx:latest
|
||||
```
|
||||
|
||||
### 3.1.3 Rechercher une image
|
||||
```shell
|
||||
sudo docker search ubuntu
|
||||
# NAME DESCRIPTION STARS OFFICIAL
|
||||
# ubuntu Ubuntu is a Debian-based Linux operating sys… 17808 [OK]
|
||||
# ubuntu/squid Squid is a caching proxy for the Web. Long-t… 125
|
||||
# ...
|
||||
```
|
||||
|
||||
## 3.2 Gestion basique des conteneurs
|
||||
1. Créer un premier conteneur :
|
||||
```shell
|
||||
docker run nginx
|
||||
# Il tente de start le process/conteneur nginx et reste en stand by. On peut donc l'arrêter avec <CTRL>+C
|
||||
```
|
||||
|
||||
2.
|
||||
```shell
|
||||
docker run -d nginx
|
||||
# 30dfd1b500397ea6b1845ba194f583dd8bae8e55ba828f2ddc2819ede8d7ed00
|
||||
```
|
||||
|
||||
## 4 Cycle de vie des conteneurs
|
||||
|
||||
### 4.1.1 Commandes d'observation
|
||||
```shell
|
||||
docker ps # conteneurs en cours d'exécution
|
||||
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
# 30dfd1b50039 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp admiring_hermann
|
||||
|
||||
docker ps -a # tous les conteneurs
|
||||
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
# 30dfd1b50039 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 80/tcp admiring_hermann
|
||||
# 5a9d4e300f22 nginx "/docker-entrypoint.…" 4 minutes ago Exited (0) 4 minutes ago infallible_banach
|
||||
|
||||
# Pour supprimer toutes les images il faut faire :
|
||||
docker system prune
|
||||
```
|
||||
|
||||
### 4.1.2 Exercice pratique
|
||||
1. Créer trois conteneurs nginx avec des noms différents :
|
||||
```shell
|
||||
docker run -d --name web1 nginx
|
||||
# 9de9a334b5001da00fb27ae33e3fc09f4b29a78e9b3606d9cdf61acebaf9941e
|
||||
|
||||
docker run -d --name web2 nginx
|
||||
# db98128c8820faa3720643f7a83d9126a11bf27522a24db7218539023f680a6c
|
||||
|
||||
docker run -d --name web3 nginx
|
||||
# a0d91897890b1eb028571846e5aced4a76bbae8c8c970222a95185b0342e697e
|
||||
```
|
||||
|
||||
2. Les états de chaque conteneurs se remarquent en faisant
|
||||
|
||||
3.
|
||||
```shell
|
||||
docker ps # Après avoir lancé les conteneurs précédents
|
||||
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
# a0d91897890b nginx "/docker-entrypoint.…" 39 seconds ago Up 38 seconds 80/tcp web3
|
||||
# db98128c8820 nginx "/docker-entrypoint.…" 52 seconds ago Up 51 seconds 80/tcp web2
|
||||
# 9de9a334b500 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp web1
|
||||
```
|
||||
|
||||
## 4.2 Manipulation des états
|
||||
```shell
|
||||
docker stop web1
|
||||
# ça renvoie : web1 et en faisant docker ps, on voit qu'il n'apparait plus.
|
||||
docker start web1
|
||||
# ça renvoie : web1
|
||||
docker restart web2
|
||||
# Renvoie web2 et en faisant ps on voit que son timer a recommencé
|
||||
docker pause web3
|
||||
# renvoie web3 et affiche ceci dans ps : a0d91897890b nginx "/docker-entrypoint.…" 10 minutes ago Up 10 minutes (Paused) 80/tcp web3
|
||||
docker unpause web3 # le remet à la normal
|
||||
docker kill web1 # n'apparait plus dans le ps. Et dans ps -a : 9de9a334b500 nginx "/docker-entrypoint.…" 12 minutes ago Exited (137) 28 seconds ago web1
|
||||
```
|
||||
|
||||
# 5 Inspection et Debug
|
||||
## 5.1 Logs et monitoring
|
||||
```shell
|
||||
docker logs [container-name]
|
||||
# montre les logs de l'image actuelle du container
|
||||
docker logs -f [container-name]
|
||||
# montre les logs du container en temps réel
|
||||
docker stats
|
||||
# CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
|
||||
# a0d91897890b web3 0.00% 10.43MiB / 15.42GiB 0.07% 3.15kB / 126B 0B / 12.3kB 13
|
||||
# db98128c8820 web2 0.00% 10.41MiB / 15.42GiB 0.07% 2.83kB / 126B 0B / 4.1kB 13
|
||||
# 30dfd1b50039 admiring_hermann 0.00% 10.43MiB / 15.42GiB 0.07% 6.26kB / 126B 0B / 12.3kB 13
|
||||
```
|
||||
|
||||
## 5.2 Inspection détaillée
|
||||
```shell
|
||||
docker inspect [container-name]
|
||||
# "Id": "db98128c8820faa3720643f7a83d9126a11bf27522a24db7218539023f680a6c",
|
||||
# "Created": "2026-04-13T09:08:18.800415878Z",
|
||||
# "Path": "/docker-entrypoint.sh",
|
||||
|
||||
docker exec -it [container-name] /bin/bash
|
||||
# renvoie : root@db98128c8820:/# Il permet d'exécuter des commandes dans un container en tant que root
|
||||
```
|
||||
|
||||
# 6 Exercice final
|
||||
```shell
|
||||
# 1. Créer un conteneur nginx en mode détaché avec le nom ”web-test”
|
||||
docker run -d --name web-test nginx
|
||||
fac3038fbd6c11d119683f146c9be888158e3a145b1ba7050caad8283bb5ac78
|
||||
docker docker ps
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
fac3038fbd6c nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 80/tcp web-test
|
||||
|
||||
# 2. Pratiquer toutes les commandes du cycle de vie vues précédemment
|
||||
```shell
|
||||
[srivasta@salle234-09 TP1]$ docker stop web-test
|
||||
web-test
|
||||
[srivasta@salle234-09 TP1]$ docker start web-test
|
||||
web-test
|
||||
[srivasta@salle234-09 TP1]$ docker restart web-test
|
||||
web-test
|
||||
[srivasta@salle234-09 TP1]$ docker pause web-test
|
||||
web-test
|
||||
[srivasta@salle234-09 TP1]$ docker unpause web-test
|
||||
web-test
|
||||
[srivasta@salle234-09 TP1]$ docker kill web-test
|
||||
web-test
|
||||
```
|
||||
|
||||
# 3. Analyser les logs et les différents états
|
||||
```shell
|
||||
[srivasta@salle234-09 TP1]$ docker logs web-test
|
||||
# Le log est TRES long car l'enchainement de start, restart, stop, kill, chaque démarrage ou arrêt, Nginx lance ou coupe des dizaines de sous-processus ("workers"), ce qui génère instantanément une cascade de lignes pour chaque action.
|
||||
|
||||
docker inspect web-test
|
||||
# On voit que ça renvoie un JSON avec l'état actuel (le conteneur est éteint "Status": "exited", "Running": false). Le code d'erreur "ExitCode": 137 indique qu'il a été arrêté brutalement avec le kill que j'ai utilisé. Il est basé sur l'image "nginx", est configuré pour exposer le port "80/tcp".
|
||||
|
||||
# 4. Nettoyer l’environnement (suppression des conteneurs)
|
||||
docker stop web-test # Il n'apparait donc plus lorsque l'on fait docker ps
|
||||
```
|
||||
|
||||
# 7 Travaux Pratiques Supplémentaires
|
||||
## 7.1 Rapatrier l'image officielle du serveur web apache (httpd)
|
||||
```shell
|
||||
docker pull httpd:alpine3.17
|
||||
# Digest: sha256:03c154f29d68648c335a19c8bfca1562251bc8af534e10c6f87361551c381d21
|
||||
# Status: Downloaded newer image for httpd:alpine3.17
|
||||
# docker.io/library/httpd:alpine3.17
|
||||
```
|
||||
|
||||
## 7.2 Créer un volume
|
||||
```shell
|
||||
docker volume create volume_serveur_web #on crée le volume
|
||||
|
||||
docker run --rm -v volume_serveur_web:/data alpine sh -c 'echo "<!DOCTYPE html><html><title>C MOI</title><body><h1>Emmanuel</h1></br><p>SRIVASTAVA-TIAMZON</p></body></html>" >> /data/index.html' # On crée le volume qui contient le fichier html demandé.
|
||||
```
|
||||
|
||||
## 7.3 Démarrer un conteneur
|
||||
```shell
|
||||
docker run -d --name tp21 httpd # Démarrer un conteneur en mode détaché nommé tp21
|
||||
|
||||
docker run -d --name tp22 -v volume_serveur_web:/usr/local/apache2/htdocs/ httpd:alpine3.17 # Démarrer un conteneur en mode détaché en montant le volume précédemment créé nommé tp22
|
||||
|
||||
docker run -d --name tp23 -v volume_serveur_web:/usr/local/apache2/htdocs/ -p 8080:80 httpd:alpine3.17 # Démarrer un conteneur en mode détaché en montant le volume précédemment créé et en exposant le port 80 nommé tp23
|
||||
```
|
||||
@@ -0,0 +1,31 @@
|
||||
# 8 Questions de compréhension
|
||||
|
||||
1. Quelle est la différence entre une image et un conteneur ?
|
||||
Un conteneur est un environnement (Linux, web, etc...) qui peut être exécuté, et qui peut exécuter des commandes.
|
||||
Alors qu'une image est un modèle en lecture seule qui contient des instructions pour créer un conteneur.
|
||||
On peut prendre des images donc pour créer/modifier un conteneur alors qu'un conteneur est la base d'une image.
|
||||
|
||||
2. La différence entre un docker stop et un docker kill :
|
||||
Le 'docker stop' arrête le conteneur qui est en cours, mais proprement, donc sans répercussion car on ne peut faire de docker stop que dans des cas précis.
|
||||
Alors qu'un 'docker kill' passe au dessus des cas et des règlementations. Il arrête directement le conteneur mais le fait mal. En vérifiant le log du conteneur suite à un docker kill. On peut voir comment il a mal arrêté les processus et en renvoyant des erreurs.
|
||||
|
||||
3. On utilise un mode détaché car lorsque l'on met un conteneur snas mode détaché, il dépend de la machine et donc quand il s'arrête le conteneur s'arrête aussi. Les données enregistrées se perdent donc à la suite. Mettre un conteneur en mode détaché le rend pas dépendant de la machine.
|
||||
|
||||
4. Pour vérifier la santé d'un conteneur il faut
|
||||
Il faut faire docker inspect [container-name] et vérifier le State puis le status pour voir s'il fonctionne et donc qu'il est en bonne santé.
|
||||
|
||||
5. Les différents états d'un conteneur sont :
|
||||
NEW : The task was initialized.
|
||||
PENDING : Resources for the task were allocated.
|
||||
ASSIGNED : Docker assigned the task to nodes.
|
||||
ACCEPTED : The task was accepted by a worker node. If a worker node rejects the task, the state changes to REJECTED.
|
||||
READY : The worker node is ready to start the task
|
||||
PREPARING : Docker is preparing the task.
|
||||
STARTING : Docker is starting the task.
|
||||
RUNNING : The task is executing.
|
||||
COMPLETE : The task exited without an error code.
|
||||
FAILED : The task exited with an error code.
|
||||
SHUTDOWN : Docker requested the task to shut down.
|
||||
REJECTED : The worker node rejected the task.
|
||||
ORPHANED : The node was down for too long.
|
||||
REMOVE : The task is not terminal but the associated service was removed or scaled down.
|
||||
Reference in New Issue
Block a user