【Docker】Docker 网络

news2024/12/28 5:21:54

引言

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.coloradmin.cn/o/1193587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mysql】联表查询

目录 表: 思路: inner join right join left join ​编辑 表: student表 class表 思路: 1.分析查找的字段来自哪些表 2.确定使用哪种连接查询 3.确定交叉点 比如student表的name与class表的name是相等的 inner join …

面试字节、美团、阿里等公司后,才知道软件测试面试题就这些...

一、Linux系统应用和环境配置 1、Linux系统的操作命令给我说10个,一般用什么工具远程连接Linux服务器? 2、Linux中的日志存储在哪里?怎么查看日志内容? 3、Linux中top和ps命令的区别? 4、Linux命令运行的结果如何写…

MIPI配置的OV5640的使用

MIPI摄像头的数据输入FPGA的数据流: N Lane 差分串行输入 ————串转并模块 ————字节对齐处理 ————Lane同步处理处理 ————逆转LLP:Unpacked 处理 ————Byte转Pixel处理 此后写入Wfifo并且存入DDR3。

大数据毕业设计选题推荐-智慧消防大数据平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

教你遇到vcomp120.dll无法继续执行代码的解决方法

分享关于vcomp120.dll丢失的4个修复方法。在此之前,我想先简要介绍一下vcomp120.dll的作用以及它是什么。 首先,让我们来了解一下vcomp120.dll的作用。vcomp120.dll是一个动态链接库文件,它是由Microsoft Visual C 2012 Redistributable Pac…

论文阅读[121]使用CAE+XGBoost从荧光光谱中检测和识别饮用水中的有机污染物

【论文基本信息】 标题:Detection and Identification of Organic Pollutants in Drinking Water from Fluorescence Spectra Based on Deep Learning Using Convolutional Autoencoder 标题译名:基于使用卷积自动编码器的深度学习,从荧光光谱…

Java算法:快速排序

一、快速排序 快速排序算法是对冒泡排序算法的一种改进算法,在当前所有内部排序算法中,快速排序算法被认为是最好的排序算法之一。 基本思想:通过一趟排序将待排记录分隔成独立的左右两部分,左边的子序列中所有数据都比右边子序列…

合并文档的 7 个免费 PDF 合并平台

如果没有合适的软件,将文档合并成 PDF 可能会很棘手。因此,这里有六个最好的 PDF 合并平台可以帮助您。 如果您每天处理多组 PDF 文件或其他文档,将它们组合成一个更大的文档可以轻松处理。PDF 合并应用程序可以帮助您使用工具加快此过程&am…

ESP32 下蓝牙播放音乐

之前发过一贴: esp32 下蓝牙播放音乐歌词的获得_esp32 蓝牙音频-CSDN博客 说的是esp32 蓝牙接收音频流同步获得歌词的方案,但是有个很核心的内容由于硬件原因没有谈及,就是播放音乐。 这几天被抖音上各种水桶卡顿刺激了,经过一…

模拟实现qsort()

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

24年PMP考试如何安排?怎么备考?

24年pmp考试不出意外的话就是3、6、9、12月了。(PMP干货文末) PMP如何备考 24年的PMP考试还有3个多月,现在开始备考,再合适不过,我这里提出四点备考建议,希望能帮到备考的大家: 一、要看的三份…

openGauss学习笔记-119 openGauss 数据库管理-设置数据库审计-设置文件权限安全策略

文章目录 openGauss学习笔记-119 openGauss 数据库管理-设置数据库审计-设置文件权限安全策略119.1 背景信息119.2 数据库程序目录及文件权限119.3 建议 openGauss学习笔记-119 openGauss 数据库管理-设置数据库审计-设置文件权限安全策略 119.1 背景信息 数据库在安装过程中…

Python算法:动态规划解决0-1背包问题

动态规划(Dynamic Programming,简称DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,它能够将问题…

js将图片文件转为base64格式

/***图片文件转换成BASE64字符串,异步任务*param {File} file图片文件对象*return {String} BASE64字符串*/ const getBase64 (file: File) > new Promise((resolve: (url: string) > void, reject) > {const reader new FileReader();reader.onload ()…

一款基于.Net开发、开源、支持多平台云存储文件管理器

目录 01 项目简介02 项目代码03 部分截图04 项目地址 今天给大家推荐一款基于基于.Net开发、开源的,支持多平台的云存储文件管理器。 01 项目简介 Camelotia是一款云存储文件管理器,基于.Net UI框架和ReactiveUI框架开发的,目前支持的平台有…

GTDB-Tk基因组物种注释

文章目录 安装GTDB-Tk v2.3.3 and gtdbtk_r214_data.tar.gzGTDB-Tk v2.1.1 and gtdbtk_r207_v2_data.tar.gzGTDB-Tk 1.3.0 数据库classify_wf 物种注释一步使用分步使用批量dRep以及GTDB注释注意报错由于基因组存在重复id导致Pfam报错 查看已经安装的数据库iTOL可视化问题pplac…

时间序列预测(1) — 时间序列预测研究综述

目录 1 什么是时间序列预测? 2 时间序列预测的应用场景与分类 3 时间序列数据的特性 4 时序预测评价指标 5 基于深度学习的时间序列预测方法 5.1 卷积神经网络 5.2 循环神经网络 5.3 Transformer类模型 1 什么是时间序列预测? 时间序列:指对某种事物发展…

LabVIEW在OPC中使用基金会现场总线

LabVIEW在OPC中使用基金会现场总线 本文讨论了如何使用开放的OPC(用于过程控制的OLE)接口访问基金会现场总线网络和设备。 NI-FBUS通信管理器随附了一个OPC数据访问服务器。 (NI-FBUS Configurator自动包含NI-FBUS通信管理器。&#xff09…

JVM-虚拟机的故障处理与调优案例分析

案例1:大内存硬件上的程序部署策略 一个15万PV/日左右的在线文档类型网站最近更换了硬件系统,服务器的硬件为四路志强处理器、16GB物理内存,操作系统为64位CentOS 5.4,Resin作为Web服务器。整个服务器暂时没有部署别的应用&#…

深度学习pytorch之hub模块

pytorchhub模块里面有很多模型 https://pytorch.org/hub/ github网址:https://github.com/pytorch/pytorch import torch model torch.hub.load(pytorch/vision:v0.10.0, fcn_resnet50, pretrainedTrue) # or # model torch.hub.load(pytorch/vision:v0.10.0, fc…