Docker 网络模式之 Bridge、Host、none、container
| 网络模式 | 参数 | 说明 |
|---|---|---|
| host模式 | –net=host | 容器和宿主机共享Network namespace |
| container模式 | –net={id} | 容器和另外一个容器共享Network namespace。kubernetes中的pod就是多个容器共享一个Network namespace |
| none模式 | –net=none | 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等 |
| bridge模式 | –net=bridge | 默认为该模式,通过 -p 指定端口映射 |
Bridge 模式

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为 docker0。它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。
Docker 默认指定了 docker0 接口的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
Docker 使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥 (docker0) 。当 Docker 启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP,同时 Docker 网桥是每个容器的默认网关。
因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。
在宿主机使用 ifconfig 命令,就可以看到 docker0 和自己创建的 network 如 eth0,eth1,eth2……(代表网卡一,网卡二,网卡三……),lo 代表 127.0.0.1,即 localhost,inet addr 用来表示网卡的 IP 地址。
网桥 docker0 创建一对对等虚拟设备接口,一个叫 veth,另一个叫 eth0,成对匹配。
Host 模式

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行 NAT 转换。容器将不会获得一个独立的 Network Namespace, 而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的 IP 和端口。
none 模式
在 none 模式下,并不为 Docker 容器进行任何网络配置。 也就是说,这个 Docker 容器没有网卡、IP、路由等信息,只有一个 lo,需要我们自己为 Docker 容器添加网卡、配置 IP 等。
container 模式

新建的容器和已经存在的一个容器共享一个网络 ip 配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
1871

被折叠的 条评论
为什么被折叠?



