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.
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.

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.
| Notion | Ce que c’est | Analogie |
|---|---|---|
| — | — | — |
| Image | Un modèle figé : système, dépendances, ton code | Une recette |
| Conteneur | Une instance qui tourne, créée à partir d’une image | Le plat cuisiné à partir de la recette |
| Volume | Un espace de stockage qui survit au conteneur | Le frigo où l’on garde les restes |
| Réseau | Le canal qui permet aux conteneurs de se parler | Le passe-plat entre cuisine et salle |

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
| Commande | Ce qu’elle fait |
|---|---|
| — | — |
docker pull php:8.4-apache | Télécharge une image depuis Docker Hub |
docker images | Liste 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-app | Supprime une image |
docker image prune | Supprime 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 .
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
| Commande | Ce qu’elle fait |
|---|---|
| — | — |
docker run -d -p 8080:80 --name web nginx | Lance un conteneur en arrière-plan, port 8080 de ta machine vers le port 80 du conteneur |
docker ps | Liste les conteneurs en cours d’exécution |
docker ps -a | Liste tous les conteneurs, y compris arrêtés |
docker stop web | Arrête proprement un conteneur |
docker start web | Redémarre un conteneur arrêté |
docker restart web | Arrête puis redémarre |
docker rm web | Supprime un conteneur arrêté |
docker rm -f web | Force l’arrêt et la suppression |
docker logs -f web | Affiche les logs en continu |
docker exec -it web sh | Ouvre 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.
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).
| Commande | Ce qu’elle fait |
|---|---|
| — | — |
docker compose up -d | Crée et démarre tous les services en arrière-plan |
docker compose up -d --build | Reconstruit les images avant de démarrer |
docker compose down | Arrête et supprime les conteneurs et le réseau |
docker compose down -v | Supprime aussi les volumes (et donc les données) |
docker compose ps | Liste les services du projet |
docker compose logs -f app | Affiche les logs d’un service en continu |
docker compose exec app bash | Ouvre un terminal dans un service |
docker compose restart app | Redémarre un service |
docker compose pull | Télécharge les nouvelles versions des images |
docker compose config | Affiche 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.

up au down -v : les commandes Docker Compose dans l’ordre d’un projet.Commandes Docker pour les volumes et réseaux
| Commande | Ce qu’elle fait |
|---|---|
| — | — |
docker volume ls | Liste les volumes |
docker volume inspect db_data | Affiche les détails, dont l’emplacement sur le disque |
docker volume rm db_data | Supprime un volume (données perdues) |
docker network ls | Liste les réseaux |
docker network inspect bridge | Affiche 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
| Commande | Ce qu’elle fait |
|---|---|
| — | — |
docker stats | Affiche en direct le CPU et la mémoire de chaque conteneur |
docker inspect web | Affiche toute la configuration d’un conteneur en JSON |
docker system df | Montre l’espace disque utilisé par Docker |
docker system prune | Supprime conteneurs arrêtés, réseaux inutilisés et images orphelines |
docker builder prune | Vide 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
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
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.
| Instruction | Rôle | Exemple |
|---|---|---|
| — | — | — |
FROM | Image de départ | FROM php:8.4-apache |
WORKDIR | Dossier de travail dans l’image | WORKDIR /var/www/html |
COPY | Copier des fichiers du projet dans l’image | COPY . . |
RUN | Exécuter une commande pendant la construction | RUN docker-php-ext-install pdo_mysql |
ENV | Définir une variable d’environnement | ENV APP_ENV=production |
EXPOSE | Documenter le port utilisé | EXPOSE 80 |
CMD | Commande lancée au démarrage du conteneur | CMD ["apache2-foreground"] |
ARG | Variable utilisable uniquement pendant la construction | ARG 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
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ôme | Cause probable | Solution |
|---|---|---|
| — | — | — |
port is already allocated | Le port est déjà utilisé sur ta machine | Change le port de gauche : -p 8081:80 |
Cannot connect to the Docker daemon | Docker Desktop n’est pas lancé | Démarre Docker Desktop ou le service docker |
| Connexion MySQL refusée depuis l’app | Utilisation de localhost au lieu du nom du service | Utilise db comme hôte |
| Mes modifications de code n’apparaissent pas | Le 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 disparu | docker compose down -v ou conteneur sans volume | Toujours déclarer un volume pour les bases de données |
no space left on device | Images et cache accumulés | docker 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 -dpour démarrer le projet.docker compose logs -f apppour comprendre ce qui se passe.docker compose exec app bashpour entrer dans le conteneur.docker compose up -d --buildaprès une modification du Dockerfile.docker compose downen fin de journée.docker system dfune fois par mois, avant un nettoyage.
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 dfet 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
- Documentation officielle Docker : référence de la CLI
- Documentation officielle Docker Compose
- Migrer vers Compose v2
- Docker Hub : image officielle PHP

