đł 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 commealpineouscratchpour 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 seulRUNpour 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:$PATHVé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_imageOu le nouveau CLI :
docker scout cves my_imageCela 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 myimageCela 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 myimageUtile 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 avecdocker-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 (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 |
|
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 fichiersdocker-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 -dUtilisez 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 secretetdocker 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_onethealthcheck
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_healthyMinimiser les interruptions pendant les mises Ă jour
Avant de mettre Ă jour les services, exĂ©cutez :docker compose pull && docker compose up -d --remove-orphansLâ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-orphansCela 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
Utilisezvolumespour 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: /appJournalisation 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 dansdocker-compose.yml:restart: unless-stoppedAutres 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/