0%

docker网络

网络模式

我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,docker有以下4中网络模式:

  • bridage模式:docker容器默认的网络模式。它的原理类似交换机设备,而在linux中,能够起虚拟交互作用的,就是网桥(bridge)。它是一个工作在数据链路层的软件,主要功能是根据MAC地址将数据包转发到网桥的不同端口上。

    有了网桥之后,容器在启动时,会执行如下操作:

    1. 创建一对虚拟接口/网卡,也就是veth pair

    2. veth pair一端桥接到默认的名称为docker0的网桥或者其他指定网桥上,并具有一个唯一的名字,如veth9953b75

    3. veth pair一端放到新启动的容器内部,并修改名字作为eth0

    4. 从虚拟网桥可用地址段中(也就是bridge对应的network)获取一个空闲地址分配给容器内的eth0

    5. 容器内部配置默认路由到网桥

    如果容器内部需要访问外部网络,需要经过容器内部的eth0网卡、虚拟网桥、宿主机网卡最终访问到外网。如果容器内部需要访问其他容器网络,需要经过容器内部eth0网卡、虚拟网桥、其他容器内部etho0最终访问到其他容器。

  • host模式:容器内部不会创建网络命名空间(Network Namespace),容器共享宿主机的网络空间。

  • container模式:这个模式指定新创建的容器和已经存在的一个容器共享一个网络命名空间(Network Namespace)、网卡、ip。这种模式在一些特殊的场景中非常有用,例如k8s的pod,k8s为pod创建一个基础设施容器,该pod下的其他容器都以container模式共享这个技术设施容器的网络命名空间,相互之间以localhost访问,构成一个统一的整体。

  • none模式:只会在容器内创建网络命名空间(Network Namespace),不会创建虚拟网卡