以Tomcat+Mysql为例,实现Docker多容器连接

本文深入探讨Docker容器间的连接方法,包括端口映射、连接系统(--link)及其实现原理。通过Tomcat+Mysql实例,展示如何利用--link选项建立容器间连接,解析环境变量和/etc/hosts文件在容器互通中的作用。

Docker提供了多个容器直接访问的方法,最简单的方式是直接使用端口映射-p参数指定映射的端口或者-P映射所有端口,多个容器直接通过网络端口进行访问。

但网络端口映射方式并不是Docker中连接多个容器的唯一方式,更安全的方法是可以使用Docker的连接系统(--link)连接多个容器,当容器连接到一起时,接受者容器就可以看到源容器的信息。

以Tomcat + Mysql为例,建立容器之间的连接 

在容器直接建立连接要使用--link选项

--link <name or id>:alias

这里我们通过建立一个 Tomcat + Mysql 的服务,示例一下如何在两个或者多个容器之间建立连接。

要建立容器连接的话,就要依赖容器的名字了,使用--name指定源容器的名字为mysql

docker run --name mysql -d gsoft/mysql:5.6

接下来创建tomcat容器,并且连接到mysql容器上去

 

docker run --name tomcat -d -p 80:8080 --link mysql:mysql gsoft/tomcat:7.0

 

这里通过--link选项指定了要连接的容器是mysql。

容器互通信息

建立两个容器之间的连接之后,在接收容器(Recipient)中必然会需要访问源容器(Source)的资源,我们在为容器建立连接时,源容器在创建时并没有使用-p/-P指定要暴露出来的端口,因此如何访问源容器的信息呢?

为了可以让接收容器能够访问源容器的信息,Docker提供了两种方式:

  • 环境变量
  • /etc/hosts文件

环境变量

Docker在连接容器的时候,会根据--link提供的参数自动的在接收者容器中创建一些环境变量,包括源容器的Dockerfile中使用ENV命令设置的环境变量和源容器启动时(docker run),使用-e或者--env, --env-file参数指定的环境变量。

主要包含以下环境变量,这里假设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

例如:

#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

上述例子中,指定了容器的别名为msyql,因此所有环境变量都是以MYSQL_开头。

注意的是,如果源容器重启,接收容器中的环境变量信息并不会自动更新,因此,如果要使用源容器的IP地址,请使用/etc/hosts中配置的主机信息。

/etc/hosts文件

除了环境变量之外,Docker也在接收容器的/etc/hosts文件中更新了hosts信息。

# 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

从上可以看出,在接收容器的hosts文件中增加了两条额外的信息,本机IP和别名以及源容器的IP和别名(mysql)。

与环境变量不同的是,如果源容器重启了,接收容器中/etc/hosts中的信息会自动更新。

转载于:https://www.cnblogs.com/jytx/p/5438747.html

### 部署MySQL - **方法一**:启动MySQL同时挂载数据卷,使用如下命令: ```bash docker run -id \ -p 3306:3306 \ --name=mysql1 \ -v /root/mysql/conf:/etc/mysql/conf.d \ -v /root/mysql/logs:/logs \ -v /root/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 ``` 此命令中,`-p`用于指定映射端口,将容器的3306端口映射到宿主机的3306端口;`--name`指定容器的别名;`-v`指定挂载数据卷,分别挂载配置、日志和数据目录;`-e`指定配置,设置MySQL的root用户密码为123456 [^1]。 - **方法二**:执行以下命令部署MySQL: ```bash docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d --name mysql -v /data/mysql:/data -v /data/conf/mysqld.conf:/app/mysql/mysql.conf mysql:5.7.22 ``` 这里同样指定了端口映射、root密码、容器名和数据卷挂载,并且指定了MySQL的版本为5.7.22 [^2]。 ### 部署Tomcat 创建Tomcat容器的命令如下: ```bash docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:8-jre8 ``` 该命令中,`-di`表示以守护进程模式运行并交互;`--name`指定容器名为mytomcat;`-p`将容器的8080端口映射到宿主机的9000端口;`-v`将宿主机的`/usr/local/webapps`目录挂载到容器的`/usr/local/tomcat/webapps`目录,以实现持久化存储;指定Tomcat的版本为8-jre8 [^3]。 还可以进行卷挂载设置,将宿主机上的`/root/tomcat`目录挂载到容器的`/usr/local/tomcat/webapps`目录,确保容器重新启动后数据不会丢失,示如下: ```bash # 假设启动命令部分内容,可结合具体情况完善 docker run -di -p 端口:8080 -v /root/tomcat:/usr/local/tomcat/webapps tomcat:版本 ``` 这样容器内的`/usr/local/tomcat/webapps`目录将总是包含宿主机上`/root/tomcat`目录的最新内容 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值