1. bridge
桥接模式,也是容器默认的模式;容器有自己的Network NameSpace,docker会自动为容器配置网络栈
docker在宿主机上默认创建一个docker0的网桥,docker0根据Mac地址学习将数据转发到不同的端口
Veth Pair:Veth Pair设备被创建后,总是以虚拟网卡的形式成对出现,从其中一个虚拟网卡发出的数据可以直接出现在另一个网卡上,即使两张网卡在不同的Network NameSpace
docker容器被创建后,会创建一对 Veth Pair,一个在容器内部,一个在宿主机上,这样数据就可以在容器哥宿主机之间传输
统一宿主机上的容器通信流程:
容器A将数据发送到eth0(Veth Pair中在容器内的一端),然后数据直接出现在宿主机上的另一端(Veth Pair中在宿主机的一端),然后数据再转发到docker0网桥,然后找到对应的容器B的地址,将数据转发到容器B的Veth Pair设备在宿主机上的一端,然后数据直接出现在容器B内部对应的虚拟网卡上
2. none
容器有自己的Network NameSpace,docker不会为容器配置网络栈,需要用户自己配置网络栈
3. host
宿主机模式,容器直接使用宿主机的网络模式,容器直接监听宿主机上对应的端口
4. join-container
容器加入其它容器,使用其他容器的网络栈;k8s中的pod就是使用这种模式,pod先创建一个infra容器,pod内定义的容器都加入infra容器,NameSpace级别的配置和数据卷所有容器共享