Les adresses IP statiques ne changent pas lorsque les conteneurs ou les services sont arrêtés et démarrés, ce qui les rend utiles pour la mise en réseau permanente. L'attribution d'adresses IP statiques aux conteneurs Docker est un moyen simple de les rendre plus accessibles.
Pourquoi utiliser une adresse IP statique ?
Il existe deux types d'"IP statiques" ; les adresses IP privées utilisées pour la mise en réseau interne à l'intérieur d'un serveur et les adresses IP publiques utilisées pour se connecter à l'extérieur du serveur, souvent via Internet.
Si vous devez configurer une adresse IP publique pour un conteneur, vous souhaiterez utiliser des liaisons de port. Vous pouvez « publier » des ports sur le conteneur Docker pour qu'ils soient accessibles depuis l'hôte. Bien qu'il existe des configurations réseau plus avancées, c'est de loin la plus simple et la plus courante. Par exemple, lier le port 80 (HTTP) sur l'hôte pour qu'il pointe vers un conteneur NGINX :
docker run --publish=80:8080 nginx
Si vous souhaitez créer une adresse IP privée statique, vous devez déterminer si vous devez en utiliser une. La plupart du temps, vous souhaiterez qu'une adresse IP statique communique avec un conteneur à partir d'un autre ou à partir de l'hôte. Dans la plupart des cas, la mise en réseau intégrée de Docker peut gérer cela.
Docker est livré avec un réseau par défaut, mais si vous créez le vôtre, vous pouvez attribuer des alias aux conteneurs lorsqu'ils sont lancés sur ce réseau. Cet alias se résoudra automatiquement à l'adresse IP privée du conteneur. Par exemple, le conteneur NGINX ici peut accéder à l'instance MongoDB avec la chaîne de connexion mongodb://mongohost:27017
.
docker network create example docker run --net example --name nginx -d nginx docker network connect example --alias mongohost mongodb
Pour en savoir plus, vous pouvez lire la documentation de Docker sur les réseaux de ponts définis par l'utilisateur.
Cependant, il y a encore de nombreuses fois où vous voudrez spécifier manuellement une adresse IP privée, comme accéder aux conteneurs directement depuis l'hôte. Vous devrez toujours utiliser un réseau Docker personnalisé pour ce faire, mais il est facile à configurer.
Configurer des adresses IP statiques
Tout d'abord, vous devrez configurer un réseau Docker, et puisque nous nous soucions de l'adresse IP, vous devrez spécifier un sous-réseau fixe :
docker network create --subnet=172.20.0.0/16 customnetwork
CONNEXE : Que sont les sous-réseaux et comment affectent-ils mon réseau ?
Ensuite, vous pouvez exécuter un conteneur, en spécifiant le réseau avec le --net
drapeau, et en spécifiant l'IP avec le -ip
drapeau :
docker run --net customnetwork --ip 172.20.0.10 -d container
Vous pouvez vérifier que l'adresse est correcte en la vérifiant dans le conteneur avec exec -t bin/bash
, ou en inspectant la liste des conteneurs Docker :
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' name_or_id
Utiliser Docker Compose
Docker Compose est un outil utilisé pour lancer plusieurs conteneurs avec des paramètres prédéfinis. Cela inclut la configuration de réseaux avec des sous-réseaux spécifiques, et vous pouvez attacher des conteneurs à des réseaux avec des adresses IP fixes à l'aide de l'ipv4_address
bloc de configuration affiché ici :
version: '2' services: webserver: image: nginx container_name: web-server networks: customnetwork: ipv4_address: 172.20.0.10 networks: customnetwork: ipam: config: - subnet: 172.20.0.0/16