4 种模式

  1. bridge:默认网络, Docker 启动后创建一个 docker0 网桥,默认创建的容器也是添加到这个网桥中; IP 地址段是 172.17.0.1/16
  2. host:容器不会获得一个独立的 network namespace,而是与宿主机共用一个。
  3. none:获取独立的 network namespace,但不为容器进行任何网络配置。
    1. 创建 docker run –network none
    2. 无 ip mac 等配置
    3. 仅 exec 方式可访问
    4. 作用:更加安全
  4. container:与指定的容器使用同一个 network namespace,网卡配置也都是相同的。
  • 自定义: 自定义网桥,默认与 bridge 网络一样。

原理

  • 核心:network namespace

流程:

  1. 先创建一个 docker0 的网桥,
  2. 使用 veth pair 创建一对虚拟网卡,一端放到新创建的容器中,并重命名 eth0,另一端放到宿主机上,以 veth+随机 7 个字符串命名,并将这个网络设备加入到 docker0 网桥中,
  3. 网桥自动为容器分配一个 IP,并设置 docker0 的 IP 为容器默认网关。所以容器默认网络都加入了这个网桥,因此都可以彼此通信。
  4. 同时在 iptables 添加 SNAT 转换网络段 IP,以便容器访问外网。

TODO: linux 命令可直接进行模拟全部流程,已忘记,有空补

Linux IP 信息包过滤原理: Docker 主要通过 netfilter/iptables 实现网络通信。 iptables 由 netfilter 和 iptables 组成, netfilter 组件是 Linux 内核集成的信息包过滤系统,它维护一个信息包过滤表,这个表用于控制信息包过滤处理的规则集。而 iptables 只是一个在用户空间的工具,用于增删改查这个过滤表的规则

多机通信:总结都丢了,有空补