4.5 KiB
\newpage
Lier les conteneurs
Partager des fichiers est une chose, mais ce n'est pas une manière d'échanger de l'information instantanément : les sockets et le réseau restent plus adaptés à ce genre d'échanges.
Les pilotes réseau
Docker propose de base trois pilotes (drivers) pour « gérer » cela :
none
: pour limiter les interfaces réseau du conteneur à l'interface de loopbacklo
;host
: pour partager la pile réseau avec l'hôte ;bridge
: pour créer une nouvelle pile réseau par conteneur et rejoindre un pont réseau dédié.
Ces trois drivers sont instanciés de base dans Docker avec le même nom que leur pilote. Pour consulter la liste de réseaux utilisables, lancez :
Par défaut, c'est le réseau bridge
(de type bridge
) qui est employé : ce
réseau utilise le pont docker0
que vous pouvez voir dans vos interfaces
réseau via ip link
. C'est via ce pont que les conteneurs peuvent avoir accès
à Internet, au travers d'une couche de NAT.
Pour changer le réseau principal joint par le conteneur, utiliser l'option
--network
du docker container run
.
Le réseau host
En utilisant ce réseau, vous abandonnez tout isolation sur cette partie du
conteneur et partagez donc avec l'hôte toute sa pile IP. Cela signifie, entre
autre, que les ports que vous chercherez à allouer dans le conteneur devront
être disponibles dans la pile de l'hôte et également que tout port allouer sera
directement accessible, sans avoir à utiliser l'option -p
du run
.
Créer un nouveau réseau bridge
Afin de contrôler quels échanges peuvent être réalisé entre les conteneurs, il est recommandé de créer des réseaux utilisateur.
La création d'un réseau se fait tout simplement au travers des sous-commandes
relatives aux objets Docker network
:
C'est ensuite ce nom de réseau que vous passerez à l'option --network
de vos
run
, ou vous pouvez également faire rejoindre un conteneur déjà lancé à un
réseau :
Lorsque plusieurs conteneurs ont rejoints un réseau utilisateur, ils peuvent mutuellement se découvrir grâce à un système de résolution de nom basé sur leur nom de conteneur.
Exercice
Lancez votre serveur web avec :
Puis créez un réseau utilisateur, rejoignez-le et lancez un conteneur dans le même réseau utilisateur. Vous devriez être capable de lancer dans ce conteneur les commandes :
Liaison à l'ancienne
Les réseaux utilisateurs sont la manière à privilégier lorsque l'on souhaite que deux conteneurs puissent discuter entre-eux.
Avant que cela n'existe, une fonctionnalité de liaison existait. Moins puissante que les réseaux et plus contraignante car elle nécessite de gérer l'ordre dans lequel les conteneurs sont lancés, elle permet néanmoins de partager en plus les variables d'environnements du conteneur lié.
Par exemple, pour lancer un conteneur postgresql
, il faut lui préciser au
moins le mot de passe à utiliser via la variable d'environnement
POSTGRES_PASSWORD
1 :
Le lien permet de fournir à n'importe quel autre conteneur les mêmes variables d'environnement. Cela évite d'avoir à recopier le mot de passe pour lancer un conteneur qui en dépendrait. Comme par exemple dans le cas d'un serveur web qui doit se connecter à une base de données : l'application doit être configurée pour utiliser le mot de passe défini au lancement du conteneur de base de données :
-
l'ensemble des variables que peut prendre le conteneur est disponible sur la page dédiée à l'image sur le store : https://store.docker.com/images/postgres ↩︎