【Docker】Docker 网络

引言

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

Docker网络

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

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

CNM

Docker 网络架构采用的设计规范是 CNM(Container Network Model):CNM 中规定了 Docker 网络的基础组成要素:Sandbox、Endpoint、Network。

  • Sandbox,提供了容器的虚拟网络栈,也即端口套接字、IP 路由表、防火墙、DNS 配置等内容。主要用于隔离容器网络与宿主机网络,形成了完全独立的容器网络环境。
  • Network,Docker 内部的虚拟子网,网络内的参与者相互可见并能够进行通讯。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 网络了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义Matplotlib中的颜色映射(cmap)

要自定义Matplotlib中的颜色映射(cmap),您可以按照以下步骤进行操作: 导入所需的库: import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap创建自定义颜色映…

Docker修改容器内部文件的三种方法

为啥要记录呀 今天在修改Docker内部文件的时候,安装vim居然失败了,在执行apt-get update时一直有几个404,解决无果,最后放弃安装vim,将文件拷贝出来修改,然后再拷贝到docker内部。记录一下如何修改Docker内…

软件工程分析报告06测试结果分析报告——基于Paddle的肝脏CT影像分割

测试结果分析报告 一、测试方法 本次测试涵盖了白盒测试和黑盒测试的相关技术。在白盒测试方面,采用了语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖、点覆盖和边覆盖等方法。在黑盒测试方面,采用了等价类划分、边界值分析、因…

jetson配置笔记

typora-root-url: /home/msj/ubuntu笔记本台式机环境配置说明/images Ubuntu18.04 配置 说明:我们所有文档配置都是按照ubuntu18.04,保证x86架构(笔记本台式机)和 ARM架构(jetson Nano只能安装18.04)的一致性 1. 更换各类源 我们所有源都更换清华源&a…

用二维码展示产品,随时查看图文并茂的介绍

传统的产品宣传方式,往往以产品手册、宣传单等纸质物料为主,不仅会造成客户获取和携带上的不便,一旦内容需要更新,就必须重新印刷,造成不必要的浪费,而且老用户看到的仍然是旧内容。 其实可以用二维码进行…

vuejs - - - - - 移动端设备兼容(pxtorem)

pxtorem的使用 1. 依赖安装2. vue.config.js配置3. 动态设置html的font-size大小4. 效果如图: 1. 依赖安装 yarn add postcss-pxtorem -D 2. vue.config.js配置 module.exports {...css: {loaderOptions: {postcss: {plugins: [require("postcss-pxtorem&quo…

吊打Fast Request还免费? 这款插件真心好用!

今天给大家推荐一款IDEA插件:Apipost Helper,比Fast Request更好用并且完全免费!三大亮点功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试,;生成API目录树,双击即可快速…

【debug】解决Kali虚拟机开机黑屏,左上角光标一直闪动无法开机问题

做网络攻防实验时,突然Kali无法打开,遇到这个问题。。。。。。 遇到的问题 突然kali虚拟机变成如下黑屏,无法开机,左上角光标闪动,重启无效。 解决办法 在上图界面,按Ctrl F3(不同电脑快捷键…

记一次FastJson报错

文章目录 报错内容原因探寻原因及解决方案 报错内容 起因是一段很普通的字符串转Java对象的代码,在本地和内网测试都没有问题,偏偏外网一跑就报错,错误如下: 报错的代码特别简单,涉及到公司代码这里用测试代码演示,就…

循环服务器

一、服务器模型 在网络程序里面,通常都是一个服务器处理多 个客户机。为了处理多个客户机的请求, 服务器端的程序有不同的处理方式。 1、循环服务器模型 socket(); bind(); liste(); while(1) { accept(); while(1) { recv ret0; break; } close(acceptfd); } close…

【C++11/高级语法】bind绑定器和function函数对象

目录 bind1st和bind2nd什么时候会用到bind1st和bind2nd的底层实现原理function函数对象类型的应用示例lambda表达式的应用实践 橙色 绑定器和函数对象operator() 函数对象就是对象拥有()运算符重载函数,这个对象使用起来就跟函数调用特别相似。 1.C STL中的绑定器…

前端学习笔记--面试题系列总结

event loop它的执行顺序: 一开始整个脚本作为一个宏任务执行执行过程中同步代码直接执行,宏任务进入宏任务队列,微任务进入微任务队列当前宏任务执行完出队,检查微任务列表,有则依次执行,直到全部执行完执…