Passer au contenu principal

Compose (Docker)

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éseau

L'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-net
networks:
  shared-net:
    external: true

Utile 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 fixe

Volume externe

docker volume create pgdata-prod
volumes:
  pgdata-prod:
    external: true   # Compose ne crée ni ne supprime ce volume

Volume 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
          - postgres

Permet 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).