理解 Docker0
1.首先使用 ip addr 查看
- lo: 是我们本机的回环地址
- eth0: 是我们系统的内网地址,例如我的就是阿里云内网地址
- docker0: 安装docker后 docker0 的地址
2. docker 是如何处理容器网络访问的?
2.1 先运行一个tomcat容器来测试
docker run -d -P --name tomcat01 tomcat
2.2 查看容器的内部网络地址
这部分如果报错的化,可以参考如下博客,或者一下命令
#进入容器 docker exec -it tomcat01 /bin/bash #更新apt-get update apt-get update #安装 iproute2 apt-get install -y iproute2
https://blog.csdn.net/G823909/article/details/127246183
docker exec -it tomcat01 ip addr
发现容器启动的时候会得到一个 eth0@if47 ip地址,这块每个人的可能都不一样,这是docker分配的!,并且这个ip是可以通过
本机Linux进行ping通
2.3 原理
docker0的地址是xxx.xxx.0.1 例如我的就是172.17.0.1
发现docker0的地址就是0.1这种,可以类比我们的路由器,就相当与我们路由器的
192.168.0.1这个路由器的地址
而我们容器里面,例如刚才搞的tomcat的地址,就是docker0进行分配的
我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装docker,就会有
一个网卡 docker0 桥接模式,使用的技术是 veth-pair 技术!
本机 ip addr
容器带来网卡,都是一对对的 (即容器内网卡对应本机的一个网卡,是一对对的)
veth-pair 就是一对的虚拟设备接口,他们都是成队出现的,一段连着协议,一段彼此相连
正因为有这个特性,veth-pair 充当一个桥梁,连接各种虚拟网络设备网络模型图:
实际上,两个容器之间的连接以及ping,是走了docker0这个桥梁过去的,而不是直接ping或者连接的Docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥 docker0
Docker中的所有网络接口都是虚拟的,虚拟的转发效率高
只要容器删除,对应网桥一对就没了