返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 1702|回复: 0

[转载] 【转载】docker --net详解_Docker网络通信

[复制链接]
发表于 2023-8-15 11:43:54 | 显示全部楼层 |阅读模式
docker --net详解_Docker网络通信


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





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

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








启动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将容器和宿主机两个网络空间连接起来。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表