Docker网络(一) : docker0 网络

理解 docker0 网络

查看linux ip

ip addr

此时没运行任何docker容器,只有三个网卡

docker0 网卡修改 docker0网卡_docker


有三个网络,docker是如何处理容器网络访问的

查看容器的内部网络地址

docker exec -it mytomcat ip addr

docker0 网卡修改 docker0网卡_docker_02


发现容器启动的时候会得到一个 eth0@if4720 ip地址 docker自动分配的

思考:linx能不能ping通容器内部?

docker0 网卡修改 docker0网卡_网络_03


可以ping通容器内部

原理

我们每启动一个docker容器,docker就会给新生成的docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0 使用的桥接模式 ,使用的技术是evth-pair技术

再次测试ip addr 会发现linux会增加一个网卡

linux本机网卡

docker0 网卡修改 docker0网卡_容器_04

容器内部网卡

docker0 网卡修改 docker0网卡_容器_05


我们发现这个容器带来网卡,都是一对一对的

evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连

#正因为有这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备的

openstac, Docker容器之间的连接,OVS的连接,都是使用evth-pair 技术

docker0 网卡修改 docker0网卡_docker0 网卡修改_06


测试下容器与容器之间是否能可以ping通

docker0 网卡修改 docker0网卡_docker0 网卡修改_07


结论:容器与容器之间是可以相互ping通的

网络模型图

docker0 网卡修改 docker0网卡_docker0 网卡修改_08

结论: tomcat01和tomcat02是公用的一个路由器, docker0.
所有的容器不指定网络的情况下,都是docker0路由的, docker会给我们的容器分配一个默认的可用IP

255.255.0.1/16 16代表位数 一次8位两次16位

00000000.00000000.00000000.00000000 二进制网络
255.255.255.255 十进制

所有ip分配不应该是 255.255.0.255 而是 255.255.0.0
真正能分配的ip个数是 255*255-0.0.0.0(回环地址) - 255.255(最终地址) 约等于65535

如果为24
255.255.0.1/24 代表只有最后的255

24 域 局域网
A B C类网络

总结

Docker使用的是linux的桥接,宿主机中是Docker容器的网桥 docker0

核心:linux虚拟网络技术

Docker中的所有网络接口都是虚拟的,虚拟的转发效率高(内网传递文件)

docker0 网卡修改 docker0网卡_网络_09


高可用!

思考:编写了一个微服务,去连接 database url=ip:
每次用docker去启动都会分配一个新的ip,ip变了就失效了
项目不重启,数据库ip更换了,希望可以处理这个问题,可以通过名字来进行访问容器?

解决:–link