Intermédiaire55 min40 XP
Objectifs de cette leçon
- Créer et gérer des réseaux Docker
- Connecter des conteneurs entre eux
- Comprendre la résolution de noms DNS
Réseaux Docker 🌐
Comment les conteneurs communiquent
Par défaut, Docker crée un réseau bridge où chaque conteneur a sa propre IP :
┌──────────────────────────────────────────────┐ │ Réseau bridge (docker0) │ │ │ │ ┌───────────┐ ┌───────────┐ │ │ │ Conteneur │ │ Conteneur │ │ │ │ webapp │ │ postgres │ │ │ │ 172.17.0.2│ │ 172.17.0.3│ │ │ └─────┬─────┘ └─────┬─────┘ │ │ │ │ │ │ └────────┬───────┘ │ │ │ │ │ docker0 │ │ 172.17.0.1 │ └──────────────────────────────────────────────┘ ↕ Internet
Les types de réseaux
| Réseau | Description | Cas d'usage |
|---|---|---|
| bridge | Réseau par défaut | Conteneurs sur la même machine |
| host | Réseau de l'hôte | Performance maximale |
| none | Pas de réseau | Sécurité maximale |
| overlay | Réseau multi-hôte | Docker Swarm |
| macvlan | Assignation MAC | Réseau physique |
Créer et gérer des réseaux
# Lister les réseaux docker network ls # Résultat : # NETWORK ID NAME DRIVER SCOPE # a1b2c3d4e5f6 bridge bridge local # f6e5d4c3b2a1 host host local # 1a2b3c4d5e6f none null local # Créer un réseau docker network create mon-reseau # Créer avec des options docker network create \ --driver bridge \ --subnet 192.168.1.0/24 \ --gateway 192.168.1.1 \ mon-reseau # Supprimer un réseau docker network rm mon-reseau
Connecter des conteneurs au même réseau
# Créer un réseau dédié docker network create app-network # Lancer PostgreSQL sur ce réseau docker run -d \ --name postgres \ --network app-network \ -e POSTGRES_PASSWORD=secret \ postgres:15-alpine # Lancer Node.js sur le même réseau docker run -d \ --name mon-app \ --network app-network \ -p 3000:3000 \ mon-app # → mon-app peut accéder à postgres via le nom "postgres" # → Pas besoin d'IP, le DNS résout le nom !
Communication par nom (DNS)
Dans un réseau Docker, les conteneurs se communicate par nom :
# Dans le conteneur mon-app : ping postgres # Résout l'IP de postgres curl http://postgres:5432 # Accède à PostgreSQL # Pas besoin de connaître l'IP !
Exemple Node.js + PostgreSQL
// config/database.js const { Pool } = require('pg'); const pool = new Pool({ host: 'postgres', // ← nom du conteneur Docker port: 5432, database: 'mabase', user: 'postgres', password: 'secret', });
Inspecter un réseau
docker network inspect app-network # Résultat (extrait) : # { # "Name": "app-network", # "Driver": "bridge", # "Containers": { # "abc123": { "Name": "mon-app", "IPv4Address": "172.18.0.2/16" }, # "def456": { "Name": "postgres", "IPv4Address": "172.18.0.3/16" } # } # }
Bonnes pratiques
| Pratique | Pourquoi |
|---|---|
| Créer un réseau par application | Isolation entre applications |
| Utiliser les noms de conteneurs | DNS automatique par Docker |
| Ne pas exposer les ports en prod | Sécurité |
| Utiliser un réseau bridge par défaut | La plupart des cas |
Exercices 🎯
- Réseau : Créez un réseau, lancez deux conteneurs dessus, vérifiez qu'ils peuvent se pinguer.
- DNS : Dans un conteneur Node.js, accédez à un conteneur PostgreSQL via son nom.
- Isolation : Lancez deux applications sur des réseaux différents. Peuvent-elles se communiquer ?
Prochaine leçon : Écrire un Dockerfile.
Réseau Docker
Cliquez pour suivre le trafic
🌐 Navigateur
localhost:8080
🖥️ Frontend (React)
3000
⚙️ API (Laravel)
8000
🗄️ Base de données
MySQL:3306