我们提供安全,免费的手游软件下载!
在之前的几篇文章中,我们介绍了Docker的基本概念和基本操作:
https://www.cnblogs.com/jilodream/p/18177695 初识docker
https://www.cnblogs.com/jilodream/p/18184687 基本操作
https://www.cnblogs.com/jilodream/p/18189478 镜像制作
然而,随着分布式多节点的考虑,我们需要容器之间能够进行通信。
容器之间的通信通常分为三种途径:
1、通过虚拟IP直接访问
2、通过链接方式,指定要连接的容器
3、创建bridge网络,实现容器互联
为了满足接下来的学习,我们需要利用官方的tomcat镜像为基础,初始化一些指令,DockerFile 如下:
开始构建镜像,并查看
然后我们回到重点,依次来看看容器的3种通信途径:
1、通过虚拟IP直接访问
安装docker之后,docker会默认搭建一个docker0的网络,后续每个容器就是网络中的一个节点,每个节点因此会有属于网络中的一个虚拟IP。我们可以利用虚拟IP直接进行访问。
如下,我们创建两个容器:
我们可以通过ifconfig或者inspect 查看容器IP, 接着使用 ping 和curl 命令实现两个容器的互相访问,我们发现网络是通着的:
进入8081容器,并查看IP为172.17.0.2
进入8082容器,并查看IP为172.17.0.3
8081 ping 8082,并访问对方tomcat端口
8082 ping 8081,并访问对方tomcat端口
这种情况一般比较简单,而且实际搭建网络集群时,比较复杂,IP地址也不好维护,所以我们一般只是在环境测试时使用。
2、通过link方式,指定要连接的容器
命令描述如下:
docker run -d --name 容器名称 --link 被连接容器名:被连接容器别名 镜像Id
我们创建两个容器。然后通过ifconfig或者inspect 查看容器IP
我们可以直接通过别名来访问另外一个容器,
以下为8081容器:IP为172.17.0.2:
以下为8082容器,IP为172.17.0.3 :
8082容器通过IP和网络别名访问8081容器:
link方式本质上还是使用docker0网络,修改host文件的IP映射,来实现网络通信。并且随着IP的变化还可以动态的维护这种映射关系。
但是link方式也有自己的局限性,如只能单向请求,两个容器无法互相连接请求对方,因为link配置是在启动容器时就已经生成好的,也就是只能后边的容器单向请求前边的容器,无法形成循环的网络。由于诸多不便,link方式也被抛弃了,更推荐的是bridge网络方式。
3、创建bridge网络,来实现容器互联
(1)首先我们创建一个bridge网络:
docker network create 网络名称
如下,我们创建一个网络名称为mynet的网络
(2)新创建3个容器加入到bridge网络中
命令如下docker run -it --name 容器名 ---network bridge网络名 --network-alias 当前容器在网络中的别名 镜像名
(3)进入到3个容器中,分别访问其它容器
以下为8083容器:8083访问8084
以下为8084容器: 8084访问8083
以下为8085容器: 8085访问8083、8084
我们可以发现第三种(构建bridge网络)的方式,相对来说最为灵活实用,不需要提前规划,并且可以实现网状的网络通信请求。
回到诉求本身,其实我们对容器间的通信需求并没有想象中的那么迫切,我们往往是通过端口映射到宿主机中,通过访问不同的宿主机IP和端口来实现容器间通信。这样也屏蔽了宿主机中容器的概念,并且可以广泛的无差别使用各种中间件,使得开发起来更容易。
但是有时候出于网络安全考虑,不允许请求进行跳转,或者端口进行屏蔽,此时就需要考虑下是否可以使用容器通信的技术来实现需求。
热门资讯