Compose : réseaux et volumes
Compose crée automatiquement un réseau par défaut pour chaque projet. Mais dès qu'une architecture dépasse quelques services — ou qu'on veut isoler des services entre eux — il faut prendre la main sur la configuration réseau et volume.
Réseaux dans Compose
services:
nginx:
networks:
- frontend
- backend
api:
networks:
- backend
- db-net
db:
networks:
- db-net
networks:
frontend:
driver: bridge
backend:
driver: bridge
db-net:
driver: bridge
internal: true # pas d'accès Internet depuis ce réseauL'option internal: true coupe l'accès Internet depuis le réseau — recommandé pour les bases de données. nginx voit api, api voit db, nginx ne voit pas db directement.
Réseau externe (partagé entre projets)
docker network create shared-netnetworks:
shared-net:
external: trueUtile pour faire communiquer des applications déployées dans des projets Compose distincts (ex: reverse proxy dans un projet, applications dans d'autres).
Volumes dans Compose
services:
db:
volumes:
- pgdata:/var/lib/postgresql/data
backup:
volumes:
- pgdata:/backup/source:ro # même volume, lecture seule
volumes:
pgdata:
driver: local
driver_opts:
type: none
o: bind
device: /srv/postgres/data # chemin hôte fixeVolume externe
docker volume create pgdata-prodvolumes:
pgdata-prod:
external: true # Compose ne crée ni ne supprime ce volumeVolume NFS dans Compose
volumes:
shared-storage:
driver: local
driver_opts:
type: nfs
o: "addr=192.168.1.10,nfsvers=4,rw"
device: ":/srv/nfs/shared"Aliases réseau
services:
db-primary:
networks:
backend:
aliases:
- db # accessible sous le nom "db" sur ce réseau
- postgresPermet de renommer un service sur le réseau sans changer son nom Compose, utile lors de migrations (renommer database en db-primary sans casser les autres services).