【Docker】Docker 网络-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

引言

Docker是一个开源的应用容器引擎它允许开发者将应用及其依赖打包到一个可移植的容器中然后发布到任何流行的Linux机器或Windows机器上也可以实现虚拟化。Docker的主要优势之一是其网络功能而网络功能的核心就是网络驱动。

Docker网络

容器网络实质上是由 Dokcer 为应用程序所创造的虚拟环境的一部分它能让应用从宿主机操作系统的网络环境中独立出来形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等等与网络相关的模块。

Docker 为实现容器网络主要采用的架构由三部分组成CNM、Libnetwork 和驱动。

CNM

Docker 网络架构采用的设计规范是 CNMContainer Network ModelCNM 中规定了 Docker 网络的基础组成要素Sandbox、Endpoint、Network。

  • Sandbox提供了容器的虚拟网络栈也即端口套接字、IP 路由表、防火墙、DNS 配置等内容。主要用于隔离容器网络与宿主机网络形成了完全独立的容器网络环境。
  • NetworkDocker 内部的虚拟子网网络内的参与者相互可见并能够进行通讯。Docker 的虚拟网路和宿主机网络是存在隔离关系的其目的主要是形成容器间的安全通讯环境。
  • Endpoint就是虚拟网络的接口就像普通网络接口一样Endpoint 的主要职责是负责创建连接。在 CNM 中终端负责将沙盒连接到网络。个人理解Endpoint 与常见的网络适配器类似也就意味着 Endpoint 只能接入某一个网络。因此如果容器需要接入到多个网络就需要多个 Endpoint。

Libnetwork

Libnetwork 是 CNM 的标准实现。Libnetwork 是开源库采用 Go 语言编写跨平台的也是 Docker 所使用的库Docker 网络架构的核心代码都在这个库中。Libnetwork 实现了 CNM 中定义的全部三个组件此外它还实现了本地服务发现、基于 Ingress 的容器负载均衡以及网络控制层和管理层功能。

驱动

如果说 Libnetwork 实现了控制层和管理层功能那么驱动就负责实现数据层。比如网络的连通性和隔离性是由驱动来处理的。驱动通过实现特定网络类型的方式扩展了 Docker 网络栈例如桥接网络和覆盖网络。

Docker 内置了若干驱动通常被称作原生驱动或者本地驱动。比如 Bridge Driver、Host Driver、Overlay Driver、Ipvlan Driver、Macvlan Driver、None Driver 等等。第三方也可以编写 Docker 网络驱动这些驱动被叫做远程驱动例如 Calico、Contiv、Kuryr 以及 Weave 等。每个驱动负责创建其上所有网络资源的创建和管理。

其中 Bridge 和 Overlay 在开发过程中使用频率较高。

Docker网络驱动

Bridge驱动

介绍Bridge驱动是Docker默认的网络驱动当创建一个新的容器时如果没有指定其他网络驱动那么Docker容器就会使用默认的“bridge”的网络。当您的应用程序在需要与同一主机上的其他容器通信的容器中运行时通常会使用桥接网络。
在这里插入图片描述

优点Bridge驱动可以很方便地让容器之间进行通信同时还可以支持连接到主机网络。

缺点如果有大量的容器需要通信Bridge驱动可能会导致网络性能下降。

使用场景适用于单个主机上的多个容器之间的通信。

Host驱动

介绍Host驱动取消容器与Docker主机之间的网络隔离直接使用宿主机的网络命名空间即容器共享主机的网络栈。

优点Host驱动的性能非常高因为容器直接使用主机的网络栈。在容器需要处理大范围端口的情况下使用更方便。

缺点Host驱动不支持跨主机网络只能在同一台主机上的容器之间进行通信。

使用场景适用于只需要在同一台主机上运行少量容器的场景和容器需要处理大范围端口的场景。

Overlay驱动

介绍Overlay驱动主要用于管理跨主机的网络连接通过在每个主机上创建一个覆盖网络来连接所有的容器。将多个 Docker 守护进程连接在一起并使 Swarm 服务和容器能够跨节点通信。此策略消除了进行操作系统级路由的需要。

优点Overlay驱动可以实现跨主机的容器间通信非常适合用于多主机部署的场景。

缺点Overlay驱动的配置相对复杂需要额外的网络配置和管理。

使用场景适用于需要在多台主机上运行容器的场景。

Ipvlan驱动

介绍Ipvlan驱动是一种在Linux内核中实现的虚拟局域网VLAN技术它可以为每个容器分配一个独立的IP地址。IPvlan 网络使用户能够完全控制 IPv4 和 IPv6 寻址。VLAN 驱动程序建立在其之上使运营商能够完全控制第 2 层 VLAN 标记甚至为对底层网络集成感兴趣的用户提供 IPvlan L3 路由。IPvlan 与 Macvlan 类似但不为容器分配唯一的 MAC 地址。当可分配给网络接口或端口的 MAC 地址数量受到限制时请考虑使用 IPvlan。

优点Ipvlan驱动可以为每个容器提供独立的IP地址非常适合用于需要独立IP地址的场景。也支持跨主机的容器间通信。

缺点Ipvlan驱动的配置相对复杂需要对Linux网络有一定的了解。

使用场景适用于需要在每个容器上分配独立IP地址的场景。

Macvlan驱动

介绍Macvlan驱动是一种在Linux内核中实现的虚拟局域网VLAN技术Macvlan 网络允许您为容器分配 MAC 地址使其在网络上显示为物理设备。Docker 守护进程通过 MAC 地址将流量路由到容器。macvlan 在处理希望直接连接到物理网络而不是通过 Docker 主机的网络堆栈路由的遗留应用程序时使用驱动程序有时是最佳选择。

优点Macvlan驱动可以为每个容器提供独立的MAC地址非常适合用于需要独立MAC地址的场景。也支持跨主机的容器间通信。

缺点Macvlan驱动的配置相对复杂需要对Linux网络有一定的了解。

使用场景适用于需要在每个容器上分配独立MAC地址的场景。

None驱动

介绍禁用容器所有网络。通常与自定义网络驱动程序一起使用。none不适用于群组服务。
网络插件
介绍可以使用Docker安装和使用第三方网络插件。这些插件可从 Docker Hub或第三方供应商处获得。有关安装和使用给定网络插件的信息请参阅供应商的文档。

对比分析

  • Bridge和Host驱动都是Docker默认的网络驱动但Bridge驱动更适合于多个容器之间的通信而Host驱动则更适合于同一台主机上的少量容器之间的通信。
  • Overlay和Ipvlan/Macvlan驱动都支持跨主机的容器间通信但Overlay驱动更适合于多主机部署的场景而Ipvlan/Macvlan驱动则更适合于需要在每个容器上分配独立IP地址或MAC地址的场景。
  • 在选择网络驱动时需要考虑应用的需求和环境的特性例如是否需要跨主机通信是否需要独立IP地址或MAC地址等。

本文参考文章
花了三天时间终于搞懂 Docker 网络了

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker