Docker网络-探索容器网络如何相互通信

news2024/11/15 14:05:08

当今世界,企业热衷于容器化,这需要强大的网络技能来正确配置容器架构,因此引入了 Docker Networking 的概念。Docker 是一种容器化平台,允许您在独立、轻量级的容器中运行应用程序和服务。Docker 提供了一套强大的网络功能,用于管理容器之间的通信和容器与外部网络的连接。

1.什么是 Docker?

这就是理解 Docker 网络所需的所有理论。现在,展示网络是如何创建的以及容器如何相互通信。要了解 Docker,您需要了解以前如何部署应用程序的历史以及现在如何使用容器部署应用程序。

 正如您在上图中看到的,旧方式在主机上有应用程序。 因此,n 个应用程序共享该操作系统中存在的库。但是,通过容器化,操作系统将拥有一个内核,这是所有应用程序之间唯一通用的东西。 因此,应用程序无法访问彼此的库。因此,简单来说, Docker是一个用于开发、交付和运行应用程序的开放平台,使用户能够借助容器将应用程序与基础设施分离,从而快速交付软件。那么,这些容器在各种情况下如何相互通信呢?

2.Docker的工作流

在深入研究 Docker 网络之前,我先向您展示 Docker 的工作流程。

正如您在上图中看到的。开发人员在易于编写的 Docker File中编写规定应用程序需求或依赖项的代码,并且该 Docker File会生成 Docker 镜像。因此,特定应用程序所需的任何依赖项都存在于此映像中。现在,Docker 容器只不过是 Docker 镜像的运行时实例。这些镜像被上传到 Docker Hub(Docker 镜像的 Git 存储库),其中包含公共/私有存储库。

您也可以从公共存储库中提取镜像,也可以将自己的镜像上传到 Docker Hub。然后,质量保证或生产团队等各个团队将从 Docker Hub 提取该镜像并准备自己的容器。这些单独的容器通过网络相互通信以执行所需的操作,这就是 Docker 网络。因此,您可以将 Docker Networking 定义为一个通信通道,所有隔离的容器通过该通道在各种情况下相互通信以执行所需的操作。

3.Docker网络的目标

灵活性——Docker 通过使不同平台上的任意数量的应用程序能够相互通信来提供灵活性。

跨平台——Docker 可以轻松地跨平台使用,借助 Docker Swarm 集群可以跨各种服务器工作。

可扩展性——Docker是一个完全分布式的网络,它使应用程序能够单独增长和扩展,同时确保性能。

去中心化——Docker 使用去中心化网络,从而能够实现应用程序的传播和高可用性。如果资源池中突然缺少容器或主机,您可以提供额外的资源或转而使用仍然可用的服务。

用户友好——Docker 可以轻松实现服务部署的自动化,使它们在日常生活中易于使用。

支持– Docker 提供开箱即用的支持。因此,能够非常简单直接地使用 Docker 企业版并获得所有功能,使得 Docker 平台非常易于使用。

为了实现上述目标,您需要称为容器网络模型的东西。

4.容器网络模型(CNM)

在告诉你到底什么是容器网络模型之前,我先给你介绍一下在理解 CNM 之前需要用到的 Libnetwork。Libnetwork 是一个开源 Docker 库,它实现了构成 CNM 的所有关键概念。

因此,容器网络模型 (CNM)  标准化了使用多个网络驱动程序为容器提供网络所需的步骤。CNM 需要像控制台这样的分布式键值存储来存储网络配置。CNM 具有 IPAM 插件和网络插件的接口。IPAM 插件 API 用于创建/删除地址池以及分配/取消分配容器 IP 地址,而网络插件 API 用于创建/删除网络以及在网络中添加/删除容器。

CNM主要构建在5个对象上:网络控制器、驱动程序、网络、端点和沙箱。容器网络模型对象

网络控制器:提供 Libnetwork 的入口点,为 Docker 引擎公开简单的 API 来分配和管理网络。由于 Libnetwork 支持多个内置和远程驱动程序,网络控制器使用户能够将特定驱动程序附加到给定网络。

驱动程序:拥有网络并负责通过多个驱动程序参与来管理网络,以满足各种用例和部署场景。

网络:在属于同一网络并与其他网络隔离的一组端点之间提供连接。因此,每当创建或更新网络时,相应的驱动程序都会收到该事件的通知。

端点: 为网络中容器公开的服务与网络中其他容器提供的其他服务提供连接。端点代表一个服务,不一定是一个特定的容器,端点在集群内也具有全局范围。

沙箱:当用户请求在网络上创建端点时创建。沙箱可以有多个端点连接到不同的网络,代表容器的网络配置,例如 IP 地址、MAC 地址、路由、DNS。

以上就是 CNM 的 5 个主要目标。

5.网络驱动程序

主要有5个网络驱动:Bridge、Host、None、Overlay、Macvlan

Bridge: 桥接网络是docker在主机上创建的私有默认内部网络。因此,所有容器都会获得一个内部 IP 地址,并且这些容器可以使用该内部 IP 相互访问。当您的应用程序在需要通信的独立容器中运行时,通常会使用 Bridge 网络。

Host:此驱动程序消除了 docker 主机和 docker 容器之间的网络隔离,以直接使用主机的网络。因此,这样一来,您将无法在同一主机、同一端口上运行多个 Web 容器,因为该端口现在是主机网络中所有容器所共用的。

None:在这种网络中,容器不附加到任何网络,并且无法访问外部网络或其他容器。因此,当您想要完全禁用容器上的网络堆栈并且 仅创建环回设备时,请使用此网络 。

Overlay:创建一个跨越参与 swarm 集群的所有节点的内部专用网络。因此,Overlay 网络促进了 swarm 服务和独立容器之间的通信,或者不同 Docker 守护进程上的两个独立容器之间的通信。

Macvlan: 允许您为容器分配 MAC 地址,使其显示为网络上的物理设备。然后,Docker 守护进程通过容器的 MAC 地址将流量路由到容器。当您希望直接连接到物理网络而不是通过 Docker 主机的网络堆栈路由时,Macvlan 驱动程序是最佳选择。

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

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

相关文章

【rust/egui】(六)看看template的app.rs:TextEdit

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 TextEdit 文本编辑框 其定义为&#…

【调试经验】Ubuntu22.04 安装和配置MySQL 8.0.34

在安装新版本的MySQL到电脑时,按着网上一些教程执行发现错误繁多,最后索性自己摸索并把服务装好了。自己也整理了一下在操作时的一些,上传分享上来希望能帮助到大家。 目录 正文 安装MySQL 配置MySQL 登录账户 方式1: 默认账户登录 方…

Tableau可视化入门实践-1

目录 Tableau 介绍基础统计图形条形图堆积图直方图饼图环形图 Tableau 介绍 Tableau是一款功能强大的数据可视化和业务智能工具,被广泛应用于各行各业的数据分析和决策支持领域。 Tableau提供了直观友好的用户界面,无需编程和复杂的数据处理技能&#x…

Tensorflow2.0搭建网络八股扩展

目录 一、自制数据集 准备:txt和图片 制作函数 二、断点继训,存取模型 1.读取保存的模型 2.保存模型 3.正确使用 三、参数提取,把参数存入txt 参数提取 四、acc/loss可视化,查看效果 1.前提开启:获取history…

ubuntu学习(六)----文件编程实现cp指令

1 思路 Linux要想复制一份文件通常指令为: cp src.c des.c 其中src.c为源文件,des.c为目标文件。 要想通过文件编程实现cp效果,思路如下 1 首先打开源文件 src.c 2 读src到buf 3 创建des.c 4 将buf写入到des.c 5 close两个文件 2 实现 vi …

并发编程基础知识篇--线程的状态和基本操作

目录 创建线程的四种方式 线程的状态和生命周期 扩展知识 线程的调度 线程状态的基本操作 interrupted 实例 join 实例 sleep 实例 扩展小知识 yield 实例 扩展 创建线程的四种方式 创建线程的四种方式 继承Thread类实现Runnable接口使用Callable和Future创…

博客系统——前端部分

目录 一、博客页面介绍 二、实现博客列表页 1、先实现导航栏 2、页面主体 左侧区域的实现:​编辑 右侧页面的实现:​编辑 博客列表页代码汇总: 三、实现博客详情页 代码实现: 四、实现博客登录页​编辑 五、博客编辑页 …

【赋权算法】Python实现熵权法

在开始之前,我们先说一下信息熵的概念。 当一件事情发生,如果是意料之中,那么这个事情就并不能拿来当做茶余饭后的谈资,我们可以说这个事情并没有什么信息和价值。而当一件不可能发生的事情发生的时候,我们可能就会觉…

挖数据四周年庆典,壕礼不断,惊喜不停!

挖数据四周岁啦!为了感谢广大用户们一路以来的支持与陪伴,我们特地准备了丰富的优惠活动,希望能够用最实际的行动来回馈您们的厚爱。四年的成长与蜕变,都是因为有您们的陪伴与鼓励,我们期待与您们一同分享这份喜悦与成…

Linux 基金会宣布正式进驻中国

在 LinuxCon 2017 (北京)即将召开前夕,我们Linux 中国会同 51CTO、开源中国对 Linux 基金会执行董事 Jim Zemlin 进行了一场远跨大洋的视频专访。 在这次专访中,Jim 先生回答了几个开源界和互联网领域关注的问题,并披…

PCI设备和PCI桥的配置空间(header_type0、header_type1)和配置命令(type0、type1)详解

1、PCI典型拓扑 2、type0和type1 名称含义Bus Number设备所在总线号Device Number设备分配到的设备号Function Number功能号,有的设备是支持多个功能的,最多8种功能Register Number要访问的寄存器地址 (1)type0和type1的区别:AD[1:0]是00代表…

几个nlp的小任务(生成式任务——语言模型(CLM与MLM))

@TOC 本章节需要用到的类库 微调任意Transformers模型(CLM因果语言模型、MLM遮蔽语言模型) CLM MLM 准备数据集 展示几个数据的结构

【AI底层逻辑】——篇章7(下):计算资源软件代码共享

续上篇... 目录 续上篇... 三、计算资源 1、第一阶段:数据大集中 2、第二阶段:资源云化 ①“云”的分类 ②虚拟化技术 ③边缘计算的普及 四、软件代码共享 总结 往期精彩: 三、计算资源 AlphaGo算法论文虽然已经发表,但…

华为OD七日集训第2期 - 按算法分类,由易到难,循序渐进,玩转OD(文末送书)

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第2期五、精心挑选21道高频100分经典题目,作为入门。第1天、逻辑分析第2天、字符串处理第3天、数据结构第4天、递归回溯第5天、二分查找第6天、深度优先搜索dfs算法第7天、动态规划 六、集训总结1、《代码…

rke安装k8s

1、修改集群中各物理机主机名hostname文件 # 查看 cat /etc/hostname # 命令修改 hostnamectl set-hostname k8s-master2、实现主机名与ip地址解析 # 查看cat /etc/hosts # 修改 vi /etc/hosts3、配置ip_forward过滤机制 # 修改 vi /etc/sysctl.conf net.ipv4.ip_forward1…

RT-Thread IO设备模型

IO设备模型 RTT提供了一套简单的I/O设备模型框架,它位于硬件和应用程序之间,共分成三层,从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。 应用程序通过I/O设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层…

递归算法学习——全排列

目录 ​编辑 一,问题描述 1.例子: 题目接口: 二,问题分析和解决 1.问题分析 2.解题代码 一,问题描述 首先我们得来先看看全排列的问题描述。全排列问题的问题描述如下: 给定一个不含重复数字的数组 n…

DTC状态变化例子 4

例子1: 此示例概述了两个操作周期排放相关的 OBD DTC 中 DTC 状态位的操作。该图显示了两个操作周期排放相关的 OBD DTC 的处理。该处理也可应用于非排放相关的 OBD DTC,此处显示仅供一般参考。 0 接收到清除诊断信息 → DTC 状态字节初始化。 1, 2 相关…

基于类电磁机制算法优化的BP神经网络(预测应用) - 附代码

基于类电磁机制算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于类电磁机制算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.类电磁机制优化BP神经网络2.1 BP神经网络参数设置2.2 类电磁机制算法应用 4.测试结果&…

RabbitMQ---订阅模型-Topic

订阅模型-Topic • Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符! • Routingkey 一般都是有一个或多个单词组成,多个单词之间以…