Docker 网络 总结
4 种模式
- bridge:默认网络, Docker 启动后创建一个 docker0 网桥,默认创建的容器也是添加到这个网桥中; IP 地址段是 172.17.0.1/16
- host:容器不会获得一个独立的 network namespace,而是与宿主机共用一个。
- none:获取独立的 network namespace,但不为容器进行任何网络配置。
- 创建 docker run –network none
- 无 ip mac 等配置
- 仅 exec 方式可访问
- 作用:更加安全
- container:与指定的容器使用同一个 network namespace,网卡配置也都是相同的。
- 自定义: 自定义网桥,默认与 bridge 网络一样。
原理
- 核心:network namespace
流程:
- 先创建一个 docker0 的网桥,
- 使用 veth pair 创建一对虚拟网卡,一端放到新创建的容器中,并重命名 eth0,另一端放到宿主机上,以 veth+随机 7 个字符串命名,并将这个网络设备加入到 docker0 网桥中,
- 网桥自动为容器分配一个 IP,并设置 docker0 的 IP 为容器默认网关。所以容器默认网络都加入了这个网桥,因此都可以彼此通信。
- 同时在 iptables 添加 SNAT 转换网络段 IP,以便容器访问外网。
TODO: linux 命令可直接进行模拟全部流程,已忘记,有空补
Linux IP 信息包过滤原理: Docker 主要通过 netfilter/iptables 实现网络通信。 iptables 由 netfilter 和 iptables 组成, netfilter 组件是 Linux 内核集成的信息包过滤系统,它维护一个信息包过滤表,这个表用于控制信息包过滤处理的规则集。而 iptables 只是一个在用户空间的工具,用于增删改查这个过滤表的规则
- 很棒的总结:netfilter/iptables 防火墙
多机通信:总结都丢了,有空补
- 原文作者:战神西红柿
- 原文链接:https://tomatoares.github.io/posts/cloud/docker-network/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。