docker --net详解_Docker网络通信

Docker:网络模式详解 - Gringer - 博客园​www.cnblogs.com
b48da50e06b6b8d8f5b6aaf2690ba7bb.png

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

e3da5ebe164eed4f0ad96c955e433246.png

docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式 :

host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,默认设置。
container模式:使用 --net=container:NAME_or_ID 指定

e2e7dc0edc6cf8d1f4f61c4477d0ea1c.png

f22868f4ec28eb8915111fe350298fd0.png

1b6fe985bb14d7c9a1aa696f5fca7cf3.png
启动docker engine后,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到
这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个
二层网络中。
从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡
veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡)
,另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。

[root@g15-6f-81-238 ~]# ifconfig
'''
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
'''

[root@g15-6f-81-238 ~]# docker inspect d1872d45b01d | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.6",
            
为了实现上述功能,docker主要用到了linux的Bridge、Network Namespace、VETH (虚拟网卡的接口对 Virtual Enternet device)。
docker0网关就是通过Bridge实现的。
Network Namespace是网络命名空间,通过Network Namespace可以建立一些完全隔离的网络栈。
比如通过docker network create xxx就是在建立一个Network Namespace。
VETH是虚拟网卡的接口对,可以把两端分别接在两个不同的Network Namespace中,实现两个原本隔离的Network Namespace的通信。
所以总结起来就是:
    Network Namespace做了容器和宿主机的网络隔离,
    Bridge分别在容器和宿主机建立一个网关,
    然后再用VETH将容器和宿主机两个网络空间连接起来。

80c482d8727aeb322af680b22d133185.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值