Référence rapide Docker organisée par contexte d'utilisation.
Images
Consulter et gérer
| Description | Commande |
|---|---|
| Lister les images locales | docker images |
| Chercher une image sur Docker Hub | docker search nginx |
| Télécharger une image | docker pull nginx:alpine |
| Inspecter une image | docker inspect nginx |
| Voir les layers d'une image | docker history nginx |
| Supprimer une image | docker rmi nginx |
| Supprimer les images inutilisées | docker image prune |
| Supprimer toutes les images non référencées | docker image prune -a |
Build
| Description | Commande |
|---|---|
| Build depuis le répertoire courant | docker build -t mon-app:1.0 . |
| Build avec un Dockerfile spécifique | docker build -f Dockerfile.prod -t mon-app . |
| Build avec un argument | docker build --build-arg ENV=prod -t mon-app . |
| Build sans cache | docker build --no-cache -t mon-app . |
| Build multi-plateforme (buildx) | docker buildx build --platform linux/amd64,linux/arm64 -t mon-app --push . |
| Afficher les étapes du build | docker build --progress=plain -t mon-app . |
Tags et registry
| Description | Commande |
|---|---|
| Taguer une image | docker tag mon-app:1.0 registry.io/mon-app:1.0 |
| Pousser vers un registry | docker push registry.io/mon-app:1.0 |
| Se connecter à un registry | docker login registry.io |
| Se déconnecter | docker logout registry.io |
| Sauvegarder une image en fichier tar | docker save -o mon-app.tar mon-app:1.0 |
| Charger une image depuis un tar | docker load -i mon-app.tar |
Conteneurs
Lancer un conteneur
| Description | Commande |
|---|---|
| Lancer en arrière-plan (detached) | docker run -d nginx |
| Lancer avec un nom | docker run -d --name mon-nginx nginx |
| Supprimer automatiquement à l'arrêt | docker run --rm ubuntu echo "hello" |
| Mode interactif (shell) | docker run -it ubuntu bash |
| Mapper un port host:container | docker run -d -p 8080:80 nginx |
| Exposer tous les ports EXPOSE | docker run -d -P nginx |
| Passer une variable d'environnement | docker run -d -e ENV=production mon-app |
| Charger un fichier .env | docker run -d --env-file .env mon-app |
| Monter un dossier (bind mount) | docker run -d -v /host/path:/app nginx |
| Monter un volume nommé | docker run -d -v mon-volume:/data nginx |
| Volume en lecture seule | docker run -d -v mon-volume:/data:ro nginx |
| Limiter la mémoire | docker run -d --memory 512m nginx |
| Limiter le CPU | docker run -d --cpus 0.5 nginx |
| Connecter à un réseau | docker run -d --network mon-reseau nginx |
Gérer les conteneurs
| Description | Commande |
|---|---|
| Lister les conteneurs actifs | docker ps |
| Lister tous les conteneurs | docker ps -a |
| Filtrer par nom | docker ps --filter "name=nginx" |
| Filtrer par état | docker ps --filter "status=exited" |
| Arrêter (SIGTERM → SIGKILL) | docker stop mon-nginx |
| Tuer immédiatement (SIGKILL) | docker kill mon-nginx |
| Redémarrer | docker restart mon-nginx |
| Démarrer un conteneur arrêté | docker start mon-nginx |
| Supprimer un conteneur arrêté | docker rm mon-nginx |
| Supprimer un conteneur actif (forcer) | docker rm -f mon-nginx |
| Supprimer tous les conteneurs arrêtés | docker container prune |
| Inspecter la config d'un conteneur | docker inspect mon-nginx |
| Voir l'IP d'un conteneur | docker inspect mon-nginx --format '{{.NetworkSettings.IPAddress}}' |
Interagir avec un conteneur actif
| Description | Commande |
|---|---|
| Ouvrir un shell | docker exec -it mon-nginx bash |
| Shell sur image Alpine | docker exec -it mon-nginx sh |
| Exécuter une commande unique | docker exec mon-nginx nginx -t |
| Voir les logs | docker logs mon-nginx |
| Suivre les logs en temps réel | docker logs -f mon-nginx |
| Dernières N lignes | docker logs --tail 100 mon-nginx |
| Logs depuis N temps | docker logs --since 1h mon-nginx |
| Copier host → conteneur | docker cp ./fichier mon-nginx:/app/ |
| Copier conteneur → host | docker cp mon-nginx:/app/fichier ./ |
| Statistiques CPU/RAM en temps réel | docker stats mon-nginx |
| Processus dans le conteneur | docker top mon-nginx |
Volumes
| Description | Commande |
|---|---|
| Créer un volume | docker volume create mon-volume |
| Lister les volumes | docker volume ls |
| Inspecter un volume | docker volume inspect mon-volume |
| Supprimer un volume | docker volume rm mon-volume |
| Supprimer les volumes inutilisés | docker volume prune |
Réseaux
| Description | Commande |
|---|---|
| Lister les réseaux | docker network ls |
| Créer un réseau bridge | docker network create mon-reseau |
| Créer avec un subnet spécifique | docker network create --subnet 172.20.0.0/16 mon-reseau |
| Connecter un conteneur à un réseau | docker network connect mon-reseau mon-nginx |
| Déconnecter un conteneur | docker network disconnect mon-reseau mon-nginx |
| Inspecter un réseau | docker network inspect mon-reseau |
| Supprimer les réseaux inutilisés | docker network prune |
Docker Compose
| Description | Commande |
|---|---|
| Démarrer tous les services | docker compose up -d |
| Démarrer et rebuilder les images | docker compose up -d --build |
| Arrêter les services (garde les volumes) | docker compose down |
| Arrêter et supprimer les volumes | docker compose down -v |
| Voir les logs de tous les services | docker compose logs -f |
| Logs d'un service spécifique | docker compose logs -f web |
| Statut des services | docker compose ps |
| Shell dans un service | docker compose exec web bash |
| Redémarrer un service | docker compose restart web |
| Scaler un service | docker compose up -d --scale web=3 |
| Voir la config compilée | docker compose config |
| Valider le fichier compose | docker compose config --quiet |
docker-compose.yml - structure de base
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
env_file:
- .env
depends_on:
db:
condition: service_healthy
volumes:
- app-data:/app/data
networks:
- app-net
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data
networks:
- app-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d mydb"]
interval: 10s
retries: 5
volumes:
app-data:
db-data:
networks:
app-net:
Nettoyage
| Description | Commande |
|---|---|
| Espace disque utilisé par Docker | docker system df |
| Détail de l'espace par ressource | docker system df -v |
| Supprimer toutes les ressources inutilisées | docker system prune |
| Tout supprimer (volumes inclus) | docker system prune -a --volumes |
Dockerfile - bonnes pratiques
# Base précise (éviter "latest")
FROM node:20-alpine
# Créer un utilisateur non-root
RUN addgroup -S app && adduser -S app -G app
WORKDIR /app
# Copier les dépendances EN PREMIER (cache des layers)
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN chown -R app:app /app
USER app
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=5s \
CMD wget -q -O- http://localhost:3000/health || exit 1
CMD ["node", "server.js"]
# Build multi-stage (image finale allégée)
FROM node:20-alpine AS builder
WORKDIR /build
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS production
WORKDIR /app
COPY --from=builder /build/dist ./dist
COPY --from=builder /build/node_modules ./node_modules
USER node
CMD ["node", "dist/index.js"]
Ressources
- Documentation : https://docs.docker.com
- Docker Hub : https://hub.docker.com
- Compose Spec : https://compose-spec.io