1. Architecture réseau Docker
Docker dispose de son propre sous-système réseau. Chaque conteneur possède une interface réseau virtuelle connectée à un réseau Docker.
# Réseaux créés par défaut à l'installation
docker network ls
NETWORK ID NAME DRIVER SCOPE
abc123 bridge bridge local ← réseau par défaut
def456 host host local
ghi789 none null local
2. Drivers réseau
| Driver | Description | Cas d'usage |
|---|---|---|
bridge | Réseau virtuel privé sur l'hôte | Défaut — conteneurs isolés sur une même machine |
host | Partage le réseau de l'hôte | Hautes performances, sans isolation réseau |
none | Aucun réseau | Isolation complète, calcul offline |
overlay | Réseau multi-hôtes (Docker Swarm) | Orchestration distribuée |
macvlan | Adresse MAC propre sur le réseau physique | Accès réseau physique direct |
3. Bridge network (réseau personnalisé)
Créer un réseau bridge personnalisé au lieu d'utiliser le réseau bridge par défaut permet la résolution DNS par nom entre conteneurs.
# Créer un réseau bridge
docker network create mon-reseau
# Avec options
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
--gateway 172.20.0.1 \
app-network
# Connecter un conteneur au démarrage
docker run -d \
--name api \
--network app-network \
monapi:latest
# Connecter un conteneur existant
docker network connect app-network db-container
# Déconnecter
docker network disconnect app-network db-container
4. DNS inter-conteneurs
Sur un réseau bridge personnalisé, les conteneurs se trouvent par leur nom (pas besoin de connaître l'IP) :
# Créer réseau et deux conteneurs
docker network create app-net
docker run -d --name database --network app-net postgres
docker run -d --name api --network app-net \
-e DB_HOST=database \ # ← nom DNS = nom du conteneur !
monapi
# L'API peut pinguer la base avec son nom
docker exec api ping database # fonctionne !
docker exec api ping 172.x.x.x # aussi, mais non recommandé
Réseau bridge par défaut vs personnalisé : Sur le réseau
bridge par défaut,
la résolution DNS par nom ne fonctionne PAS. Toujours créer un réseau personnalisé pour les projets.
5. Commandes réseau
docker network ls # Lister
docker network inspect app-net # Détails JSON
docker network create app-net # Créer
docker network rm app-net # Supprimer
docker network connect app-net mon-conteneur # Connecter
docker network disconnect app-net ct # Déconnecter
docker network prune # Supprimer inutilisés
# Mode host : le conteneur partage le réseau de l'hôte
docker run --network host nginx
# Mode none : isolation totale
docker run --network none monapp
6. Isolation et sécurité réseau
# Architecture typique à 3 tiers
docker network create frontend-net # nginx ↔ api
docker network create backend-net # api ↔ db
docker run -d --name nginx --network frontend-net nginx
docker run -d --name api --network frontend-net monapi
docker network connect backend-net api # api sur les 2 réseaux
docker run -d --name db --network backend-net postgres
# nginx NE PEUT PAS atteindre db directement → isolation !