docker 第10.3章 Docker网络-bridge docker 第10.3章 Docker网络-bridge

2023-06-11

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。

Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。

查看 bridge 网络的详细信息,并通过 grep 获取名称项

docker network inspect bridge | grep name
ifconfig | grep docker

https://file.lulublog.cn/images/3/2023/06/l2HhZcV7oJC7VhoA1aXvvYAXhtoa4X.jpg

Docker 使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥(docker0),Docker 启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP,同时 Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。

docker run 的时候,没有指定 network 的话默认使用的网桥模式就是 bridge,使用的就是 docker0。在宿主机 ifconfig,就可以看到 docker0 和自己 create 的 network (后面讲) eth0,eth1,eth2……代表网卡一,网卡二,网卡三……,lo 代表 127.0.0.1,即 localhost,inet addr 用来表示网卡的 IP 地址。

网桥 docker0 创建一对对等虚拟设备接口一个叫 veth,另一个叫 eth0,成对匹配。

  • 整个宿主机的网桥模式都是 docker0,类似一个交换机有一堆接口,每个接口叫 veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair)

  • 每个容器实例内部也有一块网卡,每个接口叫 eth0

  • docker0 上面的每个 veth 匹配某个容器实例内部的 eth0,两两配对,一一匹配。通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的

https://file.lulublog.cn/images/3/2023/06/i812111z1J3ZG6Jj9HlK8GFDb9j1F6.jpg

案例

docker pull mysql:5.7
docker run -p 3311:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3312:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
ip addr | tail -n 331

https://file.lulublog.cn/images/3/2023/06/msuQsOmsPWZ34BUomEysW2QYbmM3Qq.jpg

阅读 451

docker文章

带到手机上看