Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或者将它们连接到非Docker工作负载。 Docker容器和服务甚至不需要知道它们部署在Docker上,或者它们的对等端是否也是Docker工作负载。 无论您的Docker主机是运行Linux,Windows还是两者兼而有之,您都可以使用Docker以与平台无关的方式管理它们。
本主题定义了一些基本的Docker网络概念,为您设计和部署应用程序以充分利用这些功能做准备。
大部分内容适用于所有Docker版本。 但是,一些高级功能仅适用于Docker EE客户。
本主题的范围
本主题不深入特定操作系统上Docker网络如何工作的详细信息,因此您将无法找到有关Docker如何操作Linux上的iptables
规则或如何操作Windows服务器上的路由规则的信息,而且您将无法找到有关Docker如何构造和封装数据包或处理加密的详细信息。 请参阅Docker和iptables以及Docker参考架构:设计可扩展的可移植的Docker容器网络,以获得更深入的技术细节。
此外,本主题未提供有关如何创建,管理和使用Docker网络的任何教程。 每个部分都包含指向相关教程和命令参考的链接。
网络驱动程序
Docker的网络子系统是可插拔的,使用驱动程序实现.一些驱动程序默认就存在,并提供核心网络功能:
桥接(bridge
):默认网络驱动程序。如果未指定驱动程序,则使用此网络类型。**当您的应用程序在需要通信的独立容器中运行时,通常会使用桥接网络。**查看桥接网络。
主机(host
):对于独立容器,容器和Docker主机之间的网络不需要隔离,直接使用主机的网络。 host
仅适用于Docker 17.06及更高版本的swarm服务。请参阅使用主机网络。
叠加(overlay
):覆盖网络将多个Docker后台程序连接在一起,并使swarn服务能够相互通信。您还可以使用覆盖网络来促进swarn服务和独立容器之间的通信,或者在不同Docker后台程序上的两个独立容器之间进行通信。此策略不需要在这些容器之间进行OS级别的路由。请参阅覆盖网络
macvlan
:Macvlan网络允许您为容器分配MAC地址,使其与为网络上的物理设备一致。 Docker后程序通过其MAC地址将流量路由到容器。在处理遗留应用程序期望直接连接到物理的网络时,使用macvlan
驱动程序有时是最佳选择,而不是通过Docker主机的网络堆栈进行路由。请参阅Macvlan网络。
none
:此类容器,禁用所有网络。通常与自定义网络驱动程序一起使用。 none不适用于swarm服务。请参阅禁用容器网络。
网络插件(Network plugins):您可以使用Docker安装和使用第三方网络插件。这些插件可从Docker Hub或第三方供应商处获得。有关安装和使用给定网络插件的信息,请参阅供应商的文档。
网络驱动程序总结
- 用户定义的桥接网络,当您需要多个容器在同一个Docker主机上进行通信时是最佳选择。
- 主机网络,当网络堆栈不应与Docker主机隔离时,但您希望隔离容器的其他方面是最好的。
- 覆盖网络,当您需要在不同Docker主机上运行的容器进行通信时,或者当多个应用程序使用swarm服务协同工作时。
- Macvlan网络是最佳的,当您从VM设置迁移或需要容器看起来像网络上的物理主机时,每个主机都具有唯一的MAC地址。
- 第三方网络插件允许您将Docker与专用网络堆栈集成。
Docker EE网络特性
只有在使用Docker EE并使用通用控制平面(UCP)管理Docker服务时,才能实现以下两个功能:
- HTTP路由网格允许您在多个服务之间共享相同的网络IP地址和端口。 根据客户端的请求,UCP使用主机名和端口的组合将流量路由到适当的服务。
粘性会话允许您在HTTP header中指定信息,UCP使用这些header将后续请求路由到同一服务任务,适用于需要有状态会话的应用程序。
网络教程
现在您已了解有关Docker网络的基础知识,请使用以下教程加深您的理解: