0 XP
?
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éseauDescriptionCas d'usage
bridgeRéseau par défautConteneurs sur la même machine
hostRéseau de l'hôtePerformance maximale
nonePas de réseauSécurité maximale
overlayRéseau multi-hôteDocker Swarm
macvlanAssignation MACRé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

PratiquePourquoi
Créer un réseau par applicationIsolation entre applications
Utiliser les noms de conteneursDNS automatique par Docker
Ne pas exposer les ports en prodSécurité
Utiliser un réseau bridge par défautLa plupart des cas

Exercices 🎯

  1. Réseau : Créez un réseau, lancez deux conteneurs dessus, vérifiez qu'ils peuvent se pinguer.
  2. DNS : Dans un conteneur Node.js, accédez à un conteneur PostgreSQL via son nom.
  3. 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
HTTP :8080API :8000MySQL :3306
🌐 Navigateur
localhost:8080
🖥️ Frontend (React)
3000
⚙️ API (Laravel)
8000
🗄️ Base de données
MySQL:3306