đł Docker
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  | |
| 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é  | |
| docker exec container ls /app | Exécuter la commande  | |
| 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  | |
| 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  | |
| 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  | |
| 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é  | |
| docker container pause | Mettre en pause tous les processus dâun conteneur | |
| docker pause container | Mettre en pause le conteneur  | |
| docker container unpause | Reprendre un conteneur mis en pause | |
| docker unpause container | Reprendre le conteneur  | |
| 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  | |
| docker build -t my_image:1.0 . | Construire une image avec le tag  | |
| 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  | |
| 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  | |
| docker tag my_image:1.0 my_image:stable | Créer un tag  | |
| docker tag my_image my_image:backup | Ajouter un tag  | |
| docker image push | Pousser une image vers Docker Hub ou un autre registre | |
| docker push myrepo/my_image:latest | Pousser lâimage taguĂ©e  | |
| docker push myrepo/my_image:1.0 | Pousser lâimage taguĂ©e  | |
| docker push myrepo/my_image | Pousser une image avec le tag par défaut  | |
| 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  | |
| 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é  | |
| docker network create --driver bridge my_bridge_net | Créer un réseau avec le pilote  | |
| 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  | |
| docker network connect --alias db_net my_net container | Connecter avec lâalias  | |
| docker network disconnect | DĂ©connecter un conteneur dâun rĂ©seau | |
| docker network disconnect my_net container | Déconnecter le conteneur  | |
| 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é  | |
| 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  | |
| docker volume rm | Supprimer un ou plusieurs volumes | |
| docker volume rm my_vol | Supprimer le volume  | |
| 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  | |
| 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  | |
| docker compose exec db ls /var/lib/postgresql | Exécuter la commande  | |
| docker compose exec -d worker touch /tmp/done | Exécuter une commande dans le conteneur  | |
| docker compose build | Construire ou reconstruire les images des services | |
| docker compose build | Construire toutes les images définies dans  | |
| docker compose build web | Construire uniquement lâimage du service  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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 ( | |
| 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- alpineou- scratchpour une taille minimale.
 Pour aplatir les couches, utiliser- --squashlors 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- RUNpour 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=valeurou.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 
 
- Docker Swarm
đ 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(withstrace) | Utilitaire Linux permettant dâentrer dans les espaces de noms dâun autre processus (ici, le conteneur). UtilisĂ© avec stracepour 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 Ă pssous 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  | |
| 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 ( | |
| docker diff my_container | grep '^C' | Afficher uniquement les fichiers modifiés ( | |
| 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,gdbet 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| docker compose exec web sh | Ouvrir un shell dans le conteneur  | |
| docker compose exec api curl http://localhost:8080 | ExĂ©cuter une requĂȘte curl depuis le conteneur du service  | |
| 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  | |
| docker compose pause | Mettre en pause le fonctionnement des services | |
| docker compose pause api | Mettre en pause le service  | |
| docker compose unpause | Reprendre les services en pause | |
| docker compose unpause api | Reprendre le service  | |
| docker compose create | Créer les conteneurs sans les démarrer | |
| docker compose create web db | Créer les conteneurs pour  | |
| 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  | 
đ Bonnes pratiques et automatisation avec Docker Compose
- Séparation des environnements 
 Utilisez des fichiers- docker-compose.override.ymlsĂ©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 .envpour les variables dâenvironnement (â les fichiers.envne sont pas chiffrĂ©s et ne doivent pas ĂȘtre publiĂ©s dans des dĂ©pĂŽts publics)
 
- docker secretet- docker configpour 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) 
 
- fichiers 
- Ordre de démarrage avec - depends_onet- 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 - -dexĂ©cute les conteneurs en arriĂšre-plan, et- --remove-orphanssupprime 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- volumespour 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-stoppedest 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  | |
| docker compose exec db psql -U user -d database | Exécuter la commande psql dans le conteneur du service  | |
| 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  | |
| docker compose logs --tail=50 api | Afficher les 50 derniĂšres lignes de journaux du service  | |
| docker compose logs --since=1h web | Afficher les journaux de la derniĂšre heure pour le service  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | 
đĄ Pour un dĂ©bogage pratique des environnements multi-services complexes, utilisez
docker compose run --rmpour 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 --helpoudocker <commande> --helppour 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/