Docker propose 6 drivers réseau natifs, chacun adapté à un cas d’usage spécifique. Le choix du bon réseau impacte directement la sécurité, les performances et la facilité de maintenance de vos applications conteneurisées.
Ces modes réseau permettant de contrôler l’isolation, la performance, et la manière dont les conteneurs communiquent entre eux ou avec l’extérieur. Chaque type répond à un besoin précis : développement, production distribuée, intégration dans un réseau physique, sécurité, etc.
| Type | Isolation | Performance | Multihôtes | Cas d’usage principal |
|---|---|---|---|---|
| Bridge | ✓ Bonne | Bonne | ✗ Non | Développement, apps multiconteneurs |
| Host | ✗ Aucune | ⚡ Maximale | ✗ Non | Performance critique, monitoring |
| Overlay | ✓ Bonne | Bonne | ✓ Oui | Production distribuée, Swarm |
| Macvlan | ✓ Excellente | ⚡ Très bonne | ✗ Non | Applications legacy, intégration réseau physique |
| Ipvlan | ✓ Excellente | ⚡ Très bonne | ✗ Non | Environnements avec restrictions MAC |
| None | 🔒 Totale | N/A | ✗ Non | Sécurité maximale, jobs batch |
Le mode bridge est utilisé automatiquement lorsque tu crées un conteneur sans préciser de réseau.
⚠️ Attention - Réseau bridge par défaut
Le bridge par défaut (docker0) ne permet pas la résolution DNS par nom parce qu’il n’a pas de DNS interne. Vous devez utiliser les adresses IP, ce qui rend votre configuration fragile. Les réseaux bridge personnalisés créés avec docker network create ont un DNS interne permettant la résolution par nom.
Créez toujours un bridge personnalisé pour vos applications
Le conteneur partage directement la pile réseau de l’hôte.
Permets à des conteneurs situés sur plusieurs serveurs de communiquer comme s’ils étaient sur le même réseau.
Le conteneur apparaît comme une machine physique sur le réseau.
Similaire à Macvlan, mais gère différemment les adresses MAC.
docker run --network bridge nginx
docker run --network host nginx
docker run --network none nginx
docker run --network my-macvlan nginx
Pour overlay, macvlan, ipvlan, tu dois créer le réseau avant :
docker network create -d macvlan my-macvlan -o parent=eth0
docker run --network my-macvlan nginx
Le bridge par défaut n’est pas configurable, pas sécurisé et ne met pas à jour proprement les tables DNS. C’est pour une de ces raisons qu’on n’utilise jamais le bridge par défaut en production
# Création d'un bridge personnalisé
docker network create --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1 app_network
# Lancez la base de données sur ce réseau sur une ip fixe
docker run -d --name db --network app_network --ip 10.10.0.100 -e POSTGRES_PASSWORD=secret postgres:15
# Lancez l'application web sur le même réseau sur une ip dynamique
docker run -d --name webapp --network app_network -p 8080:80 -e DATABASE_HOST=db mon_app_web
# Vérifiez la communication - Depuis le conteneur webapp, pingez la DB par son nom
docker exec webapp ping -c 3 db
# Voir les réseaux d'un conteneur
docker inspect -f '{{json .NetworkSettings.Networks}}' mon_conteneur | jq # jq est la commande pour indenter le retour json
# Tester la connectivité depuis un conteneur
docker exec mon_conteneur ping -c 3 autre_conteneur
docker exec mon_conteneur nslookup autre_conteneur # attention, l'image doit contenir l'application nslookup, sinon il faut l'installer sur le conteneur
# Voir les règles iptables Docker
sudo iptables -L -n -t nat | grep -i docker
# Inspecter le bridge Docker
docker network inspect bridge
# Logs du daemon Docker (problèmes réseau)
journalctl -u docker.service | grep -i network