Docker 容器网络模式简介
Bridge 桥模式
Docker 容器启动时默认的 网络模式,如果不使用–network 指定网络模式,那么docker会为该容器创建一个网桥,用于连接该容器网络和主机网卡设备.
此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
创建一个后台容器,并查看网卡信息 与 宿主机 的网桥 做对比; 明显看出 bridge 模式 下 docker 会 在docker0 网桥下创建一对 veth 设备 作为 容器与桥 的连接,270 –> 271
1 | docker run -d --name test_bridge --network=bridge busybox tail -f /dev/null |
1 | +----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+ |
Host 模式
这个模式下,容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
创建一个容器,并查看ip, 信息与宿主机一致,二者公用同一个网络命名空间
1 | docker run -i --network=host busybox ip a |
None 模式
这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
创建一个容器,查看该容器的 Network Namespace, 05 是上面 bridge 的, default 是docker容器本身的
1 | docker run -d --name test_none --network=none busybox tail -f /dev/null |
Container 模式
这个模式下,指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
使用test_bridge 容器网络,创建一个新容器,并比较二者网络信息,二者公用一块虚拟网卡都是 271
1 | docker run -d --name test_none --network=container:test_bridge busybox tail -f /dev/null |
User 自定义
该模式下,使用docker network 命令 创建自定义的网络,处于该网络下的docker可以通过 container名称进行通信,这里不能在使用busybox作为测试imgae需要使用完整的linux系统
1 | 创建一个isolated_nw 的孤立网络,并配置子网信息 |