Cheatsheets

Docker

Aide-mémoire Docker complet - commandes images, conteneurs, volumes, réseaux et Docker Compose. Toutes les commandes essentielles pour développeurs et DevOps.

Référence rapide Docker organisée par contexte d'utilisation.


Images

Consulter et gérer

DescriptionCommande
Lister les images localesdocker images
Chercher une image sur Docker Hubdocker search nginx
Télécharger une imagedocker pull nginx:alpine
Inspecter une imagedocker inspect nginx
Voir les layers d'une imagedocker history nginx
Supprimer une imagedocker rmi nginx
Supprimer les images inutiliséesdocker image prune
Supprimer toutes les images non référencéesdocker image prune -a

Build

DescriptionCommande
Build depuis le répertoire courantdocker build -t mon-app:1.0 .
Build avec un Dockerfile spécifiquedocker build -f Dockerfile.prod -t mon-app .
Build avec un argumentdocker build --build-arg ENV=prod -t mon-app .
Build sans cachedocker 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 builddocker build --progress=plain -t mon-app .

Tags et registry

DescriptionCommande
Taguer une imagedocker tag mon-app:1.0 registry.io/mon-app:1.0
Pousser vers un registrydocker push registry.io/mon-app:1.0
Se connecter à un registrydocker login registry.io
Se déconnecterdocker logout registry.io
Sauvegarder une image en fichier tardocker save -o mon-app.tar mon-app:1.0
Charger une image depuis un tardocker load -i mon-app.tar

Conteneurs

Lancer un conteneur

DescriptionCommande
Lancer en arrière-plan (detached)docker run -d nginx
Lancer avec un nomdocker run -d --name mon-nginx nginx
Supprimer automatiquement à l'arrêtdocker run --rm ubuntu echo "hello"
Mode interactif (shell)docker run -it ubuntu bash
Mapper un port host:containerdocker run -d -p 8080:80 nginx
Exposer tous les ports EXPOSEdocker run -d -P nginx
Passer une variable d'environnementdocker run -d -e ENV=production mon-app
Charger un fichier .envdocker 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 seuledocker run -d -v mon-volume:/data:ro nginx
Limiter la mémoiredocker run -d --memory 512m nginx
Limiter le CPUdocker run -d --cpus 0.5 nginx
Connecter à un réseaudocker run -d --network mon-reseau nginx

Gérer les conteneurs

DescriptionCommande
Lister les conteneurs actifsdocker ps
Lister tous les conteneursdocker ps -a
Filtrer par nomdocker ps --filter "name=nginx"
Filtrer par étatdocker ps --filter "status=exited"
Arrêter (SIGTERM → SIGKILL)docker stop mon-nginx
Tuer immédiatement (SIGKILL)docker kill mon-nginx
Redémarrerdocker 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ésdocker container prune
Inspecter la config d'un conteneurdocker inspect mon-nginx
Voir l'IP d'un conteneurdocker inspect mon-nginx --format '{{.NetworkSettings.IPAddress}}'

Interagir avec un conteneur actif

DescriptionCommande
Ouvrir un shelldocker exec -it mon-nginx bash
Shell sur image Alpinedocker exec -it mon-nginx sh
Exécuter une commande uniquedocker exec mon-nginx nginx -t
Voir les logsdocker logs mon-nginx
Suivre les logs en temps réeldocker logs -f mon-nginx
Dernières N lignesdocker logs --tail 100 mon-nginx
Logs depuis N tempsdocker logs --since 1h mon-nginx
Copier host → conteneurdocker cp ./fichier mon-nginx:/app/
Copier conteneur → hostdocker cp mon-nginx:/app/fichier ./
Statistiques CPU/RAM en temps réeldocker stats mon-nginx
Processus dans le conteneurdocker top mon-nginx

Volumes

DescriptionCommande
Créer un volumedocker volume create mon-volume
Lister les volumesdocker volume ls
Inspecter un volumedocker volume inspect mon-volume
Supprimer un volumedocker volume rm mon-volume
Supprimer les volumes inutilisésdocker volume prune

Réseaux

DescriptionCommande
Lister les réseauxdocker network ls
Créer un réseau bridgedocker network create mon-reseau
Créer avec un subnet spécifiquedocker network create --subnet 172.20.0.0/16 mon-reseau
Connecter un conteneur à un réseaudocker network connect mon-reseau mon-nginx
Déconnecter un conteneurdocker network disconnect mon-reseau mon-nginx
Inspecter un réseaudocker network inspect mon-reseau
Supprimer les réseaux inutilisésdocker network prune

Docker Compose

DescriptionCommande
Démarrer tous les servicesdocker compose up -d
Démarrer et rebuilder les imagesdocker compose up -d --build
Arrêter les services (garde les volumes)docker compose down
Arrêter et supprimer les volumesdocker compose down -v
Voir les logs de tous les servicesdocker compose logs -f
Logs d'un service spécifiquedocker compose logs -f web
Statut des servicesdocker compose ps
Shell dans un servicedocker compose exec web bash
Redémarrer un servicedocker compose restart web
Scaler un servicedocker compose up -d --scale web=3
Voir la config compiléedocker compose config
Valider le fichier composedocker 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

DescriptionCommande
Espace disque utilisé par Dockerdocker system df
Détail de l'espace par ressourcedocker system df -v
Supprimer toutes les ressources inutiliséesdocker 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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic