🐳 Docker
Commandes essentielles pour gérer les containers, images, volumes et networks.
Docker permet de containeriser des applications pour les rendre portables et faciles à déployer.
Containers
Lancer un container
# Lancer un container en mode détaché
docker run -d --name mon-container nginx
# Lancer avec un port mapping
docker run -d -p 8080:80 nginx
# Lancer avec des variables d'environnement
docker run -d -e MY_VAR=value nginx
# Lancer avec un volume
docker run -d -v /host/path:/container/path nginx
# Lancer en mode interactif
docker run -it ubuntu bashGérer les containers
# Lister les containers actifs
docker ps
# Lister tous les containers (y compris arrêtés)
docker ps -a
# Arrêter un container
docker stop mon-container
# Démarrer un container arrêté
docker start mon-container
# Redémarrer un container
docker restart mon-container
# Supprimer un container
docker rm mon-container
# Supprimer un container en cours d'exécution
docker rm -f mon-container
# Supprimer tous les containers arrêtés
docker container pruneInteragir avec un container
# Exécuter une commande dans un container
docker exec -it mon-container bash
# Voir les logs
docker logs mon-container
# Suivre les logs en temps réel
docker logs -f mon-container
# Voir les logs avec timestamps
docker logs -t mon-container
# Copier des fichiers vers/depuis un container
docker cp fichier.txt mon-container:/path/
docker cp mon-container:/path/fichier.txt ./Images
Gérer les images
# Lister les images
docker images
# Télécharger une image
docker pull nginx:latest
# Supprimer une image
docker rmi nginx
# Supprimer les images non utilisées
docker image prune
# Supprimer TOUTES les images non utilisées
docker image prune -a
# Construire une image depuis un Dockerfile
docker build -t mon-image:tag .
# Construire avec un Dockerfile spécifique
docker build -f Dockerfile.dev -t mon-image:dev .
# Taguer une image
docker tag mon-image:latest registry.example.com/mon-image:latest
# Pousser une image vers un registry
docker push registry.example.com/mon-image:latestInspecter une image
# Voir l'historique des layers
docker history mon-image
# Inspecter les métadonnées
docker inspect mon-imageVolumes
# 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 non utilisés
docker volume prune
# Utiliser un volume nommé
docker run -d -v mon-volume:/data nginx
# Utiliser un bind mount
docker run -d -v $(pwd):/app nginxNetworks
# Créer un network
docker network create mon-network
# Lister les networks
docker network ls
# Inspecter un network
docker network inspect mon-network
# Connecter un container à un network
docker network connect mon-network mon-container
# Déconnecter un container
docker network disconnect mon-network mon-container
# Supprimer un network
docker network rm mon-network
# Lancer un container sur un network spécifique
docker run -d --network mon-network nginxDocker Compose
Docker Compose v2 utilise docker compose (sans tiret) au lieu de docker-compose.
Commandes de base
# Lancer les services
docker compose up
# Lancer en mode détaché
docker compose up -d
# Arrêter les services
docker compose down
# Arrêter et supprimer les volumes
docker compose down -v
# Reconstruire les images
docker compose build
# Lancer avec reconstruction
docker compose up -d --build
# Voir les logs
docker compose logs
# Suivre les logs
docker compose logs -f
# Logs d'un service spécifique
docker compose logs -f nom-serviceGérer les services
# Lister les services
docker compose ps
# Redémarrer un service
docker compose restart nom-service
# Arrêter un service
docker compose stop nom-service
# Exécuter une commande dans un service
docker compose exec nom-service bash
# Scaler un service
docker compose up -d --scale nom-service=3Fichiers compose multiples
# Utiliser un fichier spécifique
docker compose -f docker-compose.prod.yml up -d
# Combiner plusieurs fichiers
docker compose -f docker-compose.yml -f docker-compose.override.yml up -dNettoyage
# Supprimer tout ce qui n'est pas utilisé
docker system prune
# Supprimer tout (y compris les volumes)
docker system prune -a --volumes
# Voir l'espace disque utilisé
docker system df
# Voir l'espace disque détaillé
docker system df -vDebugging
# Inspecter un container
docker inspect mon-container
# Voir les stats en temps réel
docker stats
# Voir les stats d'un container spécifique
docker stats mon-container
# Voir les processus dans un container
docker top mon-container
# Voir les événements Docker
docker eventsAstuces
Alias utiles
# À ajouter dans .bashrc ou .zshrc
alias d='docker'
alias dc='docker compose'
alias dps='docker ps'
alias dpsa='docker ps -a'
alias dimg='docker images'
alias dlog='docker logs -f'
alias dex='docker exec -it'One-liners pratiques
# Arrêter tous les containers
docker stop $(docker ps -q)
# Supprimer tous les containers arrêtés
docker rm $(docker ps -aq)
# Supprimer toutes les images
docker rmi $(docker images -q)
# Supprimer les images dangling (sans tag)
docker rmi $(docker images -f "dangling=true" -q)
# Obtenir l'IP d'un container
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mon-containerExemple de Dockerfile
# Image de base
FROM node:20-alpine
# Définir le répertoire de travail
WORKDIR /app
# Copier les fichiers de dépendances
COPY package*.json ./
# Installer les dépendances
RUN npm ci --only=production
# Copier le code source
COPY . .
# Exposer le port
EXPOSE 3000
# Commande de démarrage
CMD ["node", "server.js"]Exemple docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://user:pass@db:5432/mydb
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
restart: unless-stopped
volumes:
postgres_data: