Docker网络模型(一)概述

网络模型概述

Docker 容器和服务(Service) 很强大的原因之一,是你可以将它们互联,或者干脆将它们连接到Docker 之外的地方去。Docker 容器和服务甚至不需要知道它们是否被部署在 Docker 上,又或者需要知道它们的对端(peer)是不是 Docker 服务(workload)。无论你的 Docker 跑在Linux、Windows 又或者是它们的混合体之中,你都可以用 Docker 来对这些容器和服务进行平台无关的管理。

本专题定义了一些基础的 Docker 网络概念,帮助你利用好 Docker 的网络能力,来部署和设计你的应用。

专题的讨论范围

专题不会深入到具体的 Docker 网络在操作系统层面的具体原理,所以你在文章里看不到 Docker 在 Linux 中怎么操作 iptables 规则、看不到 Docker 在 Windows 中怎么操作路由规则,也不会看到 Docker 网络包的装拆、加解密方式。如果确实有这类兴趣,参考:Docker and iptables.

此外,本专题不会提供如何创建、管理和使用Docker网络的教程。每一种模型都包括相关教程和命令参考的链接。可在文末跳至相关的链接进行查看。

网络驱动

Docker 的网络子系统是可插拔的,由对应的驱动程序驱动。默认情况下存在几种驱动程序,并提供核心网络功能:

  • bridge(桥接): 默认的网络驱动。如果在创建容器服务时不指定网络模式,那么用的就是它。Bridge 模式一般用在需要通讯的独立容器上。参考:bridge 网络.

  • host(宿主机): 在独立的容器里,移除容器和 Docker 宿主机之间的网络隔离,并直接使用宿主机的网络的模式。参考: 使用宿主 host 网络.

  • overlay: Overlay 网络模式,把复数个 Docker Daemon (注意是不同的 daemon)连接到一起,并使 swarm(docker 的官方编排工具)能在它们之间通讯。常用于分布式管理。参考 Overlay 网络.

  • ipvlan: IPvlan 网络让用户完全控制 IPv4 和 IPv6 的寻址。IPvlan 让操作者能完全操控二层(数据链路层)网络的 vlan 标签,甚至也提供了三层(网络传输层)路由控制给感兴趣的用户。参考 IPvlan 网络.

  • macvlan: Macvlan 网络允许你给容器分配一个 MAC 地址,类似于在网络中分配了一张物理网卡。 Docker daemon 会通过容器的 MAC 地址来对容器进行网络路由。比起需要通过 Docker 宿主机的协议栈来传递网络消息,通过 macvlan 驱动来处理一些需要直接连接到物理网络的应用的需求,会是更好的选择(比如想在 Docker 里虚拟出一个 Linux,完全暴露到局域网)。参考 Macvlan 网络.

  • none: 对特定的容器,禁用掉所有的网络。一般结合自定义网络驱动使用。none 模式在 swarm 服务中是不可用的。参考 禁用容器网络.

  • 网络插件: 你可以在 Docker 里安装和使用第三方网络插件。这些插件可以在 Docker Hub 或者在第三方提供处拿到。请阅读第三方提供者的文档,然后安装和使用它们提供的网络插件。

网络驱动总结

  • 用户定义的 Bridge 网络模式 在同宿主机下多容器通讯下,是最好的选择。
  • 宿主机网络模式(Host networks) 是在指定容器不想跟宿主机的协议栈进行隔离的同时,又想保持其他的容器隔离的情况下,最好的选择。
  • Overlay 网络模式 是在你需要在不同的 Docker 宿主机之间进行容器间通讯,又或者是 swarm 编排多应用配合时,最好的选择。
  • Macvlan 网络模式 在你进行虚拟机迁移或者需要你的容器在网络中更像是一个独立的物理机器,每个都需要一个独特的 MAC 地址时,最好的选择。
  • 第三方网络插件 允许你将特定的网络协议栈跟 Docker 整合起来。

网络新手教程

现在你已经理解了 Docker 网络的一些基础知识,用下面的教程强化你的理解:

猜你喜欢

转载自blog.csdn.net/weixin_42445065/article/details/130804121