0

0

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

爱谁谁

爱谁谁

发布时间:2025-07-22 08:26:16

|

536人浏览过

|

来源于php中文网

原创

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

我们先从 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 地址等。

Quinvio AI
Quinvio AI

AI辅助下快速创建视频,虚拟代言人

下载

除了前面提到的三种开箱即用的网络方案外,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 取代,并未成为主流,因此这种网络模式实际上很少被使用。

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

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

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

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

327

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.10.07

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

393

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

574

2023.08.10

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

252

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

495

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

400

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

438

2024.04.08

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.6万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号