docker 网络模式主要分为四种,可以通过docker network ls
查看
~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
a51d97d72f10 bridge bridge local
e81fc2ceb013 example_default bridge local
9f1ca259d46e host host local
6caa64e1c647 none null local
- bridge
为每一个容器分配设置ip,讲所有容器连接到docker0虚拟网桥,默认该形式
- host
容器将不会模拟出自己的网卡,配置自己的IP等,而是使用宿主机等IP和端口
- none
容器有独立的Network namespace,单并没有对其进行任何网络设置
- container
新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP/端口范围等。
Host 模式
Dcker使用网络命名空间来隔离网络,一个Docker容器一般会分配一个独立的网络命名空间,启动容器时,容器将不会获得独立的网络命名空间,而是和宿主机共用网络命名空间。
容器不会模拟网卡并配置IP地址,而是使用宿主机IP地址和端口。
在host模式下,容器里的文件系统、进程列表等资源和宿主机上隔离的,但容器的网络环境隔离性呗弱化,容器不再有拥有隔离的、独立的网络栈,容器内部不会拥有所有的端口资源,这是因为部分端口资源会被宿主机上的应用服务所占用
containner模式
container模式指定了新创建的容器和已存在的容器共享一个网络命名空间,而不是和宿主机共享,虽然多个容器共享网络环境,但是容器和容器、容器和宿主机之间依然形成了网络隔离,在这一定程度上可以节约网络资源,但是要注意,容器内部依然不会拥有所有的端口资源。
None模式
none模式下,Docker容器拥有自己的网络命名空间,但是并不尽兴任何网络配置,该模式关闭了容器的网络功能,此时容器里没有网卡、IP地址、路由等信息。
Beidge网络模式
在该模式下,Docke守护进程创建了一个虚拟以太网桥docker0,新建的容器会自动桥接到这个借口,附加在其上的任何网卡之间都能自动转发数据包。
默认情况下,守护进程会创建一对对等虚拟设备接口veth pair,将其中一个接口设置为容器等ehi0
接口,另一个接口防止在宿主机等命名空间中,以类似vethxxx这样名字命名,从而将宿主机上的所有容器都连接到这个内部网络上