Docker基础-20-网络-容器link关系和新建bridge网络

本篇来学习几个docker的使用不是很频繁的知识点。第一个是容器之间的link操作,第二个是如何把容器连接到我们自己新建的bridge网络,我们前面知道,默认容器启动之后都是连接到docker0这个bridge网络,这里我们来演示下连接到我们自定义的bridge网络。

 

容器之间link关系

 

一般使用link的场景是这样的,加入在一个企业环境中,我们有一个mysql的服务的容器mysql_1,还有一个web应用程序web_1,在开发中,肯定web_1这台容器肯定要连接mysql_1这个数据库。前面网络命名空间的知识告诉我们,两个容器需要能通信,需要知道对方的具体的IP地址。生产环境还比较好,IP地址很少变化,但是在我们内部测试环境,容器部署的IP地址是可能不断变化的,所以,开发人员不能在代码中写死数据库的IP地址。这个时候,我们就可以利用容器之间link来解决这个问题。下面,我们来介绍如何通过容器名称来进行ping,而不是通过IP地址。

 

和前面一页,我们启动两个busybox的容器,分别是test1和test2,我们IP地址是可以ping同,但是如果test1 ping test2是行不通的。

Docker基础-20-网络-容器link关系和新建bridge网络

Docker基础-20-网络-容器link关系和新建bridge网络

下面,学习一个docker link命令,把test1容器和test2容器关联起来。然后再来测试下ping test2行不行。为了模拟link的操作,我们先把test2容器给停止并删除,然后注意下test2容器启动命令变化。

Docker基础-20-网络-容器link关系和新建bridge网络

docker run -d --name=test2 --link test1 busybox /bin/sh -c "while true; do sleep 3600; done"

这个启动命令,比之前加了—link test1 参数。下面我们再次进入test2中通过test1来ping(注意这里是反过来,test2里ping test1)

Docker基础-20-网络-容器link关系和新建bridge网络

上面link命令,是test2启动link了test1容器,所以,只能在test2里面通过test1去ping,link的作用相当于添加了DNS解析。这里提醒下,你去test1里是不同ping test2的,因为link关系是单向的,不可逆。

 

如果创建一个自定义bridge网络,并往上面连接容器。

Docker基础-20-网络-容器link关系和新建bridge网络

上面命令参数-d 是指DRIVER的类型,后面的my-bridge是network的自定义名称,这个和docker0是类似的。下面开始介绍,如何把容器连接到my-bridge这个网络。

 

启动容器过程中指定连接到my-bridge网络

下面,我们来启动一个busybox的容器test3,并通过参数network connect来连接my-bridge网络。

Docker基础-20-网络-容器link关系和新建bridge网络

在启动容器test3之前,我们查看目前还没有容器连接到了my-bridge这个网络上。

Docker基础-20-网络-容器link关系和新建bridge网络

docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true; do sleep 3600; done"

Docker基础-20-网络-容器link关系和新建bridge网络

那边接口vethf0a24eb是不是test3这个容器,test3容器查询这个接口是外层的[email protected]

Docker基础-20-网络-容器link关系和新建bridge网络

我们在外层linux本机上输入ip link。

然后利用docker network inspect my-bridge看看Containers下有没有test3

Docker基础-20-网络-容器link关系和新建bridge网络

这里看test3容器连接到了my-bridge网络,IP地址网段都变成了18这个网段。

 

如果把一个运行中容器连接到my-bridge网络

这里需要使用docker network connect命令

Docker基础-20-网络-容器link关系和新建bridge网络

这样就把容器test2连接到了bridge 网络my-bridge。

Docker基础-20-网络-容器link关系和新建bridge网络

也可以查看my-bridge的inspect命令: docker network inspect my-bridge

Docker基础-20-网络-容器link关系和新建bridge网络

也可以在查看bridge的inspect内容:docker network inspect bridge,可以看到test2既在bridge这个网络,也在my-bridge网络中。

 

本篇就学习两个知识点,一个容器之间的link关系,这种link是单方向有效,不可逆。第二个是新建bridge网络,并把容器添加到新建的bridge网络。