Cet article présente principalement Docker la connexion multi-conteneurs (en prenant Tomcat+Mysql comme exemple) Docker fournit une méthode d'accès direct par plusieurs conteneurs, qui permet à plusieurs conteneurs d'accéder directement à eux. accès Accès via les ports réseau
Docker fournit une méthode d'accès direct par plusieurs conteneurs. Le moyen le plus simple consiste à utiliser directement le paramètre -p de mappage de port pour spécifier le port mappé ou -P pour mapper tous les ports. Accédez directement via le port réseau pour l'accès.
Mais la méthode de mappage des ports réseau n'est pas le seul moyen de connecter plusieurs conteneurs dans Docker. Une méthode plus sûre consiste à utiliser le système de connexion de Docker (--link) Lorsque les conteneurs sont connectés ensemble, le conteneur destinataire peut voir les informations du conteneur source.
Prenons Tomcat + Mysql comme exemple pour établir une connexion entre les conteneurs
Pour établir une connexion directement entre les conteneurs, utilisez l'option --link
--link
Ici, nous construisons un service Tomcat + Mysql pour illustrer comment établir une connexion entre deux ou plusieurs conteneurs.
Pour établir une connexion au conteneur, vous devez vous fier au nom du conteneur. Utilisez --name pour spécifier le nom du conteneur source comme mysql
docker run --name mysql -d gsoft/mysql:5.6
Ensuite, créez un tomcat. conteneur et se connecter à mysql Le conteneur monte
et le code est le suivant :
docker run --name tomcat -d -p 80:8080 --link mysql:mysql gsoft/tomcat:7.0
Ici, l'option --link permet de préciser que le conteneur à connecter est mysql .
Informations de communication du conteneur
Après avoir établi une connexion entre deux conteneurs, le conteneur récepteur (Destinataire) devra inévitablement accéder aux ressources du conteneur source (Source). Lorsque nous établissons une connexion pour le conteneur, le conteneur source n'utilise pas -p/-P pour spécifier le port à exposer lors de sa création, alors comment accéder aux informations du conteneur source ?
Afin de permettre au conteneur récepteur d'accéder aux informations du conteneur source, Docker propose deux méthodes :
EnvironnementVariables
/etc/hosts file
Variables d'environnement
Lorsque Docker se connectera au conteneur, il utilisera --link Les paramètres fournis créent automatiquement certaines variables d'environnement dans le conteneur destinataire, y compris les variables d'environnement définies à l'aide de la commande ENV dans le fichier Dockerdu conteneur source et lorsque le conteneur source démarre (exécution du docker), utilisez - e ou - -env, la variable d'environnement spécifiée par le paramètre --env-file.
contient principalement les variables d'environnement suivantes, en supposant ici alias=mysql.
<alias>_PORT <alias>_PORT_<port>_<protocol> <alias>_PORT_<port>_<protocol>_ADDR <alias>_PORT_<port>_<protocol>_PORT <alias>_PORT_<port>_<protocol>_PROTO <alias>_NAME
Par exemple :
#docker run -i -t --rm --link mysql:mysql ubuntu:14.04 env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=9c74aa611463 TERM=xterm MYSQL_PORT=tcp://172.17.0.3:3306 MYSQL_PORT_3306_TCP=tcp://172.17.0.3:3306 MYSQL_PORT_3306_TCP_ADDR=172.17.0.3 MYSQL_PORT_3306_TCP_PORT=3306 MYSQL_PORT_3306_TCP_PROTO=tcp MYSQL_NAME=/desperate_ritchie/mysql HOME=/root
Dans l'exemple ci-dessus, l'alias du conteneur est spécifié comme msyql, donc toutes les variables d'environnement commencent par MYSQL_.
Notez que si le conteneur source est redémarré, les informations sur les variables d'environnement dans le conteneur de réception ne seront pas automatiquement mises à jour Par conséquent, si vous souhaitez utiliser l'adresse IP du conteneur source, veuillez utiliser les informations /etc/ Host configurées dans les hôtes.
Fichier/etc/hosts
En plus des variables d'environnement, Docker met également à jour les informations sur les hôtes dans le fichier /etc/hosts du conteneur de réception.
# docker run -i -t --rm --link mysql:mysql ubuntu:14.04 /bin/bash # cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.3 mysql 115346bdb403 172.17.0.5 09bdf7805133
Comme le montre ce qui précède, deux informations supplémentaires sont ajoutées au fichier hosts du conteneur de réception, l'adresse IP et l'alias locaux et l'adresse IP et l'alias du conteneur source (mysql) .
Contrairement aux variables d'environnement, si le conteneur source est redémarré, les informations dans /etc/hosts dans le conteneur de réception seront automatiquement mises à jour.
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!