Intermédiaire
⭐ Article vedette

Docker & Docker Compose : Cheat Sheet des commandes essentielles

Guide de référence rapide des commandes Docker et Docker Compose pour développer efficacement au quotidien.

Publié le
15 novembre 2024
Lecture
8 min
Vues
1.5k
Auteur
Florian Courouge
Docker
Docker Compose
Conteneurs
DevOps
Cheat Sheet

Table des matières

📋 Vue d'ensemble rapide des sujets traités dans cet article

Cliquez sur les sections ci-dessous pour naviguer rapidement

Docker & Docker Compose : Cheat Sheet des commandes essentielles

Référence complète des commandes Docker et Docker Compose pour développer rapidement et efficacement. De la gestion des images au debugging, tout ce qu'il faut retenir pour être productif.

Architecture Docker

💡Docker - Commandes de base

Images

# Lister les images
docker images
docker image ls

# Télécharger une image
docker pull nginx:latest
docker pull mysql:8.0

# Construire une image
docker build -t mon-app:v1 .
docker build -t mon-app:v1 -f Dockerfile.prod .

# Supprimer une image
docker rmi nginx:latest
docker rmi $(docker images -q)  # Toutes les images

Conteneurs - Lancement

# Lancer un conteneur
docker run nginx
docker run -d nginx                    # En arrière-plan
docker run -d -p 8080:80 nginx         # Avec port mapping
docker run -d -p 8080:80 --name web nginx  # Avec nom

# Mode interactif
docker run -it ubuntu bash
docker run -it --rm ubuntu bash        # Supprime après arrêt

# Avec volumes
docker run -d -v /host/path:/container/path nginx
docker run -d -v vol-name:/container/path nginx

Docker Container Lifecycle

Conteneurs - Gestion

# Lister les conteneurs
docker ps                    # Actifs seulement
docker ps -a                 # Tous (actifs + arrêtés)
docker ps -q                 # IDs seulement

# Arrêter/démarrer
docker stop container-name
docker start container-name
docker restart container-name

# Supprimer
docker rm container-name
docker rm $(docker ps -aq)   # Tous les conteneurs arrêtés
docker rm -f $(docker ps -aq) # Force tous les conteneurs

💡Debug et logs

Logs et inspection

# Voir les logs
docker logs container-name
docker logs -f container-name         # Mode suivi
docker logs --tail 50 container-name  # 50 dernières lignes

# Inspecter un conteneur
docker inspect container-name
docker inspect container-name | jq '.NetworkSettings.IPAddress'

# Statistiques temps réel
docker stats
docker stats container-name

Accès aux conteneurs

# Exécuter une commande
docker exec container-name ls -la
docker exec -it container-name bash   # Shell interactif
docker exec -it container-name sh     # Si pas bash

# Copier des fichiers
docker cp file.txt container-name:/path/
docker cp container-name:/path/file.txt ./

💡Nettoyage

Docker System Cleanup

Nettoyage rapide

# Nettoyage automatique
docker system prune              # Images, conteneurs, réseaux inutilisés
docker system prune -a           # + toutes les images non utilisées
docker system prune -a --volumes # + tous les volumes

# Nettoyage spécifique
docker container prune           # Conteneurs arrêtés
docker image prune               # Images pendantes
docker image prune -a            # Images non utilisées
docker volume prune              # Volumes non utilisés

Voir l'espace utilisé

docker system df                 # Résumé espace disque
docker system df -v              # Détaillé

💡Docker Compose - Commandes essentielles

Docker Compose Architecture

Lancement et arrêt

# Démarrer les services
docker-compose up
docker-compose up -d             # En arrière-plan
docker-compose up --build        # Force rebuild
docker-compose up service-name   # Service spécifique

# Arrêter
docker-compose down              # Arrête et supprime
docker-compose down -v           # + supprime les volumes
docker-compose stop              # Arrête seulement

Gestion des services

# Voir l'état
docker-compose ps
docker-compose ps service-name

# Logs
docker-compose logs
docker-compose logs -f           # Mode suivi
docker-compose logs service-name

# Redémarrer
docker-compose restart
docker-compose restart service-name

# Reconstruire
docker-compose build
docker-compose build service-name

Scaling et exécution

# Scaler un service
docker-compose up -d --scale web=3

# Exécuter une commande
docker-compose exec service-name bash
docker-compose exec web ls -la

# Exécuter un service en one-shot
docker-compose run --rm web python manage.py migrate

💡One-liners utiles

Docker

# Arrêter tous les conteneurs
docker stop $(docker ps -q)

# Supprimer toutes les images non taguées
docker rmi $(docker images | grep "^<none>" | awk '{print $3}')

# Voir les ports ouverts
docker port container-name

# Suivre les logs de tous les conteneurs
docker logs -f $(docker ps -q)

# Entrer dans le dernier conteneur lancé
docker exec -it $(docker ps -ql) bash

# Taille des conteneurs
docker ps -s

Docker Compose

# Recréer complètement un environnement
docker-compose down -v && docker-compose up -d --build

# Voir les variables d'environnement
docker-compose config

# Logs de tous les services en temps réel
docker-compose logs -f --tail=0

# Redémarrer un service spécifique
docker-compose restart service-name && docker-compose logs -f service-name

💡Exemple docker-compose.yml type

Docker Compose Example

version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/app
      - static_volume:/app/static
    environment:
      - DEBUG=1
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      - db
      - redis

  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - static_volume:/static
    depends_on:
      - web

volumes:
  postgres_data:
  static_volume:

💡Troubleshooting rapide

Problèmes courants

# Conteneur qui ne démarre pas
docker logs container-name
docker inspect container-name

# Port déjà utilisé
docker ps | grep :8080                    # Voir qui utilise le port
sudo lsof -i :8080                        # Processus sur le port
docker-compose down && docker-compose up  # Redémarrer clean

# Problème de permissions
docker exec -it container-name ls -la /path
docker exec -u root -it container-name chown user:user /path

# Problème réseau
docker network ls
docker network inspect bridge
docker exec container-name ping autre-container

Debugging containers

# Voir ce qui se passe dans un conteneur
docker exec -it container-name ps aux
docker exec -it container-name netstat -tlnp
docker exec -it container-name env

# Tester la connectivité
docker exec -it web ping db
docker exec -it web nc -zv db 5432        # Test port PostgreSQL
docker exec -it web curl -I http://redis:6379

💡Workflow de développement type

Docker Development Workflow

Setup projet

# 1. Cloner et setup
git clone repo
cd repo
cp .env.example .env

# 2. Construire et lancer
docker-compose up -d --build

# 3. Voir les logs
docker-compose logs -f

# 4. Migrations/setup initial
docker-compose exec web python manage.py migrate
docker-compose exec web python manage.py collectstatic

Développement quotidien

# Démarrer la journée
docker-compose up -d

# Voir ce qui se passe
docker-compose ps
docker-compose logs -f web

# Tests
docker-compose exec web pytest
docker-compose exec web python manage.py test

# Fin de journée
docker-compose down

Debugging session

# 1. Problème détecté
docker-compose logs service-name

# 2. Inspecter le conteneur
docker-compose exec service-name bash

# 3. Rebuilder si nécessaire
docker-compose down
docker-compose up -d --build service-name

# 4. Monitoring
docker-compose logs -f service-name

💡Mémo variables d'environnement

Dans docker-compose.yml

services:
  web:
    environment:
      - DEBUG=1
      - DB_HOST=db
    env_file:
      - .env
      - .env.local

Dans .env

# Base de données
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
POSTGRES_PASSWORD=secret123

# Redis
REDIS_URL=redis://localhost:6379/0

# Application
DEBUG=True
SECRET_KEY=your-secret-key
ALLOWED_HOSTS=localhost,127.0.0.1

💡Aliases utiles à ajouter dans ~/.bashrc

# Docker aliases
alias d='docker'
alias dc='docker-compose'
alias dps='docker ps'
alias dpsa='docker ps -a'
alias di='docker images'

# Docker Compose aliases
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
alias dcl='docker-compose logs -f'
alias dcb='docker-compose up -d --build'
alias dce='docker-compose exec'

# Nettoyage
alias dclean='docker system prune -a'
alias dstop='docker stop $(docker ps -q)'

💡Conclusion

Ce cheat sheet couvre l'essentiel des commandes Docker et Docker Compose pour être efficace au quotidien. Les one-liners et workflows proposés permettent de gagner un temps précieux en développement.

Points clés à retenir :

Avec ces commandes en tête, vous serez paré pour développer efficacement avec Docker et résoudre rapidement les problèmes courants.

À propos de l'auteur

Florian Courouge - Expert DevOps et Apache Kafka avec plus de 5 ans d'expérience dans l'architecture de systèmes distribués et l'automatisation d'infrastructures.

Cet article vous a été utile ?

Découvrez mes autres articles techniques ou contactez-moi pour discuter de vos projets DevOps et Kafka.