Comment exécuter plusieurs conteneurs Docker sur différentes adresses IP
Docker facilite l’exécution d’applications à l’aide de solutions cloud sans serveur, mais de nombreuses personnes préféreront gérer plusieurs conteneurs exécutés sur quelques machines puissantes. Dans ce cas, l’utilisation de plusieurs adresses IP peut être un excellent moyen de gérer plusieurs services sur le même port.
Sommaire
Comment fonctionnent les interfaces réseau ?
Linux utilise des interfaces réseau pour représenter le matériel physique, ainsi que pour créer des composants de réseau virtuels tels que des VLAN, des ponts ou des alias. Si vous répertoriez tous les périphériques de votre système avec ip addr show
vous trouverez diverses interfaces comme eth0
et eno1
qui représentent des connexions réelles.
Les adresses IP sont un système distinct des interfaces réseau, mais essentiellement, vous pouvez avoir plusieurs adresses IP configurées sur une seule interface, ce qui vous permet de lier des services à des sockets réseau pour chaque IP:PORT
combinaison.
Cela fonctionne bien avec Docker, qui vous permet de gérer la mise en réseau au niveau Docker plutôt qu’au niveau de l’application. Avec Docker, l’application à l’intérieur du conteneur peut simplement se lier au « port 80 », qui est mappé par Docker à une adresse IP spécifique sur l’hôte.
Cela facilite grandement la séparation de la couche application de l’hôte qui l’exécute. Par exemple, vous pouvez avoir plusieurs services d’API différents s’exécutant tous sur la même machine, sans configurer les conteneurs sous-jacents.
Peu importe pour Docker l’interface système sur laquelle se trouve l’adresse IP, car le réseau interne de Docker s’en chargera pour vous, tant que vous lancez les conteneurs avec la configuration correcte.
Exécution de plusieurs Docker Services sur le même serveur
Exécuter un conteneur sur une adresse spécifique est assez simple, selon la façon dont vous le lancez. Essentiellement, la plupart des conteneurs Docker ont leurs ports configurés avec le host:container
format. Par exemple, 5000:80
prendrait le port 80 du conteneur et le rendrait disponible à partir du port 5000 de l’hôte.
Cependant, vous pouvez réellement lier les sockets directement, c’est-à-dire au lieu de 5000
vous pouvez substituer un IP:PORT
paire, en utilisant trois deux-points pour l’ensemble de la liaison :
docker run -it -d ipaddress:hostport:containerport --name web nginx
Ainsi, par exemple, vous pourriez avoir deux conteneurs NGINX sur des adresses IP différentes, comme ceci (gardez à l’esprit que Docker a besoin de noms de conteneurs distincts) :
docker run -it -d 123.0.0.1:80:80 --name web nginx docker run -it -d 123.0.0.2:80:80 --name web2 nginx
Si vous utilisez Docker Compose, la configuration est similaire. Dans le ports
section pour le service, vous pouvez utiliser la même syntaxe pour vous lier à des adresses particulières.
version: "3" services: nginx: image: nginx restart: always ports: - "123.0.0.1:80:80"
Dans les deux cas, vous pouvez créer plusieurs services liés au port hôte 80, tant que les services n’écoutent pas sur les mêmes adresses IP.
Si vous faites cela, cependant, vous voudrez vous assurer qu’aucun conteneur n’écoute sur juste le port – ce sera une mauvaise configuration, car omettre l’adresse IP signifiera qu’il écoutera sur toutes les adresses de cette interface.
Comment obtenez-vous plusieurs adresses IP ?
La plupart des serveurs sont livrés avec une seule adresse IP, vous devrez donc peut-être en configurer vous-même d’autres.
La configuration de plusieurs adresses IP par serveur dépendra de l’hôte que vous utilisez. Par exemple, AWS propose son service « Elastic IP », dont l’utilisation est gratuite si vous utilisez une adresse IP par machine. Toutefois, si vous souhaitez acheter des adresses IP Elastic supplémentaires, vous pouvez les associer à n’importe quel serveur. Vous paierez 3,65 $ par mois pour chacun.
Certains services vous permettront de faire un achat ponctuel d’adresses IP, comme OVH, qui permet des achats de blocs jusqu’à la taille /24.
Si vous souhaitez acheter de grands blocs d’adresses IP contigus que vous possédez réellement, vous pouvez le faire par l’intermédiaire de divers courtiers, bien que cela entraîne généralement des frais importants et concerne principalement les grandes organisations.
Une fois que vous avez les adresses IP, c’est à votre fournisseur de cloud de les faire pointer vers votre adresse. Cependant, c’est à vous de configurer votre interface réseau pour l’utiliser, à l’aide d’un outil comme netplan
.