Maison  >  Article  >  base de données  >  Comment établir une connexion multi-conteneur Docker avec Mysql+Tomcat

Comment établir une connexion multi-conteneur Docker avec Mysql+Tomcat

黄舟
黄舟original
2017-03-24 13:11:331400parcourir

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 b55b5a51e06b65c594b87dda7b4aa1dc:alias

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 :

  1. EnvironnementVariables

  2. /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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn