1.10 容器互联

【必知必会】配置多个容器如何互相连接?

有时我们需要多个应用共同工作才能对外提供服务,比如使用WordPress和MySQL两个应用才能搭建博客。WordPress需要连接到MySQL上,这样就需要两个容器,此时就需要将WordPress容器连接到MySQL容器上。

1.10.1 方法1:通过容器IP的方式访问

前面在实战练习里已经创建了一个名称为db的容器,IP为172.17.0.2且里面有一个数据库叫作blog。

下面使用WordPress镜像创建一个容器,此容器需要连接到MySQL上。

这个容器需要使用的变量如下。

(1)WORDPRESS_DB_HOST:用来指定MySQL服务器的地址。

(2)WORDPRESS_DB_USER:用来指定登录MySQL的用户名。

(3)WORDPRESS_DB_PASSWORD:用来指定登录MySQL的密码。

(4)WORDPRESS_DB_DATABASE:用来指定需要的数据库。

第1步 创建WordPress容器,并把端口发布出去,使得外界的主机能访问。

这里通过变量WORDPRESS_DB_HOST指定了MySQL服务器的地址。

第2步 在浏览器里访问页面。

在地址栏里输入192.168.26.100,如图1-21所示。

选择“Chinese”选项,单击“Continue”按钮,进入图1-22所示的页面。

图1-21 访问WordPress容器(1)

图1-22 访问WordPress容器(2)

并没有要求输入数据库的信息,因为它已经可以自动连接到数据库了。

第3步 删除blog这个容器。

这种方法有个问题,就是如果db容器出问题而重新生成时,IP可能会发生改变,那么WordPress就连接不上了。

上述命令在vms101上用nerdctl执行,只要把关键字docker换成nerdctl即可。

1.10.2 方法2:使用link的方式

在创建容器时,--link选项的用法如下。

后续需要引用此容器名时,直接写别名即可。

这种--link用法在nerdctl里无法使用,所以下面的练习只在vms100上操作。

第1步 再次创建WordPress容器。

这里创建名称为blog的容器,使用--link连接到名称为db的容器,起别名为mysqlxx,在WORDPRESS_DB_HOST这个变量里不再写db的IP了,而是直接写别名mysqlxx,此时blog正常运行,且能访问到数据库,如图1-23所示。

图1-23 访问WordPress容器(3)

注意

--link里容器的别名是可以随意起的。

但是,这个命令还是过于复杂,可以进一步简化。刚才介绍了WordPress镜像所使用的变量,现在来看它们的默认值。

(1)WORDPRESS_DB_HOST:默认连接到别名为mysql的容器。

(2)WORDPRESS_DB_USER:默认为root。

(3)WORDPRESS_DB_PASSWORD:默认为MySQL容器里的root所使用的密码。

(4)WORDPRESS_DB_DATABAASE:默认为名称为wordpress的库。

所以,如果我们创建MySQL容器,指定一个数据库是wordpress而不是blog,则上面的选项都可以不写。

第2步 删除db和blog容器。

第3步 创建一个MySQL容器。

在这个MySQL容器里,通过变量MYSQL_DATABASE创建一个名称为wordpress的库。在WordPress容器里如果没有指定使用MySQL里的哪个库,则默认使用的是名称为wordpress的库。

第4步 创建一个WordPress容器,所有变量均使用默认值。

这里别名使用的是mysql,WORDPRESS_DB_HOST默认会连接别名为mysql的容器,这里创建WordPress容器的选项很少,因为都是使用的默认值。

(1)WORDPRESS_DB_USER:使用的是root用户。

(2)WORDPRESS_DB_PASSWORD:使用的是别名为mysql这个容器里MYSQL_ROOT_PASSWORD的值。

(3)WORDPRESS_DB_NAME:默认使用wordpress库。

在浏览器里测试,如图1-23所示。

虽然在创建WordPress容器时没有指定太多MySQL的信息,但依然能跳过数据库的设置,说明WordPress容器是正确连接到数据库了。

自行删除这两个容器。