理解Docker0
docker是如何处理容器网络访问的?
# C:\Users\Mr.li>docker run -d -P --name tomcat01 tomcat
# 查看容器的内部网络地址 ip addr ,发现容器启动的时候会得到一个 eth0@ ip地址,docker分配的!
C:\Users\Mr.li>docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
link/tunnel6 :: brd ::
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
# 思考, linux能不能 ping 通容器内部!
# linux可以 ping 通 docker 容器内部!
原理
- 每安装一个docker容器,docker就会给docker分配一个ip,就会有一个网卡docker0桥接模式,使用的技术是veth-pair技术!
- 再启动一个测试
# 我们发现这个容器网卡,都是一对一对的
# veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连
# 正因为有这个特性, veth-pair 充当一个桥梁,连接各种虚拟网络设备的
# OpenStac, Docker容器之间的连接,ovs的连接,都是使用 veth-pair 技术!
- tomcat01和tomcat02
C:\Users\Mr.li>docker exec -it tomcat01 ping 172.17.0.3
# 容器和容器之间是可以互相 ping 通的!
结论: tomcat01 和 tomcat02是公用的一个路由器, docker0.
所有容器不指定网络的情况下,都是docker0 路由的,docker会给我们的容器分配一个默认的可用ip
小结
Docker 使用的是linux桥接,宿主机中一个Docker容器的桥接
Docker 中的所有的网络接口都是虚拟的,虚拟的转发效率高!
只要容器删除,对应网桥一对就没了!
–link
容器之间的网络
C:\Users\Mr.li>docker exec -it tomcat01 ping tomcat02
ping: tomcat02: No address associated with hostname
# 如何可以解决呢?
C:\Users\Mr.li>docker run -d -P --name tomcat03 --