Astuces & Hacks Docker Pro
Fonctionnalités avancées de Docker qui vous feront gagner des heures de travail.
Astuce 1: Scaffolding Instantané (docker init)
Arrêtez d'écrire des Dockerfiles from scratch. Laissez Docker les générer pour vous.
Ce que ça fait:
- Détecte le langage de votre projet (Python, Node, Go, Rust, etc.)
- Génère un
Dockerfileoptimisé avec les bonnes pratiques - Crée un
compose.yamlpour le développement local - Ajoute un fichier
.dockerignore
Exemple de sortie:
? What application platform does your project use? Python
? What version of Python? 3.11
? What port does your server listen on? 8000
✔ Created Dockerfile
✔ Created compose.yaml
✔ Created .dockerignore
Fonctionne avec les projets existants
Exécuter docker init dans n'importe quel répertoire de projet existant. Il analyse votre code et génère les configs appropriées.
Astuce 2: Hot Reloading (docker compose watch)
Remplacer les montages de volumes complexes par une synchronisation de fichiers native pour le développement.
Configuration compose.yaml:
services:
web:
build: .
ports:
- "3000:3000"
develop:
watch:
# Synchroniser les fichiers sans rebuild
- action: sync
path: ./src
target: /app/src
# Synchroniser et redémarrer le container
- action: sync+restart
path: ./config
target: /app/config
# Rebuild lors de changements de dépendances
- action: rebuild
path: ./package.json
Actions expliquées:
| Action | Comportement |
|---|---|
sync |
Copier les fichiers vers le container (hot reload) |
sync+restart |
Copier les fichiers et redémarrer le container |
rebuild |
Déclencher un rebuild complet de l'image |
Remplace les bind mounts
docker compose watch est plus propre que les montages de volumes pour le développement:
- Pas de problèmes de permissions
- Meilleures performances sur macOS/Windows
- Synchronisation sélective (ignorer node_modules)
Astuce 3: Déboguer Distroless (docker debug)
Problème: Votre container de production n'a pas de shell, pas de bash, pas d'outils. Comment déboguer?
# Ça échoue sur les images distroless/minimales
docker exec -it mon-container /bin/sh
# Error: executable file not found
Solution: Docker Debug attache un toolkit de débogage.
Ce que vous obtenez:
- Accès shell complet (même sur distroless)
- vim, curl, wget, netcat pré-installés
- Outils d'inspection de processus
- Utilitaires de débogage réseau
# Déboguer un container en cours d'exécution
docker debug mon-api-container
# Déboguer avec une image spécifique comme toolkit
docker debug --shell bash mon-container
# Déboguer un container arrêté
docker debug --platform linux/amd64 mon-container
Comment ça marche
Docker Debug crée un container sidecar qui partage les namespaces du container cible (PID, réseau, filesystem) sans modifier l'image originale.
Astuce 4: Scan de Sécurité (docker scout)
Scan CVE intégré et recommandations de remédiation.
Aperçu Rapide des Vulnérabilités
# Scanner l'image du répertoire actuel
docker scout quickview
# Scanner une image spécifique
docker scout quickview nginx:latest
# Exemple de sortie:
# Target │ nginx:latest
# Digest │ sha256:abc123...
# Base Image │ debian:bookworm-slim
#
# Vulnerabilities
# Critical: 2
# High: 5
# Medium: 12
Obtenir les Recommandations de Correctifs
# Obtenir les recommandations de mise à jour
docker scout recommendations nginx:latest
# Exemple de sortie:
# Recommended fixes:
# ✓ Update base image from debian:bookworm-slim to debian:bookworm-slim@sha256:...
# Fixes: CVE-2024-1234 (Critical), CVE-2024-5678 (High)
Comparer les Images
# Comparer deux versions d'image
docker scout compare nginx:1.24 nginx:1.25
# Voir ce qui a changé (nouvelles CVE, CVE corrigées)
Intégration CI/CD
Ajouter Scout à votre pipeline pour faire échouer les builds sur des CVE critiques:
Astuce 5: Applications GUI dans les Containers (Forwarding X11)
Exécuter des applications graphiques (navigateurs, IDEs, jeux) dans des containers.
Configuration Linux
# Autoriser les connexions X11
xhost +local:docker
# Exécuter Firefox dans un container
docker run -it --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--network host \
jess/firefox
Configuration macOS (XQuartz)
# 1. Installer XQuartz
brew install --cask xquartz
# 2. Activer les connexions réseau dans les préférences XQuartz
# XQuartz → Preferences → Security → "Allow connections from network clients"
# 3. Redémarrer et autoriser les connexions
xhost +localhost
# 4. Exécuter avec DISPLAY pointant vers l'hôte
docker run -it --rm \
-e DISPLAY=host.docker.internal:0 \
jess/firefox
Configuration Windows (VcXsrv)
# 1. Installer VcXsrv
# 2. Lancer XLaunch avec "Disable access control" coché
# 3. Exécuter le container
docker run -it --rm `
-e DISPLAY=host.docker.internal:0 `
jess/firefox
Containers GUI Populaires
jess/firefox- Navigateur Firefoxlinuxserver/firefox- Firefox avec VNClinuxserver/chromium- Navigateur Chromiumkasmweb/*- Isolation de navigateur (entreprise)
Astuce 6: Vitesse Multi-Arch (docker build --builder cloud)
Problème: Builder des images x86/amd64 sur Apple Silicon (ARM) est très lent à cause de l'émulation QEMU.
Solution: Délocaliser les builds vers Docker Build Cloud.
# Créer un cloud builder
docker buildx create --driver cloud myorg/mybuilder
# Builder en utilisant le cloud (vitesse native pour toutes les architectures)
docker build --builder cloud-myorg-mybuilder \
--platform linux/amd64,linux/arm64 \
-t myapp:latest .
Avantages
| Build Local (Émulé) | Build Cloud (Natif) |
|---|---|
| 10-20 minutes | 1-2 minutes |
| CPU à 100% | CPU local inactif |
| Une arch à la fois | Multi-arch parallèle |
Configuration
# Se connecter à Docker Hub
docker login
# Créer un cloud builder (nécessite un abonnement Docker)
docker buildx create --driver cloud <org>/<builder-name>
# L'utiliser
docker buildx use cloud-<org>-<builder-name>
Free Tier Disponible
Docker Build Cloud a un tier gratuit avec des minutes de build limitées. Parfait pour des builds multi-arch occasionnels.
Bonus: Référence Rapide
# Nettoyer tout (récupérer de l'espace disque)
docker system prune -a --volumes
# Voir l'utilisation des ressources en temps réel
docker stats
# Copier des fichiers depuis un container
docker cp container:/path/file ./local/
# Exporter le filesystem d'un container
docker export container > container.tar
# Inspecter les couches d'une image
docker history --no-trunc myimage
# Exécuter une commande ponctuelle dans un nouveau container
docker run --rm -it alpine sh