随笔 - 303  文章 - 0  评论 - 3  阅读 - 15万

Docker网络之网络模式

  在Linux平台上,Libnetwork通过Network Namespace机制实现隔离。基于Network Namespace的灵活特性打造了5种Docker网络模式,分别是:none/container/host/bridge/overlay。

  docker安装后会自动创建3种网络:bridge/host/none  

      

  下面分别介绍各种模式:

  1、none

    none模式表示不为容器配置任何网络功能,启用该模式只需要在启动时添加--net=none即可。使用该命令启动的容器完全失去网络功能,即便设置了网络参数。

  2、container

    container模式表示与另一个运行中的容器共享一个Network Namespace,共享意味着拥有相同的网络视图。

  3、host

    host网络模式可以与主机共享Root Network Namespace,容器有完整的权限操纵主机的网络配置(不建议使用这种模式)。

  4、bridge

    Docker默认的网络模式为Bridge,属于一种NAT网络模型。在该模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的,但容器通过宿主机的NAT规则后可以访问外网。

    Docker daemon在启动的时候就会建立一个docker0网桥(通过-b参数可以指定)。每个容器使用bridge模式启动时,Docker都会为容器创建一对虚拟网络接口(veth pair)设备。这对设备一端在容器的Network Namespace,另一端在docker0——这样就实现了容器与宿主机的通信。

    run nginx镜像:docker network inspect bridge

       

    Docker 创建一个容器的时候,会执行如下操作进行IP地址的分配:

      1)创建一对虚拟接口/网卡,也就是veth pair,分别放到本地主机和新容器中;

      2)本地主机一端桥接到默认的 docker0 或指定网桥上,并具有一个唯一的名字

      3)容器一端放到新容器中,并修改名字作为 eth0,这个网卡/接口只在容器的名字空间可见;

      4)从网桥可用地址段中(也就是与该bridge对应的network)获取一个空闲地址分配给容器的 eth0,并配置默认路由到桥接网卡

    完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。

    如果不指定--network,创建的容器默认都会挂到 docker0 上,使用本地主机上 docker0 接口的 IP 作为所有容器的默认网关:docker exec -it nginx1 sh

      

    安装brctl,查看docker0详情:brctl show

      

    在宿主机虚拟一个docker容器网桥(docker0)docker启动一个容器时会根docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

      

    docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的。这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

      

  5、overlay

    overlay模式是Docker原生的跨主机多子网网络模型。当创建一个新的网络时,Docker会在主机创建一个Network Namespace;其内有个网桥,网桥上有一个vxlan接口,每个网络占有一个vxlanID。当容器被添加到网络中时,Docker会分配一对veth网卡设备,与bridge模式类似,一端在容器里面另一端在本地Network Namespace上。

    

  


  

posted on   池塘里洗澡的鸭子  阅读(161)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-04-26 Spring Boot 热插拔技术应用
2021-04-26 Spring Boot自动配置实战
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示