# 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 # 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 +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 "C MOI

Emmanuel


SRIVASTAVA-TIAMZON

" >> /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 ```