网络模式
Docker的本地网络实现其实是利用了Linux上的网络命名空间和虚拟网络设备(veth pair)。
实现网络通信,主机至少需要一个网络接口与外界相通,并可以收发数据包;此外,如果不同子网之间要实现通信,需要额外的路由机制。
Docker中的网络接口默认都是虚拟的接口。虚拟接口最大的优势是转发效率高。这是因为Linux通过在内核中进行数据复制来实现虚拟接口之间的数据转发,即发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中,而无需通过外部物理网络设备进行交换。对于本地系统和容器内部系统来看,虚拟接口跟正常的以太网卡相比并无区别,只是它速度要快得多。
Docker容器网络就很好的利用了Linux虚拟网路技术,在本地和容器内部分别创建一个虚拟接口,并让它们彼此连通(这样的一对接口叫做veth pair)

用户可以通过docker network命名手动管理网络,在使用docker run命名启动容器的时候,可以通过--net 参数来指定容器的网络模式,有bridge、none、container、host和用户自定义网络。
--net=bridge:默认值,在Docker网桥docker0上为容器创建新的网络栈。
--net=none:这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性.
--net=container:NAME_or_ID:让Docker将新创建的容器进程放到一个已存在容器的网络栈中,新容器有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享IP地址和端口等网络资源,两者进程可以直接通过lo回环接口通信。
--net=host:使用host模式的容器可以直接使用docker host的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
--net=user_defined_network: 用户自行用network命令创建一个网络,通过这种方式将容器连接到指定的已创建网络上去。

浙公网安备 33010602011771号