Docker Networks : des réseaux dans les containers

On utilise les réseaux de Docker pour mettre des conteneurs dans un espace commun où ils pourront voir certaines adresses et certains ports.

Il existe plusieurs techniques pour faire communiquer des conteneurs avec d’autres conteneurs sur l’hôte ou sur le réseau.

Voici celles qui nous concernent:

  • bridge: Cela permet de faire communiquer deux conteneurs sur le même hôte et sur le même démon docker.
  • host: le conteneur utilise la carte de l’hôte comme n’importe quel programme tournant sur cet hôte
  • overlay: relie plusieurs démons docker et permet aux conteneurs dans ces démons de communiquer comme s’ils étaient sur le même démon hôte (l’équivalent du bridge, la solution par défaut quand tous les conteneurs sont sur le même démon hôte)
  • macvlan : donne une adresse mac sur le réseau local de l’hôte (crée virtuellement une carte réseau sur le réseau de l’hôte) et par conséquent permet l’attribution d’une adresse IP propre, comme si le conteneur était une machine à part.

Note:

En pratique, on crée rarement des réseaux à la main, et on exploite les fichiers Compose.

On crée un bridge sur un hôte avec

docker network create mon-beau-reso

Les conteneurs peuvent être assignés à un bridge lors de leur création, mais ils peuvent aussi être mis dans un bridge ou retirés d’un bridge à la volée, c’est-à-dire pendant leur exécution. Ici, on crée un conteneur nginx, on le met dans mon-beau-reso (tous ses ports seront accessibles aux autres conteneurs de ce bridge) et on publie son port 80 sur le port 8080 de son hôte:

docker create --name mon-moteur-x \
  --network mon-beau-reso \
  --publish 8080:80 \
  nginx:latest

Ici, en supposant que le conteneur mon-moteur-x ait déjà été créé mais pas encore relié au bridge mon-beau-reso:

docker network connect mon-beau-reso mon-moteur-x

Pour plus d’infos sur les opérations sur des bridges, voir la documentation officielle de docker sur les bridge.

  • technique/docker/general/network.1602607709.txt.gz
  • de qduchemi