docker网络实现原理

没有安装docker时用ip addr 查看网络配置如下

1 代表本地回环地址127.0.0.1,它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口

2 是阿里云分配的内网地址

安装了docker后的网络配置

这里多了一个3

3 docker0代表docker默认的的网络地址,安装docker后就会自动生成一个

启动一个容器后查看容器内的网络配置

1 一样有个自己的回环地址
90:eth0@if91这个就是容器跟外部和容器间相互连接的地址 (容器间的网络ip地址网段相同说明可以相互连接,就跟局域网一样)

容器外ping容器内地址可以ping成功

容器内ping 其他容器的地址也可以ping通

启动容器再次查看ip addr

多了一个95后面对应的是94,而查看运行的容器的ip地址是94后面是95

这种容器内外链接的用到了一种叫做桥接的方式,用到的是evth-pair技术,就是成对出现的虚拟机设备接口,一端连接协议一端相互连接

原理图

docker中的所有网络接口都是虚拟的(虚拟化传输效率非常高)

容器删除或停止对应的网络桥接就是删除

容器的链接地址因为每次启动或者重启生成的都不相同,当我们在微服务的时候配置了多个数据库的连接,如果重启了数据链接地址就会跟着改变这样我们每次修改重启

就会修改链接地址会非常麻烦,有什么办法可以解决呢?

1 用容器名字相互连接,因为容器名字不会改变

--link参数(--link 就是在host文件里面加了一行解析)

docker run -d -P --name tomcat03 --link tomcat02 这样03就可以成功链接02了,但02不能链接03要链接成功必须再用02 --link 03才行

这个就算tomcat03下的hosts文件内容

2 自定义网路

docker network create --driver bridge --subnet 192.168.0.0/16 --getway 192.169.0.1 mynet (--subnet:定义子网,getway:定义网关)

将服务放在自定义的网络里面

docker  run -d -P --name  tomcat01  --net mynettomcat

自己定义的网络是比较完整的是可以直接相互连接的

网络模式

1 bridge :桥接(默认的方式,自己创建也是桥接模式) docker  run -d -P --name  tomcat01  --net bridge  tomcat (bridge 就是默认的可以不写)

2 none:不配置网络

3 host :和宿主机共享网络

4 container:容器网络连通

容器间不同网段连通

docker network connect mynet tomcat01

连通之后就是把Tomcat01放到mynet网络下(容器跟网络连通)

 

 

 


版权声明:本文为palma_hezhengjie原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。