Lors du processus d'utilisation de Docker pour le déploiement de conteneurs, un problème courant est de savoir comment communiquer entre différents conteneurs. Surtout lorsque les noms de domaine de ces conteneurs sont différents, comment les laisser se trouver et interagir devient un problème qui doit être résolu.
Cet article présentera comment implémenter la communication entre des conteneurs avec des noms de domaine différents dans Docker. Tout d’abord, nous devons comprendre le modèle de réseau de Docker.
Modèle de réseau de Docker
Docker prend en charge plusieurs modèles de réseau, notamment le mode Pont, le mode Hôte, le mode Superposition, le mode MACVLAN, etc. Parmi eux, le plus utilisé dans le déploiement conteneurisé est le mode Bridge.
En mode Bridge, Docker créera un pont virtuel pour chaque conteneur et attribuera une adresse IP à chaque conteneur. Ces conteneurs peuvent communiquer via ce pont virtuel. Dans le même temps, Docker prend également en charge la connexion des conteneurs au même pont réseau défini par l'utilisateur, afin qu'ils puissent communiquer directement via ce pont réseau défini par l'utilisateur.
Cependant, dans les applications pratiques, nous avons constaté que le problème à résoudre est de savoir comment permettre aux conteneurs de se trouver et d'interagir lorsque leurs noms de domaine sont différents.
Solution
Afin de résoudre le problème des différents noms de domaine entre conteneurs, nous pouvons utiliser le service DNS.
Le propre service DNS de Docker
Docker est livré avec un service DNS qui peut effectuer la résolution de noms de domaine pour les conteneurs. Chaque conteneur envoie une requête DNS à un serveur DNS attribué par Docker et utilise le nom du conteneur comme nom d'hôte dans la résolution DNS.
Par exemple, dans un réseau Docker, il existe deux conteneurs web1 et web2. Leurs adresses IP sont respectivement 172.17.0.2 et 172.17.0.3. Si nous utilisons le mode Bridge par défaut, Docker attribuera un nom de domaine aux deux conteneurs, et ce nom de domaine pourra être utilisé pour communiquer lors de l'accès au sein du conteneur. Le format de ce nom de domaine est une combinaison du nom du conteneur et du nom du réseau Docker, similaire à web1_default et web2_default. Ici, la valeur par défaut est le nom du réseau Docker.
Donc, si nous utilisons la commande ping dans web1 pour tester la connectivité de web2, nous pouvons utiliser la commande suivante :
ping web2_default
Cette commande enverra une requête DNS au serveur DNS attribué par Docker et la résoudra en utilisant web2_default comme paramètre nom d'hôte.
Service DNS personnalisé
Si vous souhaitez personnaliser le service DNS, vous pouvez utiliser l'option --dns de Docker pour spécifier l'adresse du serveur DNS. Par exemple, si nous voulons utiliser le serveur DNS public de Google 8.8.8.8, nous pouvons démarrer le conteneur avec la commande suivante :
docker run --dns 8.8.8.8 myimage
Cela utilisera 8.8.8.8 comme serveur DNS par défaut pour le conteneur. À l'intérieur du conteneur, ce serveur DNS peut être utilisé pour résoudre les noms de domaine.
Si nous souhaitons utiliser un DNS personnalisé dans un conteneur Docker, nous pouvons créer un Dockerfile et ajouter la configuration DNS personnalisée au conteneur. Par exemple, dans Ubuntu, vous pouvez utiliser la commande suivante pour modifier le fichier de configuration DNS :
RUN echo 'nameserver 8.8.8.8' > /etc/resolv.conf
Cela ajoutera l'adresse du serveur DNS au fichier /etc/resolv.conf dans le conteneur. À l'intérieur du conteneur, ce serveur DNS peut être utilisé pour résoudre les noms de domaine.
Résumé
Implémenter la communication entre des conteneurs avec des noms de domaine différents dans Docker est un problème qui doit être résolu. En utilisant le propre service DNS de Docker ou un service DNS personnalisé, nous pouvons facilement résoudre ce problème et permettre une communication fluide entre les conteneurs. Dans le même temps, pour la sécurité du réseau, nous pouvons également personnaliser les services DNS pour améliorer la sécurité et protéger les données sensibles dans les conteneurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!