Docker容器网络模式

  • 配置容器网络模式

    Docker run -net=pattern

  • 四种模式

    host模式:host模式下的容器不会独立创建一个network namespace,而是与宿主机公用一个network namespace。容器不会再虚拟出自己的网卡,配置IP,直接使用宿主机的IP及端口。

    container模式:container模式下的容器与host模式下的容器类似,同样不会独立创建一个network namespace,而是和其他容器共用一个network namespace。两个容器除了network namespace是共享的之外,其他的如文件系统、进程列表等还是相互隔离的。

    none模式:none模式下的容器拥有自己的network namespace,但是不会为容器进行任何网络配置,需要人工添加网卡、配置IP等信息,典型的pipework工具可以为此模式下的容器配置IP等信息。

    bridge模式:docker容器默认的网络模式,该模式会为每一个容器分配一个network namespace,设置IP、路由等信息,并且默认会将这些容器连接到一个虚拟的交换机docker0上。

  • bridge模式下的docker 容器创建过程
    1.启动docker容器,docker宿主机会创建一对虚拟网卡,veth pair设备,用于两个设备通信。
    2.Docker 将veth pair 的一端放在新创建的docker 容器中,并命名为eth0,另一端放在宿主机中,以veth-container-id的方式命名,并将这个veth加入到docker0中。
    3.Docker0从子网中分配一个IP给容器使用,并将容器的网关设置为docker0的IP地址。
    此时容器间,容器与宿主机之间是可以通信的,容器也可以访问外网,但是其他宿主机不可以访问容器内的IP地址,需要通过NAT将容器IP的port映射为宿主机的IP和port,方可访问。

  • docker桥接网络拓扑
    image_1d5aqqol11q8733oqtbjqm1e4ic.png-27.1kB