Commandes Docker
ObjectifCommande
Voir les images locales docker images
Voir les containers docker ps -a
Voir les logs d'un container docker logs <id>
docker logs -f <id> (suivi en temps réel)
Démarrer un container docker start <id>
Démarrer un container avec console docker start --attach <name>
docker run -it <image> /bin/bash
docker run --tty --interactive debian:12 /bin/bash
Stopper un container docker stop <id>
Redémarrer un container docker restart <id>
Voir la configuration d'un container docker inspect <id>
Voir l'IP d'un container docker inspect <id> | grep IPAddress
Voir les stats d'un container docker stats <id>
Rechercher une image sur Docker Hub docker search nginx
Télécharger une image docker pull nginx:latest
Créer et démarrer un container docker run -d --name MonServeur nginx:latest
Créer un container avec port exposé docker run -d -p 8080:80 --name=MonWebserver nginx:latest
Ouvrir un shell sur un container actif docker exec -it <id> /bin/bash
docker exec -it MonWebserver /bin/bash
docker exec MonWebserver ls -al
Supprimer une image docker rmi <image>:<tag>
Supprimer un container docker rm <id>
docker rm -f <id> (forcer)
Supprimer tous les containers arrêtés docker container prune
Supprimer toutes les images non utilisées docker image prune -a
Nettoyer tout (containers, images, volumes, networks) docker system prune -a --volumes
Construire une image depuis un Dockerfile docker build -t mon-image:1.0 .
Docker Networks
Lister les réseaux docker network ls
Créer un réseau docker network create mon-reseau
Connecter un container à un réseau docker network connect mon-reseau <container>
Inspecter un réseau docker network inspect mon-reseau
Docker Volumes
Lister les volumes docker volume ls
Créer un volume docker volume create mon-volume
Inspecter un volume docker volume inspect mon-volume
Supprimer un volume docker volume rm mon-volume
Monter un volume docker run -v mon-volume:/data <image>
Docker Compose
Démarrer tous les services docker-compose up -d
Arrêter tous les services docker-compose down
Voir les logs de tous les services docker-compose logs -f
Reconstruire les images docker-compose build
Redémarrer un service docker-compose restart <service>
Troubleshooting / Debug
Voir les dernières lignes de logs docker logs --tail 100 <id>
Voir les processus actifs dans un container docker top <id>
Voir les changements dans le filesystem docker diff <id>
Voir le mapping des ports docker port <id>
Copier un fichier depuis/vers un container docker cp <container>:/chemin/fichier ./local
docker cp ./local <container>:/chemin/
Attacher au container en cours d'exécution docker attach <id>
Monitoring / Stats
Voir les stats en continu docker stats
Voir un snapshot des stats docker stats --no-stream
Voir l'espace disque utilisé docker system df
Voir les événements en temps réel docker events
Historique d'une image docker history <image>
Optimisation
Fichier .dockerignore Créer un fichier .dockerignore pour exclure des fichiers du build
(node_modules/, .git/, *.log, etc.)
Build multi-stage Utiliser plusieurs FROM dans un Dockerfile pour réduire la taille finale
FROM node:18 AS builder → FROM node:18-alpine AS production
Nettoyer régulièrement docker system prune -a --volumes (libérer de l'espace)
Limiter les ressources d'un container docker run -m 512m --cpus="1.5" <image>
Docker Hub / Registry
Se connecter à Docker Hub docker login
Se déconnecter docker logout
Tagger une image docker tag mon-image:1.0 moncompte/mon-image:1.0
Pousser une image sur Docker Hub docker push moncompte/mon-image:1.0
Télécharger une version spécifique docker pull nginx:1.25-alpine
Autres Technologies Populaires
Redis (cache) docker run -d -p 6379:6379 --name mon-redis redis:alpine
PostgreSQL docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=secret --name mon-postgres postgres:16
Nginx docker run -d -p 80:80 -v ./html:/usr/share/nginx/html --name mon-nginx nginx:alpine
MongoDB docker run -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo:7
Node.js docker run -d -p 3000:3000 -v ./app:/usr/src/app -w /usr/src/app node:20 npm start
Directives Dockerfile
FROM : image de base (debian:12, php:8.2-apache)
LABEL maintainer : nom et email du mainteneur
RUN : commande à exécuter lors du build
COPY : copier des fichiers locaux dans l'image
ADD : copier avec support archives et URLs
WORKDIR : définir le répertoire de travail
ENV : définir une variable d'environnement
EXPOSE : port(s) à exposer
VOLUME : point de montage
USER : utilisateur pour les commandes suivantes
CMD : commande par défaut au démarrage
ENTRYPOINT : commande principale (non remplaçable)
Exemples Pratiques
Apache PHP docker run -d -p 8080:80 -v ./www:/var/www/html php:8.2-apache
MySQL docker run -d -p 3306:3306 -v ./mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret mysql:8
MariaDB docker run -d -p 3307:3306 -v ./mariadb-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret mariadb:11
PhpMyAdmin docker run -d -p 8081:80 -e PMA_HOST=mysql --network mon-reseau phpmyadmin:latest
Exemple Complet : Stack LAMP avec Docker Compose
Fichier .env (variables sensibles)
Fichier docker-compose.yml (version 3)
Fichier Dockerfile personnalisé (Apache PHP MySQL)
Fichier config/apache.conf (VirtualHost)
Utilisation :
1. Créer les fichiers .env, docker-compose.yml dans un dossier
2. Créer les sous-dossiers : www/ logs/ config/
3. Lancer : docker-compose up -d
4. Accès Web : http://localhost:8080
5. Accès PhpMyAdmin : http://localhost:8081
6. Arrêter : docker-compose down