⭕ 容器之间如何互通访问
⭕ Docker0
------------------------------------# 清空所有镜像&容器------------------------------------$ docker rm -f $(docker ps -aq)$ docker rmi -f $(docker images -aq)------------------------------------# 查看当前ip地址------------------------------------$ ip addr# 本机ip地址1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever# 华为云内网地址2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether fa:16:3e:d4:d9:f1 brd ff:ff:ff:ff:ff:ffinet 192.168.0.144/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0valid_lft 75498sec preferred_lft 75498secinet6 fe80::f816:3eff:fed4:d9f1/64 scope linkvalid_lft forever preferred_lft forever# docker生成的地址3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:77:0d:87:93 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:77ff:fe0d:8793/64 scope linkvalid_lft forever preferred_lft forever------------------------------------# 创建个新的容器------------------------------------$ docker run -d -P --name tomcat01 tomcat# 查看容器的网络id地址$ docker exec -it tomcat01 ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever# 关键部分,虚拟网卡,evth-pair技术创建的70: eth0@if71: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever------------------------------------# 尝试宿主机是否可以ping通docker容器------------------------------------$ ping 172.17.0.2------------------------------------# 再次尝试在宿主机使用[ip addr]------------------------------------$ ip addr# 多了一个这个,与容器中的网卡是成对的耶71: veth3a1d5ce@if70: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group defaultlink/ether a2:f7:88:bf:24:5c brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::a0f7:88ff:febf:245c/64 scope linkvalid_lft forever preferred_lft forever------------------------------------# 再启动一个容器试试------------------------------------$ docker run -d -P --name tomcat2 tomcat$ ip addr# 这次宿主机中多了一个这个73: vethe7d8134@if72: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group defaultlink/ether be:6d:ee:a4:f6:b9 brd ff:ff:ff:ff:ff:ff link-netnsid 1inet6 fe80::bc6d:eeff:fea4:f6b9/64 scope linkvalid_lft forever preferred_lft forever------------------------------------# 测试两个容器是否可以互相ping通------------------------------------
📍 发现
- 每启动一个容器 , docker都会分配一个ip给容器( 用了veth-pair技术 )
- 我们只要安装了docker , 就会有一个docker0的网卡出现 , 这个网卡用了桥接模式与宿主机联通
- Docker中的所有网络接口都是虚拟的 , 虚拟的转发效率高
⭕ 关于veth-pair
相关参考 : https://www.cnblogs.com/bakari/p/10613710.html
veth-pair 在虚拟网络中充当着桥梁的角色,连接多种网络设备构成复杂的网络。
OpenStac , Docker容器之间的连接 , OVS的连接 , 都是使用veth-pair技术
