容器间通讯(前面Linux网络是在看不下去直接看这篇)

发布时间 - 2025-07-22 00:00:00    点击率:

在深入探讨容器间通信原理之前,我们已经了解了虚拟化网络的基础知识。现在,让我们利用这些知识来解构容器间的通信机制。毕竟,应用知识解决实际问题是学习网络虚拟化的最终目标。

我们先从 Docker 开始,讨论 Docker 提供的容器通信方案。在介绍 CNI 下的 Kubernetes 网络插件生态后,你可能会发现 Docker 的网络通信相对简单,甚至对于某些分布式系统的需求来说显得过于简陋。然而,尽管容器网络方案多种多样,但通信主体始终是固定的,包括没有物理设备的虚拟主体(如容器、Pod、Service、Endpoints 等)、不需要跨网络的本地主机以及通过网络连接的外部主机三种层次。

所有容器网络通信问题都可以归结为三种情况:本地主机内部的多个容器之间的通信、本地主机与其内部容器之间的通信,以及跨越不同主机的多个容器之间的通信。这些原理在很多方面是相通的(例如,同班同学之间的交流、同班老师和同学之间的交流、同班同学和外班同学之间的交流)。因此,我认为 Docker 网络的简单性在检验你是否真正理解了前面所学的网络知识时,反而是一种优势。

在操作层面上,Docker 的网络方案可以通过 docker run --network 参数直接指定,或者先通过 docker network create 创建后再让容器使用。在安装 Docker 的过程中,宿主机会自动创建一个名为 docker0 的网桥,以及三种不同的 Docker 网络:bridge、host 和 none。你可以通过 docker network ls 命令查看这三种网络,具体如下所示:

$ docker network ls
NETWORK ID          NAME                                    DRIVER              SCOPE
2a25170d4064        bridge                                  bridge              local
a6867d58bd14        host                                    host                local
aeb4f8df39b1        none                                    null                local

这三种网络对应着 Docker 提供的三种开箱即用的网络方案,分别为:

使用过虚拟机的读者应该对这些模式并不陌生。

桥接模式,通过 --network=bridge 指定,这是未指定网络参数时的默认网络。在桥接模式下,Docker 会为新容器分配独立的网络名称空间,创建 veth pair,一端连接到容器,另一端连接到 docker0 网桥上。Docker 会为每个容器自动分配 IP 地址,默认配置下的地址范围是 172.17.0.0/24,docker0 的地址默认是 172.17.0.1,并且会设置所有容器的网关为 docker0。这样,所有连接到同一网桥的容器可以直接通过二层网络进行通信,而在此范围之外的容器和主机则需要通过网关访问(具体过程我在介绍 Linux Bridge 时已经详细讲解过,这里不再赘述)。

主机模式,通过 --network=host 指定。在主机模式下,Docker 不会为新容器创建独立的网络名称空间,容器的所有网络设施(如网卡、网络栈等)都将直接使用宿主机上的资源,因此容器不会拥有独立的 IP 地址。在这种模式下与外界通信不需要进行 NAT 转换,性能损耗较小,但其缺点也显而易见,因为没有隔离,无法避免网络资源冲突,比如端口号不能重复。

空置模式,通过 --network=none 指定。在空置模式下,Docker 会为新容器创建独立的网络名称空间,但不会创建任何虚拟的网络设备,此时容器只能看到一个回环设备(Loopback Device)。这种方式是为了方便用户进行自定义的网络配置,比如自己添加网络设备、自己管理 IP 地址等。

除了前面提到的三种开箱即用的网络方案外,Docker 还支持用户自行创建的网络,例如:

容器模式,创建容器后通过 --network=container:容器名称 指定。在容器模式下,新创建的容器将加入指定容器的网络名称空间,共享所有网络资源,但其他资源(如文件、PID 等)默认仍然是隔离的。两个容器可以通过回环地址(localhost)直接通信,端口号等网络资源不能有冲突。

MACVLAN 模式,通过 docker network create -d macvlan 创建。这种网络模式允许为容器指定一个副本网卡,容器通过副本网卡的 MAC 地址使用宿主机上的物理设备,因此在追求通信性能的场景中,这种网络是最佳选择。需要注意的是,Docker 的 MACVLAN 仅支持 Bridge 通信模式,因此在功能表现上与桥接模式类似。

Overlay 模式,通过 docker network create -d overlay 创建。Docker 所说的 Overlay 网络实际上是指 VXLAN,这种网络模式主要用于 Docker Swarm 服务之间的通信。然而,由于 Docker Swarm 被 Kubernetes 取代,并未成为主流,因此这种网络模式实际上很少被使用。

总结:虚拟化网络是容器编排不可或缺的功能,网络的功能和性能与应用程序各服务之间的通信密切相关,这一点你需要重点关注。在实际生产中,容器编排系统就是通过网络交互的一批容器共同对外提供服务,其中的开发、调试、效率优化等工作都离不开这些基础的网络知识。

一课一思:在使用 Docker 时,你是否关注或调整过它的容器通信网络?你在哪些需求场景下进行了调整?


# linux  # docker  # ai  # 分布式  #   # kubernetes  # 虚拟化  # 三种  # 会为  # 模式下  # 连接到  # 多个  # 不需要  # 可以通过  # 同学之间  # 桥接  # 网桥 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php 三元运算符实例详细介绍  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何用虚拟主机快速搭建网站?详细步骤解析  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  南京网站制作费用,南京远驱官方网站?  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel怎么在Blade中安全地输出原始HTML内容  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何在IIS中新建站点并解决端口绑定冲突?  javascript中对象的定义、使用以及对象和原型链操作小结  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel如何实现用户注册和登录?(Auth脚手架指南)  中山网站制作网页,中山新生登记系统登记流程?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  在Oracle关闭情况下如何修改spfile的参数  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  清除minerd进程的简单方法  JavaScript如何操作视频_媒体API怎么控制播放  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  常州企业网站制作公司,全国继续教育网怎么登录?  如何在云虚拟主机上快速搭建个人网站?  JS实现鼠标移上去显示图片或微信二维码  Swift中switch语句区间和元组模式匹配  昵图网官方站入口 昵图网素材图库官网入口  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  简单实现jsp分页  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  进行网站优化必须要坚持的四大原则  如何在IIS中配置站点IP、端口及主机头?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  微信公众帐号开发教程之图文消息全攻略  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Bootstrap整体框架之JavaScript插件架构  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  网站制作壁纸教程视频,电脑壁纸网站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?