Tu utilises Docker mais tu cherches encore la bonne syntaxe à chaque fois ? Cette antisèche réunit les 30 commandes Docker et Docker Compose que l’on utilise vraiment au quotidien, classées par usage, avec leurs options utiles et les pièges à éviter. À garder ouverte dans un onglet.

📋 Antisèche🐳 Docker · Compose v2✅ 30 commandes⏱️ 13 min de lecture

Les commandes Docker se comptent par dizaines, et chacune possède une foule d’options. Pourtant, au quotidien, un développeur web en utilise toujours à peu près les mêmes : lancer un conteneur, voir ses logs, entrer dedans, reconstruire une image, démarrer un projet Compose. Cette antisèche se concentre sur ces commandes essentielles, avec des exemples concrets tirés d’un environnement PHP, MySQL ou Node.js.

Toutes les commandes Docker présentées ici utilisent la syntaxe moderne : docker compose (avec un espace) correspond à Compose v2, intégré à Docker Desktop et au Docker Engine récent. L’ancienne commande docker-compose (avec un tiret) n’est plus maintenue.

Antisèche des commandes Docker et Docker Compose du quotidien
Les 30 commandes Docker et Docker Compose à connaître, classées par usage.
⚠️
En une phrase

Pour 90 % de ton travail quotidien, retiens six commandes Docker : docker compose up -d, docker compose down, docker compose logs -f, docker compose exec, docker ps et docker system df. Le reste de cette antisèche couvre les cas plus précis.

Les 4 notions à comprendre avant les commandes Docker

Une commande Docker agit toujours sur l’un de ces quatre objets. Les distinguer t’évitera beaucoup de confusion.

NotionCe que c’estAnalogie
———
ImageUn modèle figé : système, dépendances, ton codeUne recette
ConteneurUne instance qui tourne, créée à partir d’une imageLe plat cuisiné à partir de la recette
VolumeUn espace de stockage qui survit au conteneurLe frigo où l’on garde les restes
RéseauLe canal qui permet aux conteneurs de se parlerLe passe-plat entre cuisine et salle
Antisèche des commandes Docker classées par catégorie
Les commandes Docker essentielles, classées par usage : images, conteneurs, Compose, volumes, réseaux et nettoyage.

Une image ne tourne jamais : elle sert à créer des conteneurs. Supprimer un conteneur ne supprime pas l’image, et supprimer un conteneur sans volume fait perdre toutes ses données. Garde ces deux règles en tête avant de lancer les commandes Docker de suppression.

Commandes Docker pour les images

CommandeCe qu’elle fait
——
docker pull php:8.4-apacheTélécharge une image depuis Docker Hub
docker imagesListe les images présentes sur ta machine
docker build -t mon-app .Construit une image à partir du Dockerfile du dossier courant
docker build --no-cache -t mon-app .Reconstruit en ignorant le cache
docker rmi mon-appSupprime une image
docker image pruneSupprime les images « orphelines » (sans nom)
# Construire une image avec un nom et une version
docker build -t mon-app:1.0 .

# Reconstruire en récupérant la dernière image de base
docker build --pull --no-cache -t mon-app:1.0 .
🧠
Tag ou pas tag ?

Sans tag, Docker utilise latest, qui ne veut pas dire « la plus récente » mais simplement « l’étiquette par défaut ». En production, épingle toujours une version précise, par exemple php:8.4-apache plutôt que php:latest.

Commandes Docker pour les conteneurs

CommandeCe qu’elle fait
——
docker run -d -p 8080:80 --name web nginxLance un conteneur en arrière-plan, port 8080 de ta machine vers le port 80 du conteneur
docker psListe les conteneurs en cours d’exécution
docker ps -aListe tous les conteneurs, y compris arrêtés
docker stop webArrête proprement un conteneur
docker start webRedémarre un conteneur arrêté
docker restart webArrête puis redémarre
docker rm webSupprime un conteneur arrêté
docker rm -f webForce l’arrêt et la suppression
docker logs -f webAffiche les logs en continu
docker exec -it web shOuvre un terminal dans un conteneur qui tourne
# Lancer un MySQL de test avec un volume pour garder les données
docker run -d --name db \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=boutique \
  -p 3306:3306 \
  -v db_data:/var/lib/mysql \
  mysql:8.4

# Entrer dans le conteneur et ouvrir le client MySQL
docker exec -it db mysql -u root -p

L’option -it combine deux choses : -i garde l’entrée ouverte et -t alloue un terminal. Sans elle, docker exec exécute la commande et rend la main immédiatement, ce qui est parfait pour une commande ponctuelle comme docker exec web php -v.

🚫
Fausse bonne idée

Modifier des fichiers directement dans un conteneur avec docker exec. Au prochain docker rm, tout est perdu. Les modifications durables vont dans le Dockerfile, un volume ou un montage de ton dossier de projet.

Commandes Docker Compose pour les projets

Dès qu’un projet a plusieurs services (une application, une base de données, un phpMyAdmin), Docker Compose devient indispensable. Toutes les commandes Docker Compose se lancent depuis le dossier qui contient le fichier compose.yaml (ou docker-compose.yml).

CommandeCe qu’elle fait
——
docker compose up -dCrée et démarre tous les services en arrière-plan
docker compose up -d --buildReconstruit les images avant de démarrer
docker compose downArrête et supprime les conteneurs et le réseau
docker compose down -vSupprime aussi les volumes (et donc les données)
docker compose psListe les services du projet
docker compose logs -f appAffiche les logs d’un service en continu
docker compose exec app bashOuvre un terminal dans un service
docker compose restart appRedémarre un service
docker compose pullTélécharge les nouvelles versions des images
docker compose configAffiche la configuration finale, variables remplacées
# compose.yaml : un environnement PHP + MySQL minimal
services:
  app:
    image: php:8.4-apache
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db
  db:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: boutique
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

Remarque : la ligne version: "3.8" qu’on trouve en haut de nombreux anciens fichiers est obsolète avec Compose v2. Elle est ignorée et provoque un simple avertissement : tu peux la supprimer. Pour un exemple complet avec WordPress, suis notre guide Docker pour un environnement WordPress local.

Cycle de vie d’un projet avec les commandes Docker Compose
Du premier up au down -v : les commandes Docker Compose dans l’ordre d’un projet.

Commandes Docker pour les volumes et réseaux

CommandeCe qu’elle fait
——
docker volume lsListe les volumes
docker volume inspect db_dataAffiche les détails, dont l’emplacement sur le disque
docker volume rm db_dataSupprime un volume (données perdues)
docker network lsListe les réseaux
docker network inspect bridgeAffiche les conteneurs connectés à un réseau

Dans un projet Compose, les services se joignent par leur nom : depuis le conteneur app, ta base de données s’appelle simplement db, pas localhost. C’est la cause numéro un des erreurs de connexion à MySQL dans Docker.

// Dans le conteneur "app", l'hôte MySQL est le nom du service
$pdo = new PDO('mysql:host=db;dbname=boutique;charset=utf8mb4', 'root', 'secret');

Commandes Docker pour diagnostiquer et nettoyer

CommandeCe qu’elle fait
——
docker statsAffiche en direct le CPU et la mémoire de chaque conteneur
docker inspect webAffiche toute la configuration d’un conteneur en JSON
docker system dfMontre l’espace disque utilisé par Docker
docker system pruneSupprime conteneurs arrêtés, réseaux inutilisés et images orphelines
docker builder pruneVide le cache de construction
# Combien de place Docker occupe-t-il ?
docker system df

# Nettoyage prudent : ne touche pas aux volumes
docker system prune

# Récupérer une info précise avec --format
docker inspect -f '{{.NetworkSettings.IPAddress}}' web
⚠️
Attention au nettoyage

docker system prune -a --volumes supprime toutes les images non utilisées et tous les volumes non attachés. C’est radical : tes bases de données de test disparaissent. Lis toujours le résumé affiché avant de confirmer.

Commandes Docker au quotidien avec PHP et Node.js

Dans un projet web, la plupart des commandes Docker que tu tapes servent en réalité à lancer des outils à l’intérieur des conteneurs : Composer, la console de ton framework, npm ou le client MySQL. Plutôt que d’installer PHP ou Node.js sur ta machine, tu utilises les versions exactes définies dans le projet.

# Composer dans le conteneur PHP
docker compose exec app composer install
docker compose exec app composer require monolog/monolog

# Console Laravel ou Symfony
docker compose exec app php artisan migrate
docker compose exec app php bin/console cache:clear

# npm dans un conteneur Node.js
docker compose exec front npm install
docker compose exec front npm run build

# Importer un fichier SQL dans le conteneur MySQL
docker compose exec -T db mysql -u root -psecret boutique < sauvegarde.sql

L’option -T de la dernière commande désactive l’allocation d’un terminal : elle est indispensable quand tu rediriges un fichier vers la commande avec <. Sans elle, l’import échoue avec un message d’erreur sur l’entrée standard.

Pour une commande ponctuelle dans un conteneur qui n’existe pas encore, utilise plutôt docker compose run --rm. Le conteneur est créé, la commande s’exécute, puis le conteneur est supprimé automatiquement.

# Créer un projet Laravel sans installer PHP ni Composer sur ta machine
docker run --rm -v "$PWD":/app -w /app composer create-project laravel/laravel mon-projet
🧠
Pourquoi ne pas tout installer en local ?

Avec ces commandes Docker, chaque projet garde sa propre version de PHP, de Node.js et de MySQL. Un vieux projet en PHP 8.1 et un nouveau en PHP 8.4 cohabitent sans conflit sur la même machine.

Les instructions essentielles du Dockerfile

Les commandes Docker de construction lisent un fichier Dockerfile. Tu n’as pas besoin de connaître toutes ses instructions : une dizaine suffit pour la grande majorité des projets web.

InstructionRôleExemple
———
FROMImage de départFROM php:8.4-apache
WORKDIRDossier de travail dans l’imageWORKDIR /var/www/html
COPYCopier des fichiers du projet dans l’imageCOPY . .
RUNExécuter une commande pendant la constructionRUN docker-php-ext-install pdo_mysql
ENVDéfinir une variable d’environnementENV APP_ENV=production
EXPOSEDocumenter le port utiliséEXPOSE 80
CMDCommande lancée au démarrage du conteneurCMD ["apache2-foreground"]
ARGVariable utilisable uniquement pendant la constructionARG PHP_VERSION=8.4
# Dockerfile : PHP 8.4 + Apache + extension MySQL
FROM php:8.4-apache

RUN docker-php-ext-install pdo_mysql \
 && a2enmod rewrite

WORKDIR /var/www/html
COPY . .

EXPOSE 80

Un détail qui fait gagner beaucoup de temps : Docker met en cache chaque instruction. Place les instructions qui changent rarement (installation des extensions, des dépendances système) avant celles qui changent souvent (COPY de ton code). Tes commandes Docker de construction passeront alors de plusieurs minutes à quelques secondes.

Ajoute aussi un fichier .dockerignore à la racine du projet pour éviter de copier dans l’image des dossiers inutiles ou sensibles :

.git
node_modules
vendor
.env
*.log
🚫
Fausse bonne idée

Copier ton fichier .env dans l’image. Une image peut être partagée ou poussée sur un registre : tes mots de passe voyageraient avec elle. Les secrets se passent au conteneur au moment du lancement, jamais pendant la construction.

Les 6 erreurs les plus fréquentes avec les commandes Docker

Message ou symptômeCause probableSolution
———
port is already allocatedLe port est déjà utilisé sur ta machineChange le port de gauche : -p 8081:80
Cannot connect to the Docker daemonDocker Desktop n’est pas lancéDémarre Docker Desktop ou le service docker
Connexion MySQL refusée depuis l’appUtilisation de localhost au lieu du nom du serviceUtilise db comme hôte
Mes modifications de code n’apparaissent pasLe code est copié dans l’image au lieu d’être montéAjoute un volume ./src:/var/www/html en développement
Les données ont disparudocker compose down -v ou conteneur sans volumeToujours déclarer un volume pour les bases de données
no space left on deviceImages et cache accumulésdocker system df puis docker system prune

Le cas du port déjà utilisé est très fréquent sous Windows quand WampServer ou IIS tourne en parallèle. Le même problème se pose avec Apache seul, et la méthode pour trouver le coupable est identique.

Bonus : les alias qui font gagner du temps

Si tu tapes les mêmes commandes Docker toute la journée, crée des raccourcis. Sous Linux et macOS, ajoute ces lignes à ton fichier ~/.bashrc ou ~/.zshrc :

alias dc='docker compose'
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dcl='docker compose logs -f'
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'

Sous Windows avec PowerShell, l’équivalent passe par des fonctions dans ton profil (notepad $PROFILE) :

function dcu { docker compose up -d }
function dcd { docker compose down }
function dcl { docker compose logs -f $args }

Les commandes Docker à retenir par cœur

Si tu ne devais garder qu’une poignée de commandes Docker en mémoire, voici celles qui couvrent l’essentiel d’une journée de développement :

  • docker compose up -d pour démarrer le projet.
  • docker compose logs -f app pour comprendre ce qui se passe.
  • docker compose exec app bash pour entrer dans le conteneur.
  • docker compose up -d --build après une modification du Dockerfile.
  • docker compose down en fin de journée.
  • docker system df une fois par mois, avant un nettoyage.
💡
Le bon réflexe

Ajoute un fichier README.md dans chaque projet avec les trois ou quatre commandes Docker spécifiques au projet. Toi, dans six mois, et tes collègues, vous gagnerez un temps précieux. Et pour l’historique de ton code, garde aussi notre antisèche des commandes Git sous la main.

FAQ

Quelle différence entre docker-compose et docker compose ?

docker-compose (avec un tiret) est l’ancien outil séparé, écrit en Python et qui n’est plus maintenu. docker compose (avec un espace) est Compose v2, intégré directement à Docker. Les commandes sont presque identiques.

Quelle différence entre docker stop et docker rm ?

docker stop arrête le conteneur mais le garde : tu peux le relancer avec docker start. docker rm le supprime définitivement. Les données qui ne sont pas dans un volume disparaissent avec lui.

Comment voir pourquoi un conteneur s’arrête tout de suite ?

Lance docker ps -a pour voir son code de sortie, puis docker logs nom-du-conteneur. La dernière ligne des logs indique presque toujours la cause, souvent une variable d’environnement manquante.

Les commandes Docker sont-elles les mêmes sous Windows ?

Oui. Avec Docker Desktop, les commandes Docker sont identiques sous Windows, macOS et Linux. Seuls les chemins de fichiers et les alias de terminal diffèrent.

Pour progresser, ne cherche pas à mémoriser toutes ces commandes Docker d’un coup. Garde cette page ouverte pendant une ou deux semaines, et consulte-la chaque fois que tu hésites. Les commandes Docker que tu utilises tous les jours s’installeront naturellement dans ta mémoire, et tu ne reviendras ici que pour les cas plus rares : un nettoyage, une inspection de réseau, un import de base de données. C’est exactement le rôle d’une bonne antisèche : te faire gagner du temps sans t’obliger à tout apprendre par cœur.

Commandes Docker : le résumé à retenir

  • Une image est un modèle, un conteneur est une instance qui tourne, un volume garde les données, un réseau relie les conteneurs.
  • Les commandes Docker du quotidien : run, ps, logs, exec, stop, rm, build.
  • Les commandes Docker Compose du quotidien : up -d, down, logs -f, exec, up -d --build.
  • Dans Compose, les services se joignent par leur nom, jamais par localhost.
  • Avant tout nettoyage, vérifie avec docker system df et méfie-toi de l’option --volumes.

Garde cette antisèche des commandes Docker dans tes favoris : elle couvre l’essentiel de ce dont tu auras besoin au quotidien.

Conclusion

Docker paraît intimidant tant qu’on ne connaît pas ses commandes de base. Une fois ces trente commandes Docker maîtrisées, il devient un outil aussi naturel que ton éditeur : un environnement identique pour toute l’équipe, des bases de données de test en une ligne, et plus jamais de « ça marche sur ma machine ». Pour aller plus loin, notre guide Docker pour un environnement WordPress local met toutes ces commandes en pratique sur un vrai projet.

Sources

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *