Outils pour utilisateurs

Outils du site


informatique:docker

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
informatique:docker [2025/12/16 13:45] – [4.10 Stopping : comment Docker arrête un conteneur] johninformatique:docker [2025/12/16 13:48] (Version actuelle) john
Ligne 163: Ligne 163:
  
 Schéma conceptuel : Schéma conceptuel :
-```+
 [ Docker CLI ] → (API HTTP) → [ Docker Daemon ] [ Docker CLI ] → (API HTTP) → [ Docker Daemon ]
                           ↓                           ↓
Ligne 171: Ligne 171:
                           ↓                           ↓
                    [ Registries ]                    [ Registries ]
-```+
  
 Docker est construit autour d’une architecture client/serveur. Docker est construit autour d’une architecture client/serveur.
Ligne 205: Ligne 205:
  
 Structure : Structure :
-```+
   *Layer 5 — CMD / ENTRYPOINT   *Layer 5 — CMD / ENTRYPOINT
   *Layer 4 — Code source   *Layer 4 — Code source
Ligne 211: Ligne 211:
   *Layer 2 — Paquets système supplémentaires   *Layer 2 — Paquets système supplémentaires
   *Layer 1 — Base OS (alpine, debian, python:slim…)   *Layer 1 — Base OS (alpine, debian, python:slim…)
-```+
  
 ==== Caractéristiques clés ==== ==== Caractéristiques clés ====
Ligne 220: Ligne 220:
  
 Commande pour voir les layers : Commande pour voir les layers :
-```+
 docker history nginx docker history nginx
-```+
  
 ----- -----
Ligne 231: Ligne 231:
  
 Schéma : Schéma :
-```+
 IMAGE (read-only) IMAGE (read-only)
    ▲ layers immuables    ▲ layers immuables
    |    |
 CONTAINER (read-write) CONTAINER (read-write)
-```+
  
 Lorsqu’un fichier est modifié dans le conteneur : Lorsqu’un fichier est modifié dans le conteneur :
Ligne 255: Ligne 255:
  
 Cycle de vie : Cycle de vie :
-```+
 docker create docker create
 docker start docker start
Ligne 262: Ligne 262:
 docker kill docker kill
 docker rm docker rm
-```+
  
 Commande pour inspecter un conteneur : Commande pour inspecter un conteneur :
-```+
 docker inspect mon_container docker inspect mon_container
-```+
  
 ----- -----
Ligne 286: Ligne 286:
  
 Schéma : Schéma :
-```+
 [ Host OS ] [ Host OS ]
  ├─ Namespace A → Container 1  ├─ Namespace A → Container 1
  ├─ Namespace B → Container 2  ├─ Namespace B → Container 2
  └─ Namespace C → Container 3  └─ Namespace C → Container 3
-```+
  
 ----- -----
Ligne 304: Ligne 304:
  
 Exemples : Exemples :
-```+
 docker run --memory="512m" nginx docker run --memory="512m" nginx
 docker run --cpus="1.5" nginx docker run --cpus="1.5" nginx
-```+
  
 On peut donc isoler les ressources de chaque conteneur. On peut donc isoler les ressources de chaque conteneur.
Ligne 324: Ligne 324:
  
 ==== Vérification du driver utilisé ==== ==== Vérification du driver utilisé ====
-```+
 docker info | grep Storage docker info | grep Storage
-```+
  
 Sous Linux (Ubuntu), Docker utilise **overlay2**. Sous Linux (Ubuntu), Docker utilise **overlay2**.
Ligne 344: Ligne 344:
  
 ==== Commandes ==== ==== Commandes ====
-```+
 docker pull nginx docker pull nginx
 docker push johnben/monimage:1.0 docker push johnben/monimage:1.0
 docker login docker login
-```+
  
 ----- -----
Ligne 354: Ligne 354:
 ===== 2.9 Interaction CLI ↔ Daemon ↔ Conteneur ===== ===== 2.9 Interaction CLI ↔ Daemon ↔ Conteneur =====
  
-```+
   docker run nginx   docker run nginx
     ↓     ↓
Ligne 366: Ligne 366:
     ↓     ↓
   Lancement du processus principal (ENTRYPOINT/CMD)   Lancement du processus principal (ENTRYPOINT/CMD)
-```+
  
 ----- -----
Ligne 373: Ligne 373:
  
 Sous Linux : Sous Linux :
-```+
 journalctl -u docker journalctl -u docker
-```+
  
 Sous macOS : Sous macOS :
Ligne 414: Ligne 414:
 ==== Exercice 3 — Observer les namespaces ==== ==== Exercice 3 — Observer les namespaces ====
 Depuis le conteneur : Depuis le conteneur :
-```+
   docker exec -it test-nginx sh   docker exec -it test-nginx sh
-```+
   Tester :   Tester :
-```+
   ps aux   ps aux
   hostname   hostname
-```+
  
 ----- -----
Ligne 543: Ligne 543:
 Définit l’image de base. Définit l’image de base.
 Exemples : Exemples :
-```+
 FROM node:20-alpine FROM node:20-alpine
 FROM python:3.12-slim FROM python:3.12-slim
 FROM ubuntu:22.04 FROM ubuntu:22.04
-```+
  
 Meilleures pratiques : Meilleures pratiques :
Ligne 558: Ligne 558:
 ==== WORKDIR ==== ==== WORKDIR ====
 Définit le répertoire de travail. Définit le répertoire de travail.
-```+
 WORKDIR /app WORKDIR /app
-```+
  
 Avantages : Avantages :
Ligne 570: Ligne 570:
 ==== COPY ==== ==== COPY ====
 Copie des fichiers dans l’image. Copie des fichiers dans l’image.
-```+
 COPY . . COPY . .
 COPY src/ /app/src/ COPY src/ /app/src/
 COPY package*.json ./ COPY package*.json ./
-```+
  
 Points importants : Points importants :
Ligne 584: Ligne 584:
 ==== RUN ==== ==== RUN ====
 Exécute des commandes lors du build. Exécute des commandes lors du build.
-```+
 RUN apt update && apt install -y curl RUN apt update && apt install -y curl
-```+
  
 Bonnes pratiques : Bonnes pratiques :
Ligne 597: Ligne 597:
 ==== ENV ==== ==== ENV ====
 Définit une variable d’environnement dans l’image. Définit une variable d’environnement dans l’image.
-```+
 ENV NODE_ENV=production ENV NODE_ENV=production
-```+
  
 ---- ----
Ligne 607: Ligne 607:
 === CMD === === CMD ===
 Commande utilisée par défaut si aucune autre n’est fournie. Commande utilisée par défaut si aucune autre n’est fournie.
-```+
 CMD ["npm", "start"] CMD ["npm", "start"]
-```+
  
 === ENTRYPOINT === === ENTRYPOINT ===
 Commande forcée, non écrasable. Commande forcée, non écrasable.
-```+
 ENTRYPOINT ["python"] ENTRYPOINT ["python"]
 CMD ["app.py"] CMD ["app.py"]
-```+
  
 Exécution : Exécution :
Ligne 630: Ligne 630:
  
 Exemple Node.js : Exemple Node.js :
-```+
 FROM node:20-alpine AS build FROM node:20-alpine AS build
 WORKDIR /app WORKDIR /app
Ligne 641: Ligne 641:
 COPY --from=build /app . COPY --from=build /app .
 CMD ["node", "server.js"] CMD ["node", "server.js"]
-```+
  
 Avantages : Avantages :
Ligne 654: Ligne 654:
 Bonnes pratiques 2025 : Bonnes pratiques 2025 :
   * ne jamais exécuter en root :   * ne jamais exécuter en root :
-    ```+    
     RUN adduser -D appuser     RUN adduser -D appuser
     USER appuser     USER appuser
-    ```+    
   * limiter les outils installés   * limiter les outils installés
   * scanner les images :   * scanner les images :
-    ```+    
     docker scan monimage     docker scan monimage
-    ```+    
   * utiliser des bases officielles minimalistes (alpine, slim, distroless)   * utiliser des bases officielles minimalistes (alpine, slim, distroless)
  
Ligne 674: Ligne 674:
   * multi-stage   * multi-stage
   * nettoyer les caches :   * nettoyer les caches :
-    ```+    
     RUN rm -rf /var/lib/apt/lists/*     RUN rm -rf /var/lib/apt/lists/*
-    ```+    
  
 ==== Optimiser le build ==== ==== Optimiser le build ====
Ligne 729: Ligne 729:
  
 ==== 1. Créer un répertoire ==== ==== 1. Créer un répertoire ====
-```+
 mkdir docker-app mkdir docker-app
 cd docker-app cd docker-app
-```+
  
 ==== 2. Ajouter un fichier app.py ==== ==== 2. Ajouter un fichier app.py ====
-```+
 print("Hello Johnny, Docker fonctionne en version ultra !") print("Hello Johnny, Docker fonctionne en version ultra !")
-```+
  
 ==== 3. Créer un Dockerfile ==== ==== 3. Créer un Dockerfile ====
-```+
 FROM python:3.12-slim FROM python:3.12-slim
 WORKDIR /app WORKDIR /app
 COPY . . COPY . .
 CMD ["python", "app.py"] CMD ["python", "app.py"]
-```+
  
 ==== 4. Builder l’image ==== ==== 4. Builder l’image ====
-```+
 docker build -t monpython:1.0 . docker build -t monpython:1.0 .
-```+
  
 ==== 5. Lancer l’image ==== ==== 5. Lancer l’image ====
-```+
 docker run monpython:1.0 docker run monpython:1.0
-```+
  
 ==== Résultat attendu ==== ==== Résultat attendu ====
Ligne 800: Ligne 800:
  
 Schéma : Schéma :
-```+
 IMAGE (read-only layers) IMAGE (read-only layers)
         │         │
Ligne 808: Ligne 808:
         ▼         ▼
 Processus principal (ENTRYPOINT/CMD) Processus principal (ENTRYPOINT/CMD)
-```+
  
 Un conteneur **vit tant que SON PROCESSUS PRINCIPAL est en vie**. Un conteneur **vit tant que SON PROCESSUS PRINCIPAL est en vie**.
Ligne 857: Ligne 857:
  
 ==== Détaché (-d) ==== ==== Détaché (-d) ====
-```+
 docker run -d nginx docker run -d nginx
-```+
  
 ==== Nom personnalisé (--name) ==== ==== Nom personnalisé (--name) ====
-```+
 docker run --name web nginx docker run --name web nginx
-```+
  
 ==== Ports (-p) ==== ==== Ports (-p) ====
 Mapping : Mapping :
-```+
 -p HOST:CONTAINER -p HOST:CONTAINER
-```+
  
 Exemple : Exemple :
-```+
 docker run -d -p 8080:80 nginx docker run -d -p 8080:80 nginx
-```+
 → http://localhost:8080 → http://localhost:8080
  
 ==== Variables d’environnement (-e) ==== ==== Variables d’environnement (-e) ====
-```+
 docker run -e APP_ENV=prod monapp docker run -e APP_ENV=prod monapp
-```+
  
 ==== Mode interactif (-it) ==== ==== Mode interactif (-it) ====
-```+
 docker run -it ubuntu bash docker run -it ubuntu bash
-```+
  
 ==== Volume (-v) ==== ==== Volume (-v) ====
Ligne 917: Ligne 917:
  
 ==== Métadonnées complètes ==== ==== Métadonnées complètes ====
-```+
 docker inspect moncontainer docker inspect moncontainer
-```+
  
 Parties importantes : Parties importantes :
Ligne 928: Ligne 928:
  
 ==== Obtenir uniquement l’IP ==== ==== Obtenir uniquement l’IP ====
-```+
 docker inspect -f '{{ .NetworkSettings.IPAddress }}' moncontainer docker inspect -f '{{ .NetworkSettings.IPAddress }}' moncontainer
-```+
  
 ---- ----
  
 ===== 4.7 Voir les logs ===== ===== 4.7 Voir les logs =====
-```+
 docker logs moncontainer docker logs moncontainer
 docker logs -f moncontainer docker logs -f moncontainer
-```+
  
 Options utiles : Options utiles :
Ligne 968: Ligne 968:
  
 Vérifier : Vérifier :
-```+
 docker top moncontainer docker top moncontainer
-```+
  
 Dans un OS classique : Dans un OS classique :
-```+
 ps aux ps aux
-```+
  
 ---- ----
Ligne 995: Ligne 995:
  
 Schéma : Schéma :
-```+
 HOST : 8080 → CONTAINER : 80 HOST : 8080 → CONTAINER : 80
-```+
  
 Commande : Commande :
-```+
 docker run -p 8080:80 nginx docker run -p 8080:80 nginx
-```+
  
 Lister les ports : Lister les ports :
-```+
 docker port moncontainer docker port moncontainer
-```+
  
 ---- ----
Ligne 1014: Ligne 1014:
  
 Le conteneur a son propre système : Le conteneur a son propre système :
-```+
 docker exec -it moncontainer sh docker exec -it moncontainer sh
 ls -la ls -la
-```+
  
 Pour copier un fichier : Pour copier un fichier :
-```+
 docker cp fichier.txt moncontainer:/tmp/ docker cp fichier.txt moncontainer:/tmp/
 docker cp moncontainer:/etc/nginx/nginx.conf . docker cp moncontainer:/etc/nginx/nginx.conf .
-```+
  
 ---- ----
  
 ===== 4.13 Nettoyage des conteneurs ===== ===== 4.13 Nettoyage des conteneurs =====
-```+
 docker rm id docker rm id
 docker rm -f id docker rm -f id
 docker container prune docker container prune
 docker system prune docker system prune
-```+
  
 ---- ----
Ligne 1041: Ligne 1041:
   * **container keeps restarting**   * **container keeps restarting**
     → mauvais CMD / erreur au démarrage       → mauvais CMD / erreur au démarrage  
-    ```+    
     docker logs     docker logs
-    ```+    
  
   * **ports already in use**   * **ports already in use**
Ligne 1059: Ligne 1059:
  
 ==== 1. Lancer un conteneur Nginx ==== ==== 1. Lancer un conteneur Nginx ====
-```+
 docker run -d -p 8080:80 --name demo-nginx nginx docker run -d -p 8080:80 --name demo-nginx nginx
-```+
  
 ==== 2. Explorer le conteneur ==== ==== 2. Explorer le conteneur ====
-```+
 docker exec -it demo-nginx sh docker exec -it demo-nginx sh
-```+
  
 ==== 3. Voir les logs ==== ==== 3. Voir les logs ====
-```+
 docker logs -f demo-nginx docker logs -f demo-nginx
-```+
  
 ==== 4. Copier un fichier de configuration ==== ==== 4. Copier un fichier de configuration ====
-```+
 docker cp demo-nginx:/etc/nginx/nginx.conf . docker cp demo-nginx:/etc/nginx/nginx.conf .
-```+
  
 ==== 5. Redémarrer ==== ==== 5. Redémarrer ====
-```+
 docker restart demo-nginx docker restart demo-nginx
-```+
  
 ==== 6. Supprimer ==== ==== 6. Supprimer ====
-```+
 docker rm -f demo-nginx docker rm -f demo-nginx
-```+
  
 ---- ----
Ligne 1147: Ligne 1147:
  
 Création : Création :
-```+
 docker volume create data-mysql docker volume create data-mysql
-```+
  
 Utilisation : Utilisation :
-```+
 docker run -d   -v data-mysql:/var/lib/mysql   mysql:8 docker run -d   -v data-mysql:/var/lib/mysql   mysql:8
-```+
  
 Lister : Lister :
-```+
 docker volume ls docker volume ls
-```+
  
 Inspecter : Inspecter :
-```+
 docker volume inspect data-mysql docker volume inspect data-mysql
-```+
  
 Avantages : Avantages :
Ligne 1177: Ligne 1177:
  
 Syntaxe : Syntaxe :
-```+
 -v /chemin/hote:/chemin/conteneur -v /chemin/hote:/chemin/conteneur
-```+
  
 Exemple : Exemple :
-```+
 docker run -d   -v /home/johnny/site:/var/www/html   php:8.2-apache docker run -d   -v /home/johnny/site:/var/www/html   php:8.2-apache
-```+
  
 Avantages : Avantages :
Ligne 1199: Ligne 1199:
  
 Sous Linux : Sous Linux :
-```+
 /var/lib/docker/volumes/ /var/lib/docker/volumes/
-```+
  
 Sous macOS et Windows (Docker Desktop) : Sous macOS et Windows (Docker Desktop) :
Ligne 1211: Ligne 1211:
  
 Depuis un conteneur temporaire : Depuis un conteneur temporaire :
-```+
 docker run --rm -it   -v data-mysql:/data   alpine sh docker run --rm -it   -v data-mysql:/data   alpine sh
-```+
  
 Puis dans le conteneur : Puis dans le conteneur :
-```+
 ls -la /data ls -la /data
-```+
  
 ---- ----
Ligne 1228: Ligne 1228:
  
 Corriger une permission avec alpine : Corriger une permission avec alpine :
-```+
 docker run --rm -v data:/data alpine chown -R 1000:1000 /data docker run --rm -v data:/data alpine chown -R 1000:1000 /data
-```+
  
 ---- ----
Ligne 1237: Ligne 1237:
  
 Création d’une archive : Création d’une archive :
-```+
 docker run --rm   -v data-mysql:/source   -v /backup:/backup   alpine tar czvf /backup/mysql.tar.gz /source docker run --rm   -v data-mysql:/source   -v /backup:/backup   alpine tar czvf /backup/mysql.tar.gz /source
-```+
  
 Restauration : Restauration :
-```+
 docker run --rm   -v data-mysql:/dest   -v /backup:/backup   alpine tar xzvf /backup/mysql.tar.gz -C /dest --strip 1 docker run --rm   -v data-mysql:/dest   -v /backup:/backup   alpine tar xzvf /backup/mysql.tar.gz -C /dest --strip 1
-```+
  
 ---- ----
Ligne 1251: Ligne 1251:
  
 Supprimer un volume spécifique : Supprimer un volume spécifique :
-```+
 docker volume rm data-mysql docker volume rm data-mysql
-```+
  
 Supprimer les volumes inutilisés : Supprimer les volumes inutilisés :
-```+
 docker volume prune docker volume prune
-```+
  
 ---- ----
Ligne 1283: Ligne 1283:
  
 Commandes à exécuter : Commandes à exécuter :
-```+
 docker volume create mysql-data docker volume create mysql-data
 docker run -d --name mydb   -e MYSQL_ROOT_PASSWORD=1234   -v mysql-data:/var/lib/mysql   mysql:8 docker run -d --name mydb   -e MYSQL_ROOT_PASSWORD=1234   -v mysql-data:/var/lib/mysql   mysql:8
-```+
  
 Ajouter une table : Ajouter une table :
-```+
 docker exec -it mydb mysql -u root -p1234 -e "CREATE DATABASE test;" docker exec -it mydb mysql -u root -p1234 -e "CREATE DATABASE test;"
 docker exec -it mydb mysql -u root -p1234 -e "USE test; CREATE TABLE demo(id INT);" docker exec -it mydb mysql -u root -p1234 -e "USE test; CREATE TABLE demo(id INT);"
-```+
  
 Supprimer le conteneur : Supprimer le conteneur :
-```+
 docker rm -f mydb docker rm -f mydb
-```+
  
 ==== CORRIGÉ ==== ==== CORRIGÉ ====
 Vérification : Vérification :
-```+
 docker run --rm -it -v mysql-data:/data alpine ls -la /data docker run --rm -it -v mysql-data:/data alpine ls -la /data
-```+
 → **les fichiers .ibd et .frm sont présents**   → **les fichiers .ibd et .frm sont présents**  
 → la base est bien persistée → la base est bien persistée
Ligne 1312: Ligne 1312:
  
 Création bind mount : Création bind mount :
-```+
 mkdir ~/monapp mkdir ~/monapp
 echo "hello" > ~/monapp/test.txt echo "hello" > ~/monapp/test.txt
  
 docker run --rm -it   -v ~/monapp:/data   alpine sh docker run --rm -it   -v ~/monapp:/data   alpine sh
-```+
  
 Dans alpine : Dans alpine :
-```+
 cat /data/test.txt cat /data/test.txt
-```+
  
 MODIFIER depuis le conteneur : MODIFIER depuis le conteneur :
-```+
 echo "modifié" > /data/test.txt echo "modifié" > /data/test.txt
-```+
  
 Quitter, puis vérifier côté hôte : Quitter, puis vérifier côté hôte :
-```+
 cat ~/monapp/test.txt cat ~/monapp/test.txt
-```+
  
 ==== CORRIGÉ ==== ==== CORRIGÉ ====
Ligne 1343: Ligne 1343:
  
 Créer un volume : Créer un volume :
-```+
 docker volume create testdata docker volume create testdata
-```+
  
 Ajouter des fichiers : Ajouter des fichiers :
-```+
 docker run --rm -v testdata:/data alpine sh -c "echo 'Johnny' > /data/name.txt" docker run --rm -v testdata:/data alpine sh -c "echo 'Johnny' > /data/name.txt"
-```+
  
 Sauver : Sauver :
-```+
 mkdir ~/backup mkdir ~/backup
 docker run --rm   -v testdata:/source   -v ~/backup:/backup   alpine tar czvf /backup/archive.tar.gz /source docker run --rm   -v testdata:/source   -v ~/backup:/backup   alpine tar czvf /backup/archive.tar.gz /source
-```+
  
 ==== CORRIGÉ ==== ==== CORRIGÉ ====
 Fichier créé : Fichier créé :
-```+
 ls -la ~/backup/archive.tar.gz ls -la ~/backup/archive.tar.gz
-```+
 → archive présente   → archive présente  
 → backup réussi → backup réussi
Ligne 1406: Ligne 1406:
  
 Schéma général : Schéma général :
-```+
 [Host Network] [Host Network]
       │       │
Ligne 1412: Ligne 1412:
       │       │
 [Bridge Network] — Conteneurs isolés + IP internes [Bridge Network] — Conteneurs isolés + IP internes
-```+
  
 Chaque conteneur vit dans un **namespace réseau isolé**. Chaque conteneur vit dans un **namespace réseau isolé**.
Ligne 1433: Ligne 1433:
  
 Le réseau *bridge* est créé automatiquement : Le réseau *bridge* est créé automatiquement :
-```+
 docker network ls docker network ls
-```+
  
 On y voit : On y voit :
-```+
 bridge   host   none bridge   host   none
-```+
  
 IP par défaut : IP par défaut :
-```+
 172.17.0.0/16 172.17.0.0/16
-```+
  
 Lorsqu’un conteneur démarre : Lorsqu’un conteneur démarre :
-```+
 docker run -d nginx docker run -d nginx
-```+
  
 Il reçoit une IP locale : Il reçoit une IP locale :
-```+
 172.17.0.2 172.17.0.2
-```+
  
 ---- ----
Ligne 1462: Ligne 1462:
  
 Le mapping : Le mapping :
-```+
 -p 8080:80 -p 8080:80
-```+
  
 Signifie : Signifie :
-```+
 HÔTE port 8080 → CONTENEUR port 80 HÔTE port 8080 → CONTENEUR port 80
-```+
  
 Docker configure automatiquement : Docker configure automatiquement :
Ligne 1481: Ligne 1481:
  
 ==== Inspecter un réseau ==== ==== Inspecter un réseau ====
-```+
 docker network inspect bridge docker network inspect bridge
-```+
  
 ==== Inspecter un conteneur ==== ==== Inspecter un conteneur ====
-```+
 docker inspect moncontainer docker inspect moncontainer
-```+
  
 Sections importantes : Sections importantes :
Ligne 1501: Ligne 1501:
  
 Créer : Créer :
-```+
 docker network create monreseau docker network create monreseau
-```+
  
 Lancer deux conteneurs : Lancer deux conteneurs :
-```+
 docker run -d --name web --network monreseau nginx docker run -d --name web --network monreseau nginx
 docker run -d --name api --network monreseau alpine sleep 9999 docker run -d --name api --network monreseau alpine sleep 9999
-```+
  
 Tester la communication : Tester la communication :
-```+
 docker exec -it api ping web docker exec -it api ping web
-```+
  
 Résultat attendu : Résultat attendu :
-```+
 PING web (172.x.x.x): 56 data bytes PING web (172.x.x.x): 56 data bytes
-```+
  
 Docker crée automatiquement un **DNS interne**. Docker crée automatiquement un **DNS interne**.
Ligne 1528: Ligne 1528:
  
 Créer un alias : Créer un alias :
-```+
 docker run -d --network monreseau --network-alias backend nginx docker run -d --network monreseau --network-alias backend nginx
-```+
  
 Tester : Tester :
-```+
 docker exec -it api ping backend docker exec -it api ping backend
-```+
  
 ---- ----
Ligne 1541: Ligne 1541:
 ===== 6.8 Le réseau Host ===== ===== 6.8 Le réseau Host =====
  
-```+
 docker run --network host nginx docker run --network host nginx
-```+
  
 Le conteneur : Le conteneur :
Ligne 1557: Ligne 1557:
 ===== 6.9 Le réseau None ===== ===== 6.9 Le réseau None =====
  
-```+
 docker run --network none alpine docker run --network none alpine
-```+
  
 Résultat : Résultat :
Ligne 1576: Ligne 1576:
  
 Exemple de création : Exemple de création :
-```+
 docker network create -d macvlan   --subnet=192.168.1.0/24   --gateway=192.168.1.1   -o parent=eth0 pubnet docker network create -d macvlan   --subnet=192.168.1.0/24   --gateway=192.168.1.1   -o parent=eth0 pubnet
-```+
  
 Les conteneurs apparaissent comme des machines réelles sur le LAN. Les conteneurs apparaissent comme des machines réelles sur le LAN.
Ligne 1597: Ligne 1597:
  
 Exemple : Exemple :
-```+
 version: "3.9" version: "3.9"
 services: services:
Ligne 1614: Ligne 1614:
   backend:   backend:
     driver: bridge     driver: bridge
-```+
  
 Test DNS : Test DNS :
-```+
 docker compose exec api ping web docker compose exec api ping web
-```+
  
 ---- ----
Ligne 1626: Ligne 1626:
  
 ==== Tester DNS ==== ==== Tester DNS ====
-```+
 docker exec -it conteneur nslookup web docker exec -it conteneur nslookup web
-```+
  
 ==== Sniffer ==== ==== Sniffer ====
-```+
 docker run --rm -it --net=host nicolaka/netshoot docker run --rm -it --net=host nicolaka/netshoot
-```+
  
 Netshoot contient : Netshoot contient :
Ligne 1649: Ligne 1649:
  
 Commandes : Commandes :
-```+
 docker run -d --name test-nginx nginx docker run -d --name test-nginx nginx
 docker inspect -f '{{ .NetworkSettings.IPAddress }}' test-nginx docker inspect -f '{{ .NetworkSettings.IPAddress }}' test-nginx
-```+
  
 **RÉPONSE ATTENDUE :**   **RÉPONSE ATTENDUE :**  
Ligne 1662: Ligne 1662:
  
 Création réseau : Création réseau :
-```+
 docker network create reseau-test docker network create reseau-test
-```+
  
 Lancement conteneurs : Lancement conteneurs :
-```+
 docker run -d --name c1 --network reseau-test alpine sleep 9999 docker run -d --name c1 --network reseau-test alpine sleep 9999
 docker run -d --name c2 --network reseau-test alpine sleep 9999 docker run -d --name c2 --network reseau-test alpine sleep 9999
-```+
  
 Ping : Ping :
-```+
 docker exec -it c1 ping -c 2 c2 docker exec -it c1 ping -c 2 c2
-```+
  
 **RÉPONSE ATTENDUE :**   **RÉPONSE ATTENDUE :**  
Ligne 1684: Ligne 1684:
 ==== EXERCICE 3 : Conteneur sans réseau ==== ==== EXERCICE 3 : Conteneur sans réseau ====
  
-```+
 docker run --network none alpine ip a docker run --network none alpine ip a
-```+
  
 **RÉPONSE ATTENDUE :**   **RÉPONSE ATTENDUE :**  
Ligne 1732: Ligne 1732:
  
 Commande principale : Commande principale :
-```+
 docker compose up -d docker compose up -d
-```+
  
 ---- ----
Ligne 1741: Ligne 1741:
  
 Structure générale : Structure générale :
-```+
 version: "3.9" version: "3.9"
 services: services:
Ligne 1753: Ligne 1753:
 volumes: volumes:
   ...   ...
-```+
  
 Les sections principales : Les sections principales :
Ligne 1767: Ligne 1767:
  
 Exemple : Exemple :
-```+
 services: services:
   web:   web:
Ligne 1773: Ligne 1773:
     ports:     ports:
       - "8080:80"       - "8080:80"
-```+
  
 Options courantes : Options courantes :
Ligne 1790: Ligne 1790:
 ===== 7.4 Build d’une image via Compose ===== ===== 7.4 Build d’une image via Compose =====
  
-```+
 services: services:
   api:   api:
Ligne 1796: Ligne 1796:
     ports:     ports:
       - "3000:3000"       - "3000:3000"
-```+
  
 Compose exécutera automatiquement : Compose exécutera automatiquement :
-```+
 docker build . docker build .
-```+
  
 ---- ----
Ligne 1808: Ligne 1808:
  
 ==== Dans le fichier ==== ==== Dans le fichier ====
-```+
 environment: environment:
   - APP_ENV=prod   - APP_ENV=prod
   - DB_HOST=mysql   - DB_HOST=mysql
-```+
  
 ==== Via .env ==== ==== Via .env ====
 Fichier `.env` : Fichier `.env` :
-```+
 APP_ENV=prod APP_ENV=prod
 PORT=8080 PORT=8080
-```+
  
 Compose : Compose :
-```+
 ports: ports:
   - "${PORT}:80"   - "${PORT}:80"
-```+
  
 ---- ----
Ligne 1832: Ligne 1832:
  
 Exemple : Exemple :
-```+
 services: services:
   db:   db:
Ligne 1841: Ligne 1841:
 volumes: volumes:
   dbdata:   dbdata:
-```+
  
 Permet la persistance automatique. Permet la persistance automatique.
Ligne 1850: Ligne 1850:
  
 Définir un réseau : Définir un réseau :
-```+
 networks: networks:
   backend:   backend:
     driver: bridge     driver: bridge
-```+
  
 Assigner un service : Assigner un service :
-```+
 services: services:
   api:   api:
Ligne 1863: Ligne 1863:
     networks:     networks:
       - backend       - backend
-```+
  
 Par défaut, Compose crée un réseau : Par défaut, Compose crée un réseau :
-```+
 <dossier>_default <dossier>_default
-```+
  
 ---- ----
Ligne 1874: Ligne 1874:
 ===== 7.8 depends_on (ordre de démarrage) ===== ===== 7.8 depends_on (ordre de démarrage) =====
  
-```+
 services: services:
   web:   web:
     depends_on:     depends_on:
       - db       - db
-```+
  
 IMPORTANT : IMPORTANT :
Ligne 1885: Ligne 1885:
  
 Pour vérifier la santé : Pour vérifier la santé :
-```+
 healthcheck: healthcheck:
   test: ["CMD", "curl", "-f", "http://localhost"]   test: ["CMD", "curl", "-f", "http://localhost"]
Ligne 1891: Ligne 1891:
   timeout: 3s   timeout: 3s
   retries: 5   retries: 5
-```+
  
 ---- ----
Ligne 1897: Ligne 1897:
 ===== 7.9 Commande, entrypoint ===== ===== 7.9 Commande, entrypoint =====
  
-```+
 services: services:
   app:   app:
     image: node     image: node
     command: ["npm", "start"]     command: ["npm", "start"]
-```+
  
 Override ENTRYPOINT : Override ENTRYPOINT :
-```+
 entrypoint: ["python3"] entrypoint: ["python3"]
 command: ["app.py"] command: ["app.py"]
-```+
  
 ---- ----
Ligne 1914: Ligne 1914:
 ===== 7.10 Restart policies ===== ===== 7.10 Restart policies =====
  
-```+
 restart: always restart: always
 restart: on-failure restart: on-failure
 restart: unless-stopped restart: unless-stopped
-```+
  
 ---- ----
Ligne 1924: Ligne 1924:
 ===== 7.11 Scaling (réplication) ===== ===== 7.11 Scaling (réplication) =====
  
-```+
 docker compose up -d --scale web=3 docker compose up -d --scale web=3
-```+
  
 Limites : Limites :
Ligne 1932: Ligne 1932:
  
 Exemple correct : Exemple correct :
-```+
 ports: ports:
   - "80"   - "80"
-```+
 (= port dynamique) (= port dynamique)
  
Ligne 1942: Ligne 1942:
 ===== 7.12 Commandes essentielles ===== ===== 7.12 Commandes essentielles =====
  
-```+
 docker compose up -d docker compose up -d
 docker compose down docker compose down
Ligne 1950: Ligne 1950:
 docker compose restart docker compose restart
 docker compose up -d --build docker compose up -d --build
-```+
  
 ---- ----
Ligne 1956: Ligne 1956:
 ===== 7.13 Exemple complet : Nginx + PHP + MySQL ===== ===== 7.13 Exemple complet : Nginx + PHP + MySQL =====
  
-```+
 version: "3.9" version: "3.9"
 services: services:
Ligne 1982: Ligne 1982:
 volumes: volumes:
   dbdata:   dbdata:
-```+
  
 ---- ----
Ligne 1988: Ligne 1988:
 ===== 7.14 Exemple professionnel : API Node + Redis cache ===== ===== 7.14 Exemple professionnel : API Node + Redis cache =====
  
-```+
 version: "3.9" version: "3.9"
 services: services:
Ligne 2006: Ligne 2006:
 volumes: volumes:
   redisdata:   redisdata:
-```+
  
 ---- ----
Ligne 2015: Ligne 2015:
  
 docker-compose.yml : docker-compose.yml :
-```+
 version: "3.9" version: "3.9"
 services: services:
Ligne 2022: Ligne 2022:
     ports:     ports:
       - "8080:80"       - "8080:80"
-```+
  
 Commande : Commande :
-```+
 docker compose up -d docker compose up -d
-```+
  
 **RÉPONSE :** http://localhost:8080 affiche Nginx. **RÉPONSE :** http://localhost:8080 affiche Nginx.
Ligne 2036: Ligne 2036:
  
 docker-compose.yml : docker-compose.yml :
-```+
 services: services:
   c1:   c1:
Ligne 2045: Ligne 2045:
     image: alpine     image: alpine
     command: sleep 9999     command: sleep 9999
-```+
  
 Test : Test :
-```+
 docker compose exec c1 ping -c 2 c2 docker compose exec c1 ping -c 2 c2
-```+
  
 **RÉPONSE :** **RÉPONSE :**
Ligne 2060: Ligne 2060:
  
 docker-compose.yml : docker-compose.yml :
-```+
 version: "3.9" version: "3.9"
 services: services:
Ligne 2072: Ligne 2072:
 volumes: volumes:
   mysqldata:   mysqldata:
-```+
  
 Test : Test :
-```+
 docker compose exec db mysql -uroot -p1234 -e "CREATE DATABASE testdb;" docker compose exec db mysql -uroot -p1234 -e "CREATE DATABASE testdb;"
 docker compose down docker compose down
 docker compose up -d docker compose up -d
 docker compose exec db mysql -uroot -p1234 -e "SHOW DATABASES;" docker compose exec db mysql -uroot -p1234 -e "SHOW DATABASES;"
-```+
  
 **RÉPONSE :**   **RÉPONSE :**  
Ligne 2145: Ligne 2145:
  
 Exemple dans Dockerfile : Exemple dans Dockerfile :
-```+
 RUN adduser -D appuser RUN adduser -D appuser
 USER appuser USER appuser
-```+
  
 Pour vérifier : Pour vérifier :
-```+
 docker exec -it monapp id docker exec -it monapp id
-```+
  
 ---- ----
Ligne 2162: Ligne 2162:
  
 Lister les capabilities disponibles : Lister les capabilities disponibles :
-```+
 docker run --rm alpine capsh --print docker run --rm alpine capsh --print
-```+
  
 Désactiver TOUTES les capabilities : Désactiver TOUTES les capabilities :
-```+
 docker run --cap-drop=ALL myapp docker run --cap-drop=ALL myapp
-```+
  
 N’en autoriser qu’une : N’en autoriser qu’une :
-```+
 docker run --cap-drop=ALL --cap-add=NET_ADMIN myapp docker run --cap-drop=ALL --cap-add=NET_ADMIN myapp
-```+
  
 ---- ----
Ligne 2183: Ligne 2183:
  
 Voir le profil par défaut : Voir le profil par défaut :
-```+
 /usr/share/docker/seccomp.json /usr/share/docker/seccomp.json
-```+
  
 Exécuter un conteneur sans seccomp : Exécuter un conteneur sans seccomp :
-```+
 docker run --security-opt seccomp=unconfined myapp docker run --security-opt seccomp=unconfined myapp
-```+
 → DÉCONSEILLÉ en production. → DÉCONSEILLÉ en production.
  
Ligne 2199: Ligne 2199:
 ==== AppArmor (Ubuntu / Debian) ==== ==== AppArmor (Ubuntu / Debian) ====
 Voir profils : Voir profils :
-```+
 aa-status aa-status
-```+
  
 Activer un profil : Activer un profil :
-```+
 docker run --security-opt apparmor=monprofil myapp docker run --security-opt apparmor=monprofil myapp
-```+
  
 ==== SELinux (CentOS / RHEL) ==== ==== SELinux (CentOS / RHEL) ====
 Mode permissif : Mode permissif :
-```+
 setenforce 0 setenforce 0
-```+
  
 Mode enforcing : Mode enforcing :
-```+
 setenforce 1 setenforce 1
-```+
  
 Label SELinux pour Docker : Label SELinux pour Docker :
-```+
 docker run -v data:/data:Z myapp docker run -v data:/data:Z myapp
-```+
  
 ---- ----
Ligne 2229: Ligne 2229:
  
 Docker propose un scan natif : Docker propose un scan natif :
-```+
 docker scan monimage docker scan monimage
-```+
  
 Sortie : Sortie :
Ligne 2240: Ligne 2240:
  
 Autre outil : Trivy Autre outil : Trivy
-```+
 docker run aquasec/trivy image monimage docker run aquasec/trivy image monimage
-```+
  
 ---- ----
Ligne 2249: Ligne 2249:
  
 Activer la confiance : Activer la confiance :
-```+
 export DOCKER_CONTENT_TRUST=1 export DOCKER_CONTENT_TRUST=1
-```+
  
 Signer une image : Signer une image :
-```+
 docker trust sign monrepo/monimage:1.0 docker trust sign monrepo/monimage:1.0
-```+
  
 Valider une signature : Valider une signature :
-```+
 docker trust inspect monrepo/monimage docker trust inspect monrepo/monimage
-```+
  
 ---- ----
Ligne 2274: Ligne 2274:
   * utiliser multi-stage builds   * utiliser multi-stage builds
   * supprimer les outils sensibles :   * supprimer les outils sensibles :
-    ```+    
     RUN apk del curl git build-base     RUN apk del curl git build-base
-    ```+    
  
 ---- ----
Ligne 2283: Ligne 2283:
  
 ==== Isoler les processus ==== ==== Isoler les processus ====
-```+
 docker run --pids-limit 100 myapp docker run --pids-limit 100 myapp
-```+
  
 ==== Limiter mémoire ==== ==== Limiter mémoire ====
-```+
 docker run --memory=512m myapp docker run --memory=512m myapp
-```+
  
 ==== Limiter CPU ==== ==== Limiter CPU ====
-```+
 docker run --cpus="1.0" myapp docker run --cpus="1.0" myapp
-```+
  
 ==== Lire-only filesystem ==== ==== Lire-only filesystem ====
-```+
 docker run --read-only myapp docker run --read-only myapp
-```+
  
 ==== Désactiver nouveau processus ==== ==== Désactiver nouveau processus ====
-```+
 docker run --security-opt no-new-privileges myapp docker run --security-opt no-new-privileges myapp
-```+
  
 ---- ----
Ligne 2317: Ligne 2317:
  
 ---- Exemple : Nginx accessible seulement via backend ---- ---- Exemple : Nginx accessible seulement via backend ----
-```+
 networks: networks:
   backend:   backend:
Ligne 2329: Ligne 2329:
     networks:     networks:
       - backend       - backend
-```+
  
 ---- Firewall interne ---- ---- Firewall interne ----
-```+
 docker run --cap-add NET_ADMIN alpine iptables -L docker run --cap-add NET_ADMIN alpine iptables -L
-```+
  
 ---- ----
Ligne 2346: Ligne 2346:
  
 ==== Docker Compose secrets ==== ==== Docker Compose secrets ====
-```+
 secrets: secrets:
   db_pass:   db_pass:
     file: ./db_pass.txt     file: ./db_pass.txt
-```+
  
 ==== Usage ==== ==== Usage ====
-```+
 services: services:
   db:   db:
     secrets:     secrets:
       - db_pass       - db_pass
-```+
  
 Dans le conteneur : Dans le conteneur :
-```+
 /run/secrets/db_pass /run/secrets/db_pass
-```+
  
 ---- ----
Ligne 2370: Ligne 2370:
  
 Authentification : Authentification :
-```+
 docker login registry.example.com docker login registry.example.com
-```+
  
 Limiter le push : Limiter le push :
-```+
 docker push registry.example.com/secure/image:1.0 docker push registry.example.com/secure/image:1.0
-```+
  
 Registry privé sécurisé : Registry privé sécurisé :
Ligne 2394: Ligne 2394:
  
 Solution : Solution :
-```+
 docker run -it --user 1000:1000 alpine id docker run -it --user 1000:1000 alpine id
-```+
  
 **RÉPONSE :** **RÉPONSE :**
 Le conteneur affiche : Le conteneur affiche :
-```+
 uid=1000 gid=1000 uid=1000 gid=1000
-```+
  
 ---- ----
Ligne 2409: Ligne 2409:
  
 Commandes : Commandes :
-```+
 docker run --cap-drop=ALL alpine sh -c "ping 8.8.8.8" docker run --cap-drop=ALL alpine sh -c "ping 8.8.8.8"
-```+
  
 **RÉSULTAT ATTENDU :** **RÉSULTAT ATTENDU :**
-```+
 ping: socket: Operation not permitted ping: socket: Operation not permitted
-```+
  
  → NORMAL : capability supprimée.  → NORMAL : capability supprimée.
Ligne 2423: Ligne 2423:
  
 ==== EXERCICE 3 : Scanner une image ==== ==== EXERCICE 3 : Scanner une image ====
-```+
 docker scan nginx docker scan nginx
-```+
  
 **RÉSULTAT ATTENDU :** **RÉSULTAT ATTENDU :**
Ligne 2434: Ligne 2434:
 ==== EXERCICE 4 : Fichier système en mode read-only ==== ==== EXERCICE 4 : Fichier système en mode read-only ====
  
-```+
 docker run --read-only -it alpine touch /test docker run --read-only -it alpine touch /test
-```+
  
 **RÉPONSE ATTENDUE :** **RÉPONSE ATTENDUE :**
-```+
 touch: /test: Read-only file system touch: /test: Read-only file system
-```+
  
 ---- ----
Ligne 2487: Ligne 2487:
  
 Installation : Installation :
-```+
 docker volume create portainer_data docker volume create portainer_data
 docker run -d   -p 9443:9443   --name portainer   --restart=always   -v /var/run/docker.sock:/var/run/docker.sock   -v portainer_data:/data   portainer/portainer-ce docker run -d   -p 9443:9443   --name portainer   --restart=always   -v /var/run/docker.sock:/var/run/docker.sock   -v portainer_data:/data   portainer/portainer-ce
-```+
  
 Accès : Accès :
-```+
 https://localhost:9443 https://localhost:9443
-```+
  
 ---- ----
Ligne 2508: Ligne 2508:
  
 Compose complet : Compose complet :
-```+
 version: "3.9" version: "3.9"
 services: services:
Ligne 2523: Ligne 2523:
   npm-data:   npm-data:
   npm-letsencrypt:   npm-letsencrypt:
-```+
  
 ---- ----
Ligne 2537: Ligne 2537:
  
 Exemple service avec labels : Exemple service avec labels :
-```+
 services: services:
   api:   api:
Ligne 2544: Ligne 2544:
       - "traefik.enable=true"       - "traefik.enable=true"
       - "traefik.http.routers.api.rule=Host(`api.example.com`)"       - "traefik.http.routers.api.rule=Host(`api.example.com`)"
-```+
  
 ---- ----
Ligne 2550: Ligne 2550:
 ===== 9.4 Watchtower — Mise à jour automatique des conteneurs ===== ===== 9.4 Watchtower — Mise à jour automatique des conteneurs =====
  
-```+
 docker run -d   --name watchtower   -v /var/run/docker.sock:/var/run/docker.sock   containrrr/watchtower docker run -d   --name watchtower   -v /var/run/docker.sock:/var/run/docker.sock   containrrr/watchtower
-```+
  
 Fonctions : Fonctions :
Ligne 2563: Ligne 2563:
 ===== 9.5 Netshoot — Le couteau suisse du diagnostic réseau ===== ===== 9.5 Netshoot — Le couteau suisse du diagnostic réseau =====
  
-```+
 docker run --rm -it nicolaka/netshoot docker run --rm -it nicolaka/netshoot
-```+
  
 Inclut : Inclut :
Ligne 2577: Ligne 2577:
  
 Ex : résolution DNS interne → Ex : résolution DNS interne →
-```+
 dig web dig web
-```+
  
 ---- ----
Ligne 2585: Ligne 2585:
 ===== 9.6 cAdvisor — Monitoring CPU / RAM / I/O ===== ===== 9.6 cAdvisor — Monitoring CPU / RAM / I/O =====
  
-```+
 docker run -d   -p 8080:8080   --name cadvisor   --volume=/:/rootfs:ro   --volume=/var/run:/var/run:ro   --volume=/sys:/sys:ro   --volume=/var/lib/docker/:/var/lib/docker:ro   gcr.io/cadvisor/cadvisor docker run -d   -p 8080:8080   --name cadvisor   --volume=/:/rootfs:ro   --volume=/var/run:/var/run:ro   --volume=/sys:/sys:ro   --volume=/var/lib/docker/:/var/lib/docker:ro   gcr.io/cadvisor/cadvisor
-```+
  
 Interface : Interface :
-```+
 http://localhost:8080 http://localhost:8080
-```+
  
 ---- ----
Ligne 2608: Ligne 2608:
 ===== 9.8 Dive — Analyse de la taille d’image ===== ===== 9.8 Dive — Analyse de la taille d’image =====
  
-```+
 docker run --rm -it wagoodman/dive:latest <image> docker run --rm -it wagoodman/dive:latest <image>
-```+
  
 Dive analyse : Dive analyse :
Ligne 2623: Ligne 2623:
  
 Installation : Installation :
-```+
 curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
-```+
  
 Interface : Interface :
-```+
 lazydocker lazydocker
-```+
  
 Fonctions : Fonctions :
Ligne 2643: Ligne 2643:
 ===== 9.10 Buildx — Build avancé multi-architecture ===== ===== 9.10 Buildx — Build avancé multi-architecture =====
  
-```+
 docker buildx create --use docker buildx create --use
 docker buildx build --platform linux/arm64,linux/amd64 -t image:latest . docker buildx build --platform linux/arm64,linux/amd64 -t image:latest .
-```+
  
 Pratique pour : Pratique pour :
Ligne 2657: Ligne 2657:
 ===== 9.11 Stern — Logs multi-conteneurs ===== ===== 9.11 Stern — Logs multi-conteneurs =====
  
-```+
 stern "api-*" stern "api-*"
-```+
  
 Similaire à : Similaire à :
-```+
 docker compose logs -f docker compose logs -f
-```+
 Mais avec filtrage avancé. Mais avec filtrage avancé.
  
Ligne 2674: Ligne 2674:
  
 Commandes : Commandes :
-```+
 docker volume create portainer_data docker volume create portainer_data
 docker run -d -p 9443:9443 --name portainer   -v /var/run/docker.sock:/var/run/docker.sock   -v portainer_data:/data   portainer/portainer-ce docker run -d -p 9443:9443 --name portainer   -v /var/run/docker.sock:/var/run/docker.sock   -v portainer_data:/data   portainer/portainer-ce
-```+
  
 **RÉPONSE :**   **RÉPONSE :**  
Ligne 2687: Ligne 2687:
  
 Commandes : Commandes :
-```+
 docker run -d --name web nginx docker run -d --name web nginx
 docker run -d --name api --network bridge alpine sleep 9999 docker run -d --name api --network bridge alpine sleep 9999
 docker exec -it api apk add bind-tools docker exec -it api apk add bind-tools
 docker exec -it api dig web docker exec -it api dig web
-```+
  
 **RÉSULTAT ATTENDU :**   **RÉSULTAT ATTENDU :**  
Ligne 2702: Ligne 2702:
  
 Commande : Commande :
-```+
 docker run --rm -it wagoodman/dive:latest nginx docker run --rm -it wagoodman/dive:latest nginx
-```+
  
 **RÉSULTAT ATTENDU :** **RÉSULTAT ATTENDU :**
Ligne 2716: Ligne 2716:
  
 Commande : Commande :
-```+
 docker run -d --name watchtower   -v /var/run/docker.sock:/var/run/docker.sock   containrrr/watchtower --interval 30 docker run -d --name watchtower   -v /var/run/docker.sock:/var/run/docker.sock   containrrr/watchtower --interval 30
-```+
  
 **RÉPONSE ATTENDUE :** **RÉPONSE ATTENDUE :**
Ligne 2788: Ligne 2788:
  
 Bonne pratique : Bonne pratique :
-```+
 FROM node:20-alpine FROM node:20-alpine
 RUN adduser -D appuser RUN adduser -D appuser
 USER appuser USER appuser
-```+
  
 ---- ----
Ligne 2799: Ligne 2799:
  
 ==== Limiter CPU ==== ==== Limiter CPU ====
-```+
 docker run --cpus="1.0" myapp docker run --cpus="1.0" myapp
-```+
  
 ==== Limiter RAM ==== ==== Limiter RAM ====
-```+
 docker run --memory="512m" myapp docker run --memory="512m" myapp
-```+
  
 ==== Limiter PIDs ==== ==== Limiter PIDs ====
-```+
 docker run --pids-limit=100 myapp docker run --pids-limit=100 myapp
-```+
  
 ==== Système de fichier read-only ==== ==== Système de fichier read-only ====
-```+
 docker run --read-only myapp docker run --read-only myapp
-```+
  
 ---- ----
Ligne 2831: Ligne 2831:
  
 Logging driver : Logging driver :
-```+
 docker run --log-driver json-file myapp docker run --log-driver json-file myapp
-```+
  
 ---- ----
Ligne 2846: Ligne 2846:
  
 Exemple cAdvisor : Exemple cAdvisor :
-```+
 docker run -d -p 8080:8080 gcr.io/cadvisor/cadvisor docker run -d -p 8080:8080 gcr.io/cadvisor/cadvisor
-```+
  
 ---- ----
Ligne 2861: Ligne 2861:
  
 Exemple labels : Exemple labels :
-```+
 labels: labels:
   - "traefik.enable=true"   - "traefik.enable=true"
   - "traefik.http.routers.web.rule=Host(`site.com`)"   - "traefik.http.routers.web.rule=Host(`site.com`)"
   - "traefik.http.routers.web.tls.certresolver=myresolver"   - "traefik.http.routers.web.tls.certresolver=myresolver"
-```+
  
 ---- ----
Ligne 2892: Ligne 2892:
  
 Backup modèle : Backup modèle :
-```+
 docker run --rm -v data:/source   -v /backup:/backup alpine   tar czvf /backup/data.tar.gz /source docker run --rm -v data:/source   -v /backup:/backup alpine   tar czvf /backup/data.tar.gz /source
-```+
  
 ---- ----
Ligne 2901: Ligne 2901:
  
 Pipeline GitHub Actions : Pipeline GitHub Actions :
-```+
 name: Deploy name: Deploy
 on: push on: push
Ligne 2912: Ligne 2912:
       - run: docker login -u $USER -p $PASS       - run: docker login -u $USER -p $PASS
       - run: docker push myapp       - run: docker push myapp
-```+
  
 Pipeline complet : Pipeline complet :
Ligne 2925: Ligne 2925:
 ===== 10.10 Docker Swarm — haute disponibilité simple ===== ===== 10.10 Docker Swarm — haute disponibilité simple =====
  
-```+
 docker swarm init docker swarm init
 docker service create --replicas 3 nginx docker service create --replicas 3 nginx
-```+
  
 Fonctions : Fonctions :
Ligne 2965: Ligne 2965:
  
 Exemple : Exemple :
-```+
 docker run --security-opt no-new-privileges   --cap-drop=ALL myapp docker run --security-opt no-new-privileges   --cap-drop=ALL myapp
-```+
  
 ---- ----
Ligne 2979: Ligne 2979:
  
 Exemple Compose : Exemple Compose :
-```+
 networks: networks:
   public:   public:
Ligne 2992: Ligne 2992:
     networks:     networks:
       - internal       - internal
-```+
  
 ---- ----
Ligne 3000: Ligne 3000:
 ==== EXERCICE 1 : Limiter un conteneur ==== ==== EXERCICE 1 : Limiter un conteneur ====
 Commande : Commande :
-```+
 docker run --cpus="0.5" --memory="256m" nginx docker run --cpus="0.5" --memory="256m" nginx
-```+
 **RÉPONSE :** **RÉPONSE :**
 Le conteneur ne peut utiliser que : Le conteneur ne peut utiliser que :
Ligne 3011: Ligne 3011:
  
 ==== EXERCICE 2 : Scanner une image ==== ==== EXERCICE 2 : Scanner une image ====
-```+
 docker scan nginx docker scan nginx
-```+
 **RÉPONSE :** **RÉPONSE :**
 La liste des CVE s’affiche → corrigées avant mise en prod. La liste des CVE s’affiche → corrigées avant mise en prod.
Ligne 3020: Ligne 3020:
  
 ==== EXERCICE 3 : Tester read-only ==== ==== EXERCICE 3 : Tester read-only ====
-```+
 docker run --read-only -it alpine touch /test docker run --read-only -it alpine touch /test
-```+
 **RÉSULTAT ATTENDU :** **RÉSULTAT ATTENDU :**
-```+
 touch: /test: Read-only file system touch: /test: Read-only file system
-```+
  
 ---- ----
informatique/docker.txt · Dernière modification : de john

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki