🐳 Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Date de publication

31 août 2025

Docker est une plateforme permettant d’exĂ©cuter des applications dans des conteneurs isolĂ©s. Cette fiche contient des commandes pour travailler avec les images, les conteneurs, les rĂ©seaux, les volumes, ainsi que Docker Compose et Swarm.

📩 Commandes de base

Commande

Exemple

Description

docker La commande principale de l’interface CLI Docker, utilisĂ©e pour exĂ©cuter des sous-commandes et gĂ©rer les conteneurs, images, rĂ©seaux et volumes
docker version Afficher la version Docker installĂ©e (client et serveur). Utile pour vĂ©rifier l’installation
docker version --format '{{.Client.APIVersion}}'

Afficher uniquement la version de l’API client Docker

docker version --format '{{.Server.Version}}'

Afficher uniquement la version du serveur (Engine) Docker

docker version --format '{{json .}}'

Afficher les informations complĂštes de version en JSON

docker system info Afficher les informations générales du systÚme Docker : nombre de conteneurs, images, ressources
docker info

Afficher les données Docker : versions, réseaux, nombre de conteneurs et images

docker info --format '{{json .}}'

Afficher les infos en JSON — utile pour l’automatisation

docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM'

Afficher le nombre de CPU et la mémoire totale

docker info --format '{{.Driver}}'

Afficher le pilote de stockage utilisé par Docker

docker image pull TĂ©lĂ©charger une image depuis Docker Hub ou un autre registre. Les conteneurs ne peuvent pas s’exĂ©cuter sans image
docker pull ubuntu

Télécharger la derniÚre image Ubuntu disponible

docker pull nginx:alpine

TĂ©lĂ©charger l’image Nginx lĂ©gĂšre basĂ©e sur Alpine Linux

docker pull redis:7

TĂ©lĂ©charger l’image Redis version 7

docker container run CrĂ©er et exĂ©cuter un nouveau conteneur Ă  partir d’une image
docker run -it ubuntu bash

Exécuter Ubuntu avec un terminal Bash interactif

docker run -d nginx

Exécuter Nginx en mode détaché (arriÚre-plan)

docker run -p 8080:80 nginx

ExĂ©cuter Nginx et lier le port 80 du conteneur au port 8080 de l’hĂŽte

docker container ls Lister les conteneurs en cours d’exĂ©cution
docker ps

Afficher uniquement les conteneurs actifs

docker ps -a

Afficher tous les conteneurs, y compris arrĂȘtĂ©s

docker ps --format '{{.Names}}'

Afficher uniquement les noms des conteneurs

docker container start DĂ©marrer un ou plusieurs conteneurs arrĂȘtĂ©s
docker start container_name

Démarrer un conteneur par nom

docker start $(docker ps -aq)

Démarrer tous les conteneurs

docker start -ai container_name

Démarrer un conteneur et attacher un terminal interactif

docker container stop ArrĂȘter un conteneur en cours d’exĂ©cution
docker stop container_name

ArrĂȘter un conteneur par nom

docker stop $(docker ps -q)

ArrĂȘter tous les conteneurs en cours

docker stop -t 5 container_name

ArrĂȘter un conteneur en lui donnant 5 secondes pour terminer ses processus

docker container restart Redémarrer un conteneur
docker restart container_name

Redémarrer un conteneur spécifique

docker restart $(docker ps -q)

Redémarrer tous les conteneurs en cours

docker restart -t 10 container_name

Redémarrer un conteneur avec un délai de 10 secondes

docker container rm Supprimer un conteneur
docker rm container_name

Supprimer un conteneur arrĂȘtĂ© spĂ©cifique

docker rm $(docker ps -aq)

Supprimer tous les conteneurs arrĂȘtĂ©s

docker rm -f container_name

Forcer la suppression d’un conteneur en cours

docker image ls Lister les images téléchargées
docker images

Afficher toutes les images de l’hîte

docker images -a

Afficher toutes les images, y compris les couches intermédiaires

docker images --format '{{.Repository}}:{{.Tag}}'

Afficher uniquement les noms et tags des images

docker image rm Supprimer une ou plusieurs images du stockage local
docker rmi test1:latest

Supprimer l’image avec le tag latest du dĂ©pĂŽt test1

docker rmi 1a2b3c4d5e6f

Supprimer une image par son ID

docker rmi $(docker images -q)

Supprimer toutes les images (à utiliser avec précaution !)

🔁 Gestion des conteneurs

Commande

Exemple

Description

docker container exec ExĂ©cuter une commande Ă  l’intĂ©rieur d’un conteneur en cours
docker exec -it container bash

Lancer un shell Bash interactif dans le conteneur nommé container

docker exec container ls /app

Exécuter la commande ls dans le répertoire /app du conteneur

docker exec -d container touch /tmp/testfile

Exécuter une commande dans le conteneur en mode détaché (sans attendre)

docker container logs Afficher les journaux d’un conteneur
docker logs container

Afficher tous les journaux du conteneur container

docker logs -f container

Suivre les journaux du conteneur en temps réel

docker logs --tail 50 container

Afficher les 50 derniĂšres lignes de journaux

docker inspect Récupérer les informations détaillées en JSON sur un conteneur ou une image
docker inspect container

Afficher les détails du conteneur container

docker inspect --format '{{.NetworkSettings.IPAddress}}' container

Afficher l’adresse IP du conteneur

docker container stats Afficher les statistiques d’utilisation des ressources en temps rĂ©el
docker stats

Afficher CPU, mémoire, réseau et disque pour tous les conteneurs

docker stats container_name

Afficher les stats pour un conteneur spécifique

docker stats --no-stream

Afficher un instantané unique des stats puis quitter

docker container rename Renommer un conteneur
docker rename old_name new_name

Renommer un conteneur de old_name Ă  new_name

docker container cp Copier des fichiers entre un conteneur et l’hîte
docker cp container:/src/file.txt ./file.txt

Copier un fichier d’un conteneur vers le rĂ©pertoire courant de l’hĂŽte

docker cp ./config.yaml container:/app/config.yaml

Copier un fichier de l’hîte vers le conteneur

docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

Streamer un fichier journal depuis un conteneur et filtrer les lignes “ERROR” sans l’enregistrer

docker container top Afficher les processus en cours dans un conteneur
docker top container

Afficher les processus du conteneur nommé container

docker container pause Mettre en pause tous les processus d’un conteneur
docker pause container

Mettre en pause le conteneur container

docker container unpause Reprendre un conteneur mis en pause
docker unpause container

Reprendre le conteneur container

docker container update Mettre Ă  jour les paramĂštres d’un conteneur sans le redĂ©marrer
docker update --memory 500m container

Limiter l’utilisation mĂ©moire d’un conteneur Ă  500 Mo

đŸ§± Images et Dockerfile

Commande

Exemple

Description

docker buildx build Construire une image Docker à partir d’un Dockerfile
docker build -t my_image .

Construire une image taguée my_image depuis le répertoire courant

docker build -t my_image:1.0 .

Construire une image avec le tag 1.0

docker build --no-cache -t my_image .

Construire une image sans utiliser le cache pour une build propre

docker container commit CrĂ©er une image Ă  partir de l’état actuel d’un conteneur
docker commit container my_img:v1

CrĂ©er l’image my_img taguĂ©e v1 depuis le conteneur container

docker commit -m "Added config" container my_img:v2

Créer une image avec un message de commit

docker commit -a "John Doe" container my_img:latest

CrĂ©er une image en spĂ©cifiant l’auteur

docker image tag Ajouter ou modifier un tag d’image
docker tag my_image myrepo/my_image:latest

Ajouter un tag pour pousser vers le registre myrepo

docker tag my_image:1.0 my_image:stable

Créer un tag stable pour une image taguée 1.0

docker tag my_image my_image:backup

Ajouter un tag backup Ă  une image locale

docker image push Pousser une image vers Docker Hub ou un autre registre
docker push myrepo/my_image:latest

Pousser l’image taguĂ©e latest vers le dĂ©pĂŽt myrepo

docker push myrepo/my_image:1.0

Pousser l’image taguĂ©e 1.0

docker push myrepo/my_image

Pousser une image avec le tag par défaut latest

docker login S’authentifier auprùs de Docker Hub ou d’un autre registre
docker login

Saisir le nom d’utilisateur et mot de passe pour Docker Hub

docker login myregistry.local:5000

Se connecter à un registre privé

docker login -u username -p password

Connexion avec nom d’utilisateur et mot de passe (non recommandĂ©)

docker logout Se dĂ©connecter de Docker Hub ou d’un autre registre
docker logout

Déconnexion de Docker Hub

docker logout myregistry.local:5000

DĂ©connexion d’un registre privĂ©

HEALTHCHECK Instruction Dockerfile pour vĂ©rifier automatiquement l’état d’un conteneur
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1

Ajouter un healthcheck pour vérifier la disponibilité du service toutes les 30 secondes

docker inspect --format='{{json .State.Health}}' container_name

VĂ©rifier l’état de healthcheck d’un conteneur en cours

🔌 RĂ©seaux et volumes

Commande

Exemple

Description

docker network ls Lister tous les réseaux Docker
docker network ls

Afficher tous les réseaux créés

docker network ls --filter driver=bridge

Afficher uniquement les réseaux avec le pilote bridge

docker network ls --format '{{.Name}}'

Afficher uniquement les noms de réseaux

docker network create Créer un nouveau réseau Docker
docker network create my_net

Créer un réseau nommé my_net avec paramÚtres par défaut

docker network create --driver bridge my_bridge_net

Créer un réseau avec le pilote bridge

docker network create --subnet=192.168.10.0/24 my_custom_net

Créer un réseau avec un sous-réseau spécifié

docker network connect Connecter un conteneur à un réseau
docker network connect my_net container

Connecter le conteneur container au réseau my_net

docker network connect --alias db_net my_net container

Connecter avec l’alias db_net

docker network disconnect DĂ©connecter un conteneur d’un rĂ©seau
docker network disconnect my_net container

Déconnecter le conteneur container du réseau my_net

docker volume ls Lister tous les volumes Docker
docker volume ls

Afficher tous les volumes Docker

docker volume ls --filter dangling=true

Afficher les volumes non utilisés

docker volume create Créer un nouveau volume Docker
docker volume create my_vol

Créer un volume nommé my_vol

docker volume create --driver local --opt type=tmpfs my_tmp_vol

Créer un volume temporaire avec tmpfs

docker volume inspect Afficher les informations dĂ©taillĂ©es d’un volume
docker volume inspect my_vol

Afficher les détails du volume my_vol en JSON

docker volume rm Supprimer un ou plusieurs volumes
docker volume rm my_vol

Supprimer le volume my_vol

docker volume rm $(docker volume ls -qf dangling=true)

Supprimer tous les volumes inutilisés

đŸ§© Plugins Docker

Commande

Exemple

Description

docker plugin ls Lister les plugins Docker installés
docker plugin ls

Afficher tous les plugins et leur statut

docker plugin install Installer un plugin Docker depuis un registre
docker plugin install vieux/sshfs

Installer le plugin de volume SSHFS

docker plugin install store/weaveworks/net-plugin:latest_release

Installer le plugin réseau Weave

docker plugin disable Désactiver un plugin installé
docker plugin disable vieux/sshfs

Désactiver le plugin SSHFS

docker plugin enable Activer un plugin précédemment désactivé
docker plugin enable vieux/sshfs

Activer le plugin SSHFS

docker plugin rm Supprimer un plugin Docker
docker plugin rm vieux/sshfs

Supprimer le plugin SSHFS

📋 Docker Compose

Commande

Exemple

Description

docker compose up Démarrer les conteneurs définis dans docker-compose.yml
docker compose up

Démarrer tous les services du répertoire courant en mode interactif

docker compose up -d

Démarrer les services en mode détaché (arriÚre-plan)

docker compose up --build

Construire les images avant de démarrer les services

docker compose down ArrĂȘter et supprimer les conteneurs, rĂ©seaux et volumes créés par up
docker compose down

ArrĂȘter tous les services actifs et supprimer les ressources associĂ©es

docker compose down --volumes

Supprimer également les volumes créés par Compose

docker compose down --rmi all

Supprimer également les images créées par Compose

docker compose logs Afficher les journaux de tous les services ou d’un service spĂ©cifique
docker compose logs

Afficher les journaux de tous les services

docker compose logs -f

Suivre les journaux en temps réel

docker compose logs web

Afficher uniquement les journaux du service web

docker compose exec Exécuter une commande dans un conteneur de service en cours
docker compose exec web bash

Entrer dans un shell Bash interactif dans le conteneur du service web

docker compose exec db ls /var/lib/postgresql

Exécuter la commande ls dans le conteneur de base de données

docker compose exec -d worker touch /tmp/done

Exécuter une commande dans le conteneur worker en mode détaché

docker compose build Construire ou reconstruire les images des services
docker compose build

Construire toutes les images définies dans docker-compose.yml

docker compose build web

Construire uniquement l’image du service web

docker compose build --no-cache

Construire les images sans utiliser le cache

docker compose ps Afficher l’état de tous les services et conteneurs
docker compose ps -a

Afficher tous les conteneurs, y compris arrĂȘtĂ©s

docker compose ps --services

Afficher uniquement les noms des services

docker compose pull Télécharger/mettre à jour les images des services depuis le registre
docker compose pull web

TĂ©lĂ©charger uniquement l’image du service web

docker compose pull --ignore-pull-failures

Continuer le tĂ©lĂ©chargement mĂȘme si certaines images Ă©chouent

docker compose restart Redémarrer tous les services ou certains services
docker compose restart db

Redémarrer uniquement le service db

docker compose restart -t 10

Redémarrer les services avec un délai de 10 secondes

docker compose config Afficher la configuration finale de Compose en YAML
docker compose config --services

Lister tous les services de la configuration

docker compose config --volumes

Lister tous les volumes définis dans la configuration

docker compose start DĂ©marrer les services arrĂȘtĂ©s sans recrĂ©er les conteneurs
docker compose start web

Démarrer le service web

docker compose start db api

Démarrer plusieurs services à la fois

docker compose stop ArrĂȘter les services sans supprimer les conteneurs
docker compose stop web

ArrĂȘter le service web

docker compose stop -t 5

ArrĂȘter les services avec un dĂ©lai de 5 secondes

đŸ“€ Exportation et importation

Commande

Exemple

Description

docker image save Sauvegarder une ou plusieurs images Docker dans une archive tar pour importation ou transfert ultérieur
docker save -o image.tar my_img:tag

Sauvegarder une image Docker dans un fichier tar

docker save my_image > my_image.tar

Autre méthode pour sauvegarder une image dans un fichier

docker save -o redis_latest.tar redis:latest

Sauvegarder une image Redis spécifique dans un fichier

docker image load Charger des images Docker depuis une archive tar sauvegardée
docker load < image.tar

Charger une image Docker depuis un fichier tar

docker load --input redis_latest.tar

Charger une image en spécifiant le fichier par paramÚtre

docker load --quiet < my_image.tar

Charger une image sans afficher la progression

docker container export Exporter le systĂšme de fichiers d’un conteneur en archive tar sans historique ni mĂ©tadonnĂ©es
docker export container > file.tar

Exporter le systĂšme de fichiers du conteneur dans une archive

docker export my_container > my_container_fs.tar

Exporter un conteneur par nom

docker export -o container_fs.tar container_id

Exporter par ID de conteneur avec l’option -o

docker image import CrĂ©er une nouvelle image Ă  partir d’une archive tar d’un systĂšme de fichiers
docker import file.tar new_img

Importer un fichier archive comme nouvelle image Docker

docker import https://example.com/image.tar my_new_image

Importer une image directement depuis une URL

docker import - my_image < file.tar

Importer depuis l’entrĂ©e standard

đŸ§č Nettoyage et diagnostics

Commande

Exemple

Description

docker system df Afficher l’utilisation disque de Docker : volumes, images, conteneurs et cache de build
docker system df -v

Affichage détaillé avec infos sur chaque image, conteneur et volume

docker system df --format '{{json .}}'

Afficher les infos en format JSON

docker system prune Supprimer toutes les donnĂ©es Docker inutilisĂ©es : conteneurs arrĂȘtĂ©s, rĂ©seaux inutilisĂ©s, images orphelines et cache de build
docker system prune -a

Supprimer les images inutilisées, y compris intermédiaires

docker system prune --volumes

Supprimer aussi les volumes inutilisés avec les autres ressources

docker image prune Supprimer les images Docker inutilisées, y compris les couches orphelines
docker image prune -a

Supprimer toutes les images inutilisées, y compris orphelines

docker image prune --filter "until=24h"

Supprimer les images de plus de 24 heures

docker container prune Supprimer les conteneurs arrĂȘtĂ©s correspondant aux filtres ou tous si aucun n’est spĂ©cifiĂ©
docker container prune --filter "until=24h"

Supprimer les conteneurs arrĂȘtĂ©s depuis plus de 24 heures

docker container prune --force

Supprimer sans demande de confirmation

🐝 Docker Swarm

Commande

Exemple

Description

docker swarm init Initialiser un nouveau cluster Docker Swarm sur le nƓud actuel
docker swarm init --advertise-addr 192.168.1.100

Initialiser le cluster en spĂ©cifiant l’adresse IP

docker swarm init --listen-addr 0.0.0.0:2377

Initialiser avec un port d’écoute spĂ©cifiĂ©

docker service create Créer un nouveau service dans le cluster Swarm
docker service create --name nginx nginx

Créer un service Nginx dans Swarm

docker service create --replicas 3 --name web webserver

Créer un service avec 3 réplicas

docker service create --name redis --publish 6379:6379 redis

Créer un service avec mappage de port

docker stack deploy Déployer une pile de services dans le cluster Swarm basée sur un fichier Compose
docker stack deploy -c docker-compose.yml mystack

Déployer une pile depuis un fichier compose

docker stack deploy --with-registry-auth -c compose.yml mystack

DĂ©ployer avec transfert d’authentification du registre

docker stack deploy -c swarm-compose.yml mystack

Utiliser un fichier compose alternatif pour la pile

docker stack rm Supprimer une ou plusieurs piles du cluster Swarm
docker stack rm mystack

Supprimer la pile mystack

docker stack rm

Supprimer toutes les piles (non recommandé)

docker stack rm mystack && docker swarm leave --force

Supprimer la pile et quitter Swarm

đŸ’Œ Utilisation avancĂ©e de Docker

🚀 Commandes Docker professionnelles

Commande

Exemple

Description

docker buildx Outil de build avancé remplaçant docker build. Supporte multi-plateformes, cache, builds parallÚles et exportation vers différents formats. Utile pour CI/CD et développement multi-plateformes
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi .

Construire une image multi-plateforme (ARM et x86 simultanément)

docker buildx build --load -t localimg .

Construire une image et la charger dans le cache local de Docker Engine

docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest .

Construire et pousser une image multi-plateforme vers un registre

docker context Gérer les contextes Docker pour travailler avec des environnements multiples ou distants. Permet de basculer rapidement entre Engines locaux et distants
docker context create myremote --docker "host=ssh://user@host"

Créer un contexte pour se connecter à un hÎte Docker distant

docker context use myremote

Basculer vers le contexte distant

docker context ls

Lister les contextes disponibles et celui actif

docker system events Écouter les Ă©vĂ©nements Docker en temps rĂ©el, avec filtrage par type (ex. dĂ©marrage de conteneur). Utile pour la surveillance et l’automatisation
docker events --filter 'event=start'

Afficher uniquement les événements de démarrage de conteneur

docker events --since 1h --until 10m

Afficher les Ă©vĂ©nements de la derniĂšre heure jusqu’à il y a 10 minutes

docker events --filter 'type=network'

Afficher uniquement les événements liés au réseau

docker events --filter 'image=nginx'

Afficher les Ă©vĂ©nements liĂ©s Ă  l’image nginx

docker container update Changer les limites de ressources et paramĂštres d’un conteneur actif sans le redĂ©marrer
docker update --cpus 2 --memory 1g my_container

Limiter Ă  2 CPU et 1 Go de RAM

docker update --restart unless-stopped my_container

Définir la politique de redémarrage sur unless-stopped

docker update --pids-limit 200 my_container

Limiter le nombre de processus Ă  200

docker container diff Afficher les modifications du systĂšme de fichiers d’un conteneur par rapport Ă  son image d’origine. Utile pour dĂ©bogage et audit
docker diff my_container

Afficher toutes les modifications du systĂšme de fichiers dans le conteneur

docker diff my_container | grep '^A'

Afficher uniquement les fichiers ajoutĂ©s (A — Added)

docker image history Afficher l’historique des couches d’une image : commandes de build, taille de chaque couche et date de crĂ©ation. Utile pour optimisation et audit
docker history my_image

Afficher l’historique des couches d’une image

docker history --no-trunc my_image

Afficher les commandes de build complĂštes sans troncature

docker history --format "{{.CreatedBy}}: {{.Size}}" my_image

Afficher uniquement les commandes de build et tailles des couches

🛠 Bonnes pratiques Docker et automatisation

  • Minimiser la taille des images
    Utiliser des images de base comme alpine ou scratch pour une taille minimale.
    Pour aplatir les couches, utiliser --squash lors de la build (fonctionnalité expérimentale requise).
    Supprimer aussi les fichiers temporaires et caches dans une seule couche :

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • RĂ©duire le nombre de couches
    Combiner les commandes dans un seul RUN pour rĂ©duire le nombre de couches et la taille finale de l’image :

    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
  • Optimiser la construction du Dockerfile
    Utiliser des builds multi-Ă©tapes pour ne garder que les fichiers nĂ©cessaires dans l’image finale.
    Copier et installer les dĂ©pendances d’abord, puis le code — cela amĂ©liore le cache des couches et accĂ©lĂšre les reconstructions.

  • SĂ©parer secrets et configurations
    Ne jamais stocker .env, clĂ©s API ou certificats privĂ©s dans l’image.
    Utiliser pour la configuration :

    • docker secret (dans Swarm)
    • variables d’environnement (-e VAR=valeur ou .env)
    • volumes externes pour les configs

  • Secrets de build (BuildKit)
    Pour transmettre des secrets de maniĂšre sĂ©curisĂ©e pendant la build, utiliser l’option --secret :

    docker buildx build --secret id=mysecret,src=./secret.txt .

    Dans le Dockerfile, le secret est disponible Ă  /run/secrets/mysecret :

    RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

    🛡 Cela empĂȘche les secrets d’ĂȘtre stockĂ©s dans les couches d’image.

  • Docker rootless
    ExĂ©cuter Docker sans droits root amĂ©liore la sĂ©curitĂ© et rĂ©duit les risques pour l’hĂŽte.
    Pour activer :

    dockerd-rootless-setuptool.sh install
    export PATH=/usr/bin:$PATH

    Vérifier :

    docker info | grep Rootless

    ⚠ Certaines fonctions (ex. redirection de ports <1024) ne seront pas disponibles.

  • Scanner les images pour vulnĂ©rabilitĂ©s
    Utiliser les outils intégrés :

    docker scan my_image

    Ou le nouveau CLI :

    docker scout cves my_image

    Cela permet de détecter les vulnérabilités dans les images de base et dépendances.

  • Limiter les ressources
    Limiter les conteneurs par mémoire, CPU et nombre de processus :

    docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage

    Cela empĂȘche une surconsommation de ressources.
    Vous pouvez aussi limiter les E/S :

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage

    Utile pour les conteneurs qui ne doivent pas surcharger le disque.

  • Nettoyage automatique
    Supprimer réguliÚrement les images, conteneurs, volumes et réseaux inutilisés :

    docker system prune -af --volumes

    ⚠ Attention : cette commande supprime toutes les ressources inutilisĂ©es.

    Pour un nettoyage sélectif utiliser :

    docker image prune --filter "until=24h"
  • IntĂ©gration CI/CD
    Intégrer build, test et déploiement dans GitHub Actions, GitLab CI, Jenkins pipelines.
    Exemple d’étape GitHub Actions :

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • Journalisation et surveillance
    Attacher des pilotes de logs (--log-driver) à des systÚmes centralisés : ELK, Loki, Splunk.
    Utiliser Prometheus + cAdvisor pour les métriques de conteneurs.

  • DĂ©ploiement en production
    Séparer les configs pour développement et production avec docker-compose.override.yml.
    Pour haute disponibilité et scalabilité utiliser :

    • Docker Swarm
    • Kubernetes

🐞 DĂ©bogage et profilage des conteneurs Docker

Commande

Exemple

Description

docker container exec ExĂ©cute une commande dans un conteneur en cours, offrant un accĂšs interactif ou la possibilitĂ© d’exĂ©cuter des processus dans l’environnement isolĂ© du conteneur
docker exec -it my_container bash

Démarrer un terminal interactif (bash) dans un conteneur en cours

docker exec -it my_container sh

DĂ©marrer un shell minimal dans le conteneur (si bash n’est pas disponible)

docker exec my_container ls /app

Exécuter une commande dans le conteneur sans mode interactif

docker container logs Affiche les journaux du conteneur spécifié, permettant de voir la sortie et les événements liés à son fonctionnement pour le diagnostic et la surveillance
docker logs -f --tail 100 my_container

Afficher les 100 derniÚres lignes de journaux en temps réel

docker logs my_container

Afficher tous les journaux disponibles du conteneur

docker logs --since 1h my_container

Afficher les journaux de la derniĂšre heure

docker inspect Affiche des informations détaillées sur un objet Docker (conteneur, image, réseau, etc.) au format JSON, y compris configuration et état
docker inspect my_container

Obtenir les infos JSON complĂštes du conteneur

docker inspect --format '{{.State.Pid}}' my_container

Obtenir le PID du processus principal du conteneur sur l’hîte

docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container

Afficher l’adresse IP du conteneur

nsenter (with strace) Utilitaire Linux permettant d’entrer dans les espaces de noms d’un autre processus (ici, le conteneur). UtilisĂ© avec strace pour tracer les appels systĂšme Ă  l’intĂ©rieur du conteneur pour le dĂ©bogage
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

Entrer dans les espaces de noms du conteneur et tracer les appels systĂšme du processus 1

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash

Ouvrir un shell bash Ă  l’intĂ©rieur des espaces de noms du conteneur

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp

Voir les ports ouverts dans le conteneur

tcpdump (inside container) Outil en console pour capturer et analyser le trafic réseau. Utilisé dans un conteneur pour diagnostiquer les problÚmes réseau, analyser les paquets et surveiller les connexions
docker exec -it my_container tcpdump -i any

Capturer et analyser le trafic rĂ©seau Ă  l’intĂ©rieur du conteneur

docker exec -it my_container tcpdump -nn port 80

Capturer uniquement le trafic sur le port 80

docker exec -it my_container tcpdump -w /tmp/dump.pcap

Sauvegarder le trafic dans un fichier pour analyse ultérieure

docker container stats Affiche les mĂ©triques d’utilisation actuelles (CPU, mĂ©moire, rĂ©seau, disque) pour un ou plusieurs conteneurs en temps rĂ©el
docker stats my_container

Afficher en temps rĂ©el l’utilisation CPU, mĂ©moire, rĂ©seau et disque du conteneur

docker stats

Afficher les statistiques pour tous les conteneurs

docker stats --no-stream

Afficher une seule fois les statistiques et quitter

docker container top Affiche la liste des processus en cours dans le conteneur, similaire Ă  ps sous Linux, pour analyser l’activitĂ© du conteneur
docker top my_container

Afficher les processus en cours dans le conteneur

docker top my_container aux

Utiliser un format de sortie alternatif comme ps aux

docker top my_container -eo pid,cmd

Afficher uniquement PID et commande des processus

docker diff Affiche les changements du systÚme de fichiers du conteneur par rapport à son image de base, indiquant les fichiers ajoutés, modifiés ou supprimés
docker diff my_container

Afficher les changements du systùme de fichiers du conteneur par rapport à l’image de base

docker diff my_container | grep '^A'

Afficher uniquement les fichiers ajoutĂ©s (A — Added)

docker diff my_container | grep '^C'

Afficher uniquement les fichiers modifiĂ©s (C — Changed)

docker cp Copie des fichiers et rĂ©pertoires entre un conteneur et la machine hĂŽte, permettant l’échange de donnĂ©es et la sauvegarde
— — —
docker cp my_container:/path/to/file ./file

Copier un fichier du conteneur vers l’hîte

docker cp ./config.yaml my_container:/app/config.yaml

Copier un fichier de l’hîte vers le conteneur

docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR"

Copier un fichier journal et filtrer les lignes d’erreur sans l’enregistrer

💡 Pour un dĂ©bogage avancĂ©, vous pouvez utiliser nsenter, strace, tcpdump, gdb et d’autres outils bas-niveau.

đŸ’Œ Utilisation avancĂ©e de Docker Compose

🚀 Commandes professionnelles Docker Compose

Commande

Exemple

Description

docker compose up DĂ©marrer et gĂ©rer le cycle de vie des services spĂ©cifiĂ©s dans le fichier docker-compose.yml avec possibilitĂ© d’exĂ©cution en arriĂšre-plan
docker compose up -d web db

Exécuter uniquement les services web et db en mode détaché

docker compose up --build

Reconstruire les images avant de démarrer les services

docker compose up --remove-orphans

Supprimer les conteneurs non définis dans le fichier compose actuel

docker compose build Construire les images des services décrits dans le fichier compose avec contrÎle du cache et parallélisme
docker compose build --no-cache

Reconstruire totalement les images sans utiliser le cache

docker compose build --parallel

Construire tous les services en parallÚle pour accélérer le processus

docker compose build web

Construire uniquement l’image du service web

docker compose pull Télécharger les derniÚres versions des images depuis le registre pour tous les services ou ceux spécifiés
docker compose pull

Télécharger les images pour tous les services

docker compose pull db

TĂ©lĂ©charger uniquement l’image du service db

docker compose pull --ignore-pull-failures

Continuer l’exĂ©cution en ignorant les erreurs de tĂ©lĂ©chargement d’image

docker compose restart Redémarrer tous les services ou certains services sans recréer les conteneurs
docker compose restart

Redémarrer tous les services du projet en cours

docker compose restart worker

Redémarrer uniquement le service worker

docker compose restart web db

Redémarrer plusieurs services à la fois

docker compose exec Exécuter une commande dans un conteneur de service en cours avec option de mode interactif
docker compose exec db psql -U user -d database

Exécuter psql dans le conteneur du service db

docker compose exec web sh

Ouvrir un shell dans le conteneur web

docker compose exec api curl http://localhost:8080

ExĂ©cuter une requĂȘte curl depuis le conteneur du service api

docker compose config Afficher la configuration finale de Compose en tenant compte de tous les fichiers et variables d’environnement
docker compose config

Afficher la configuration fusionnée en YAML

docker compose config --services

Lister tous les services

docker compose config --environment

Afficher toutes les variables d’environnement utilisĂ©es par les services

docker compose watch Redémarrer automatiquement les services lors de modifications de fichiers sources, utile pour le développement
docker compose watch

Commencer à surveiller les fichiers et redémarrer les services lors de changements

docker compose events Diffuser les Ă©vĂ©nements Compose : dĂ©marrage, arrĂȘt, mise Ă  jour des services
docker compose events --json

Recevoir les événements au format JSON

docker compose rm Supprimer les conteneurs de services arrĂȘtĂ©s
docker compose rm web db

Supprimer les conteneurs des services web et db

docker compose pause Mettre en pause le fonctionnement des services
docker compose pause api

Mettre en pause le service api

docker compose unpause Reprendre les services en pause
docker compose unpause api

Reprendre le service api

docker compose create Créer les conteneurs sans les démarrer
docker compose create web db

Créer les conteneurs pour web et db sans les démarrer

docker compose images Afficher la liste des images utilisées par les services
docker compose images

Afficher les images de tous les services

docker compose top Afficher les processus en cours dans les conteneurs de services
docker compose top web

Afficher les processus dans les conteneurs du service web

🛠 Bonnes pratiques et automatisation avec Docker Compose

  • SĂ©paration des environnements
    Utilisez des fichiers docker-compose.override.yml sĂ©parĂ©s pour diffĂ©rents environnements — development, staging, production. Cela permet d’isoler les configurations et d’éviter les conflits entre paramĂštres.
    Vous pouvez Ă©galement combiner plusieurs fichiers de configuration avec l’option -f :

    docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    Utilisez diffĂ©rents fichiers .env (.env.dev, .env.prod, etc.) pour gĂ©rer les variables d’environnement.

  • Stockage sĂ©curisĂ© des secrets
    N’incluez pas de donnĂ©es sensibles (mots de passe, tokens) directement dans les fichiers Compose. Utilisez plutĂŽt :

    • fichiers .env pour les variables d’environnement (⚠ les fichiers .env ne sont pas chiffrĂ©s et ne doivent pas ĂȘtre publiĂ©s dans des dĂ©pĂŽts publics)
    • docker secret et docker config pour une gestion sĂ©curisĂ©e des secrets et configurations dans Docker Swarm
    • volumes externes pour les fichiers de configuration contenant des secrets
    • systĂšmes externes de gestion de secrets (ex. HashiCorp Vault, AWS Secrets Manager)

  • Ordre de dĂ©marrage avec depends_on et healthcheck
    Pour que les services attendent que leurs dĂ©pendances soient prĂȘtes :

    services:
      db:
        image: postgres
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 10s
          retries: 5
      api:
        image: my_api
        depends_on:
          db:
            condition: service_healthy
  • Minimiser les interruptions pendant les mises Ă  jour
    Avant de mettre à jour les services, exécutez :

    docker compose pull && docker compose up -d --remove-orphans

    L’option -d exĂ©cute les conteneurs en arriĂšre-plan, et --remove-orphans supprime les conteneurs non dĂ©finis dans les configs actuelles.
    Pour arrĂȘter et supprimer complĂštement les anciens conteneurs si nĂ©cessaire :

    docker compose down --remove-orphans

    Cela garantit que de nouvelles images sont chargées et que les conteneurs inutilisés sont supprimés sans interruption.

  • Rechargement de code Ă  chaud pour le dĂ©veloppement
    Utilisez volumes pour monter des rĂ©pertoires locaux dans les conteneurs. Cela permet d’appliquer instantanĂ©ment les changements de code sans reconstruire les images.
    Attention aux problĂšmes de permissions de fichiers et au cache du systĂšme de fichiers, surtout sur Windows et macOS, afin d’éviter les problĂšmes de performance.

  • Rechargement de code Ă  chaud sans volume (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • Journalisation centralisĂ©e des services
    Redirigez les journaux des conteneurs vers des systĂšmes de surveillance et d’agrĂ©gation comme ELK Stack, Loki, Prometheus et Fluentd pour une analyse et une alerte faciles.
    Utilisez les pilotes de logs Docker (--log-driver) pour activer la collecte centralisée des journaux.
    Configurez les pilotes de logs des conteneurs dans Compose :

    services:
      api:
        image: my_api
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  • RedĂ©marrage automatique des services
    Configurez la politique de redémarrage dans docker-compose.yml :

    restart: unless-stopped

    Autres politiques de redémarrage disponibles :

    • no — aucun redĂ©marrage automatique (par dĂ©faut)
    • always — redĂ©marrer toujours le conteneur
    • on-failure — redĂ©marrer uniquement en cas d’échec (optionnellement avec un nombre de tentatives)

    En production, unless-stopped est le choix optimal pour assurer la résilience du service.
    Cela permet une rĂ©cupĂ©ration automatique des services aprĂšs un Ă©chec ou un redĂ©marrage de l’hĂŽte.

  • Profils de services
    Permet d’exĂ©cuter uniquement certains groupes de services :

    services:
      db:
        image: postgres
        profiles: ["backend"]
      web:
        image: nginx
        profiles: ["frontend"]

    Pour exécuter uniquement le profil frontend :

    docker compose --profile frontend up

🐞 DĂ©bogage et profilage des services dans Docker Compose

Commande

Exemple

Description

docker compose exec ExĂ©cuter une commande dans un service en cours, donnant accĂšs au conteneur ou permettant d’exĂ©cuter des processus individuels
docker compose exec web sh

Ouvrir un shell dans le conteneur du service web

docker compose exec db psql -U user -d database

Exécuter la commande psql dans le conteneur du service db

docker compose logs Afficher les journaux d’un service pour le diagnostic et la surveillance
docker compose logs -f db

Afficher les journaux du service db en temps réel

docker compose logs --tail=50 api

Afficher les 50 derniĂšres lignes de journaux du service api

docker compose logs --since=1h web

Afficher les journaux de la derniĂšre heure pour le service web

docker inspect Afficher des informations détaillées sur le conteneur exécutant un service
docker inspect $(docker compose ps -q web)

Obtenir le JSON avec infos détaillées du conteneur du service web

docker container stats Surveiller l’utilisation des ressources des conteneurs exĂ©cutant des services
docker stats $(docker compose ps -q worker)

Suivre l’utilisation CPU, mĂ©moire et autres ressources du conteneur du service worker

docker compose run --rm Exécuter un conteneur temporaire avec les paramÚtres du service, utile pour le débogage
docker compose run --rm web sh

Démarrer un conteneur ponctuel pour le service web avec un shell interactif

docker container cp Copier des fichiers entre l’hîte et un conteneur
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

Copier un fichier du conteneur du service db vers l’hîte

💡 Pour un dĂ©bogage pratique des environnements multi-services complexes, utilisez docker compose run --rm pour lancer des conteneurs individuels avec les rĂ©seaux et volumes nĂ©cessaires sans affecter les services principaux.

📚 Ressources supplĂ©mentaires

đŸš« Ignorer des fichiers avec .dockerignore

Ajoutez dans le fichier .dockerignore les fichiers et dossiers Ă  exclure de l’image pour rĂ©duire la taille et accĂ©lĂ©rer la construction :

node_modules/
*.log
.env

⚡ Simplifier les commandes avec des alias

Vous pouvez créer des alias pour les commandes fréquemment utilisées afin de les exécuter plus rapidement :

alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"

🧠 Astuce : conseils d’utilisation de Docker

  • Ne cherchez pas Ă  tout mĂ©moriser — utilisez docker --help ou docker <commande> --help pour explorer les commandes.
  • Pratiquez rĂ©guliĂšrement et expĂ©rimentez avec de petits projets.
  • Surveillez la taille des images et excluez les fichiers inutiles via .dockerignore.

🌐 Liens utiles

📘 Documentation officielle Docker — guides complets et rĂ©fĂ©rences sur tous les sujets Docker :
https://docs.docker.com/

📙 Cheat Sheet Docker — fiche officielle complùte Docker :
https://dockerlabs.collabnix.com/docker/cheatsheet/

📗 Docker Hub — images et registres :
https://hub.docker.com/