Docker 容器网络模式详解

Docker 容器网络模式详解

1.1 引言

1.1.1 Docker 网络简介

Docker 是一个开源的应用容器引擎,它允许开发者将应用和依赖打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器采用沙箱机制,彼此隔离,不会相互干扰。Docker 网络是容器之间以及容器与宿主机之间通信的基础。

1.1.2 Docker 网络的技术基础

Docker 网络栈基于 Linux 的网络命名空间(Namespace)和虚拟网络接口(veth pairs)实现。通过 Docker 提供的几种网络模式,容器可以灵活选择与宿主机和其他容器的隔离或连接方式,从而满足不同的应用需求。

1.1.3 为什么需要不同的网络模式

不同的网络模式满足了多种网络需求。例如,某些应用需要高性能网络传输,而另一些则可能需要严格的网络隔离。Docker 提供了多种网络模式,包括 Bridge(桥接)、Host(主机)、None(无)、Container(容器)等模式,以适应这些需求。


2. Bridge(桥接)模式

2.1 原理与特性

Bridge 模式是最常用的 Docker 网络模式。每个 Docker 守护进程都会自动创建一个名为 docker0 的虚拟网桥,类似于物理交换机的工作方式,用于连接 Docker 容器和宿主机网络。

Docker 在每个容器启动时创建一对虚拟网络接口(veth pairs)类似于网线,一端连接到容器网络命名空间,另一端连接到 docker0,形成容器与宿主机之间的通信链路。此外,Docker 使用 iptables 创建 NAT 规则,让容器可以通过宿主机访问外部网络。

2.2 适用场景
  • 当需要容器间通信时
  • 当容器需要与宿主机或外部网络通信时
2.3 配置方法

使用默认的桥接网络时,可以直接省略 --network 参数:

docker run -d --name my_container nginx

使用自定义的桥接网络时:

docker network create my_bridge_network
docker run -d --name my_container --network my_bridge_network nginx
2.4 实战演练

假设我们有两个容器需要互相通信,可以按照以下步骤操作:

  1. 创建自定义桥接网络:docker network create my_bridge_network
  2. 启动两个容器并连接到该网络:
    docker run -d --name container1 --network my_bridge_network busybox sleep 1000
    docker run -d --name container2 --network my_bridge_network busybox sleep 1000
    
  3. 在一个容器中 ping 另一个容器的 IP 地址或容器名,验证通信。

3. Host(主机)模式

3.1 原理与特性

在 Host 模式下,容器直接使用宿主机的网络堆栈,意味着容器和宿主机共享相同的网络命名空间。容器不再有独立的 IP 地址,而是使用宿主机的 IP 地址和端口。Host 模式减少了网络隔离,但提高了性能。

3.2 适用场景
  • 高性能网络应用,例如低延迟实时应用
  • 应用需要直接访问宿主机网络接口
3.3 配置方法

在启动容器时添加 --network host 参数:

docker run -d --name my_container --network host nginx
3.4 实战演练

运行一个 Nginx 容器并使用 Host 网络模式:

  1. 启动容器:docker run -d --name my_container --network host nginx
  2. 通过宿主机的 IP 地址直接访问 Nginx 服务。

注意:Host 模式下端口冲突可能会导致启动失败,建议合理规划端口。


4. None(无)模式

4.1 原理与特性

None 模式下,容器没有网络功能,不会被分配任何网络接口,也无法与其他容器或宿主机通信。这种模式为需要完全网络隔离的应用提供了较高的安全性。

4.2 适用场景
  • 运行不需要网络连接的任务
  • 高度安全的环境,需要严格限制网络访问
4.3 配置方法

启动容器时添加 --network none 参数:

docker run -d --name my_container --network none busybox
4.4 实战演练

启动一个 BusyBox 容器并验证它没有网络连接:

docker exec -it my_container ping google.com

应提示网络不可达。


5. Container(容器)模式

5.1 原理与特性

Container 模式允许新创建的容器共享另一个已存在的容器的网络命名空间。这样两个容器可以像是同一台机器上的进程一样,共享网络接口、IP 地址和端口。

5.2 适用场景
  • 多个服务组件紧密协作,减少网络开销
  • 服务组件间通信需要最小的网络延迟
5.3 配置方法

在启动容器时,添加 --network container:<name|id> 参数,使其共享指定容器的网络:

docker run -d --name my_container --network container:existing_container busybox
5.4 实战演练

创建一个基础容器,然后启动一个新容器与之共享网络:

  1. 启动第一个容器:docker run -d --name existing_container nginx
  2. 启动第二个容器并共享第一个容器的网络:
    docker run -d --name my_container --network container:existing_container busybox
    
  3. 测试两个容器间的通信,验证网络共享效果。

6. 常见问题

6.1 无法访问容器
  • 原因:容器未正确启动、容器内的服务未监听网络、网络配置错误等。
  • 解决方法:检查容器日志、网络配置和防火墙规则。
6.2 端口冲突
  • 原因:尝试在同一端口上启动多个服务。
  • 解决方法:更改服务端口号或选择不同的网络模式。
6.3 DNS 解析问题
  • 原因:DNS 配置不正确导致容器无法解析域名。
  • 解决方法:在 /etc/docker/daemon.json 中设置 DNS,例如:
    {"dns": ["8.8.8.8", "8.8.4.4"]
    }
    
    然后重启 Docker 服务。
6.4 网络性能问题
  • 原因:网络延迟高或吞吐量低,可能因网络配置不当或宿主机网络拥塞导致。
  • 解决方法:优化网络配置,减少网络拥塞,或通过 docker statsiftop 等工具检查资源使用情况。
6.5 排查工具
  • 检查容器状态docker ps -a
  • 查看容器日志docker logs <container_name>
  • 网络配置检查docker inspect <container_name>
  • 测试连通性pingcurl 命令。

7. Docker 网络模式与 VMware 虚拟机网络模式的对比

Docker 容器和 VMware 虚拟机在网络模式上有一些相似性,但由于两者的虚拟化机制不同,网络模式的实现和功能侧重点也有所不同。以下是主要的网络模式对比:

7.1 Bridge 模式对比

虽然vmware也有一种网络模式叫bridge, 但是docker的bridge模式和vmware的NAT模式更像

模式Docker 的 Bridge 模式VMware 的 NAT 模式
实现方式使用 docker0 虚拟网桥连接容器和宿主机网络;每个容器分配独立 IP 地址,通过 NAT 转发流量。VMware 的 NAT 模式通过虚拟 NAT 网关和虚拟交换机连接 VM 和宿主机,所有 VM 通过共享宿主机 IP 访问外网。
适用场景容器间通信,容器访问外网,但宿主机与容器 IP 互不冲突。需要 VM 与宿主机隔离,但又要保证 VM 能访问外网。
隔离性中等,容器之间可见;宿主机与容器间有一定隔离。中等,虚拟机间的隔离性较高,但共享宿主机 IP 出外网。

总结:两者都使用 NAT 技术,但 Docker 的 Bridge 模式可以通过自定义网络来精细控制容器间隔离,适用于微服务环境下的容器化应用。VMware 的 NAT 模式则更适用于较传统的网络隔离场景。

7.2 Host 模式对比
模式Docker 的 Host 模式VMware 的 Bridged 模式
实现方式容器直接共享宿主机的网络命名空间,使用宿主机 IP。VM 通过虚拟交换机直接连接到宿主机的物理网络接口,获得局域网 IP 地址。
适用场景需要容器与宿主机密切交互的高性能应用场景。需要 VM 直接加入局域网,与其他局域网设备通信。
隔离性较低,容器和宿主机之间没有网络隔离。较高,VM 使用独立 IP 地址和 MAC 地址,在局域网中被视为独立设备。

总结:Docker Host 模式强调与宿主机的网络性能和通信共享,而 VMware 的 Bridged 模式允许 VM 直接加入物理网络,且拥有独立 IP 地址,在隔离性上更适合传统的独立主机需求。

7.3 None 模式对比
模式Docker 的 None 模式VMware 的 Host-Only 模式
实现方式禁用容器网络,容器完全隔离,无 IP 地址。VM 通过虚拟网络适配器与其他 VM 或宿主机通信,不能访问外网。
适用场景适用于无网络需求或安全要求极高的隔离场景。适用于需要 VM 间隔离和宿主机隔离的网络测试或开发环境。
隔离性完全隔离,没有网络连接。较高,仅限于 VM 间通信,无外网访问。

总结:Docker 的 None 模式完全切断网络连接,而 VMware 的 Host-Only 模式则允许 VM 和宿主机之间的有限通信,适用于不同的测试和隔离需求。


7.4 总结
网络需求Docker 网络模式VMware 虚拟机网络模式
容器/虚拟机间通信Bridge 模式,灵活隔离控制Host-Only 模式,适合隔离
与宿主机共享网络Host 模式,性能最高NAT 或 Bridged 模式
完全隔离None 模式Host-Only 模式
高性能与外网访问Host 模式Bridged 模式

Docker 和 VMware 的网络模式虽然在功能上存在部分重叠,但二者的技术实现和应用场景有所不同。Docker 更强调轻量级隔离和高效网络性能,适合动态扩展的微服务环境;而 VMware 提供更接近物理机的网络隔离,适合需要独立主机的虚拟化环境。根据应用场景和网络需求选择合适的模式,能够充分发挥容器和虚拟机的优势。


8. 参考资料

  • Docker 官方文档
  • Docker 网络指南
  • Docker Overlay network driver

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

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

相关文章

Linux 配置JDK

文章目录 一、下载Oracle-JDK1.1、如何正确的下载JDK二、配置JDK环境变量2.1 环境变量配置2.1.1、修改vim /etc/profile 添加jdk的路径一、下载Oracle-JDK 1.1、如何正确的下载JDK 首先我要安装的是oracle-jdk,这个时候什么地方都不要去,就去oracle的官网,然后找到,jdk的下…

springBoot 自动配置与starter

目录 一、自动配置 Springboot实现自动配置的核心机制 Conditional的作用是什么&#xff1f; 如何自定义自动配置&#xff1f; 步骤 例子分析 自动配置的优先级 如何禁用特定的自动配置&#xff1f; 二、starter 如何理解Spring Boot中的starter&#xff1f; 如何自…

Json 类型与多值索引 — OceanBase 4.3.2 AP 功能体验

本文来自 2024年OceanBase技术征文大赛——“让技术被看见 | OceanBase 布道师计划”的用户征文。也欢迎更多的技术爱好者参与征文&#xff0c;赢取万元大奖。和我们一起&#xff0c;用文字让代码跳动起来&#xff01; 参与2024年OceanBase技术征文大赛>> MySQL在5.7.8…

Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践

Spark 的介绍与搭建&#xff1a;从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 目录 一、Spark on YARN 的优势 &#xff08;一&#…

java后端工程师转行AI大模型岗,工作、自我提升两不误!

随着技术的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域&#xff0c;如Java&#xff0c;转向人工智能领域&#xff0c;今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…

Rust-宏编程

巴山楚水凄凉地&#xff0c;二十三年弃置身。 怀旧空吟闻笛赋&#xff0c;到乡翻似烂柯人。 沉舟侧畔千帆过&#xff0c;病树前头万木春。 今日听君歌一曲&#xff0c;暂凭杯酒长精神。 ——《酬乐天扬州初逢席上见赠》唐刘禹锡 【哲理】翻覆的船只旁仍有千千万万的帆船经过&a…

leetcode912.排序数组的题解

题目描述&#xff1a; 题目要求在不使用任何内置函数的情况下解决问题&#xff0c;时间复杂度为 O(nlog(n))。 笔者使用了快速排序&#xff0c;但是直接使用最原始的快速排序&#xff0c;有些特殊的测试用例会超时。 1&#xff09;如果数组本身基本有序&#xff0c;则使用原始…

TikTok品牌出海:从“流量为王”到“价值为王”

随着市场竞争的加剧&#xff0c;品牌逐渐意识到&#xff0c;仅仅依靠流量已不足以在海外市场立足&#xff0c;必须实现从“流量为王”到“价值为王”的转变。本文Nox聚星将和大家探讨品牌如何与TikTok达人合作&#xff0c;在海外市场中建立长期稳定的品牌形象。 一、品牌出海的…

纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践

1、测试框架选择 hdc&#xff1a;类似 android 系统的 adb 命令&#xff0c;提供设备信息查询&#xff0c;包管理&#xff0c;调试相关的命令ohos.UiTest&#xff1a;鸿蒙 sdk 的一部分&#xff0c;类似 android sdk 里的uiautomator&#xff0c;基于 Accessibility 服务&…

Kafka 可观测性最佳实践

Kafka 概述 Kafka 是由 LinkedIn 开发一个分布式的基于发布订阅模式的消息队列&#xff0c;是一个实时数据处理系统&#xff0c;可以横向扩展。与 RabbitMQ、RockerMQ 等中间件一样拥有几大特点&#xff1a; 异步处理服务解耦流量削峰 监控 Kafka 是非常重要的&#xff0c;因…

《XGBoost算法的原理推导》12-13树的叶子节点权重w和映射关系q 公式解析

本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 我们重新定义一颗树&#xff0c;包括两个部分&#xff1a; 叶子结点的权重向量 w w w&#xff1b;实例 -> 叶子结点的映射关系 q q q&#xff08;本质是树的…

电商API:开启电商新时代的关键钥匙

一、电商API&#xff1a;定义与发展 电商API&#xff0c;即应用程序编程接口&#xff0c;是连接不同软件系统的桥梁&#xff0c;在电商领域中发挥着至关重要的作用。电商API的发展历程可以追溯到20世纪90年代&#xff0c;当时电子商务刚刚兴起&#xff0c;企业开始意识到通过A…

C++__XCode工程中Debug版本库向Release版本库的切换

Debug和Release版本分别设置编译后&#xff0c;就分别得到了对应的lib库&#xff0c;如下图&#xff1a; 再生成Release后如下图&#xff1a;

消费疲软下,家居品牌如何利用营销实现新的突围与增长?

在消费疲软的大环境下&#xff0c;家居品牌面临着前所未有的挑战与机遇。尤其以耐消品为主的家居行业&#xff0c;也受到一定程度影响——有效需求不足导致产能过剩&#xff0c;营销乏力&#xff0c;市场竞争开始变得激烈&#xff0c;不少家居品牌正在面临业绩压力。家居品牌如…

连985都没有面试机会 二本就更没戏了:瞎说,这就是三年高考的意义

最近有二本同学在直播里说&#xff1a;“看到很多面经说&#xff0c;连985同学都没有面试机会&#xff0c;而且是零offer。那我们二本就更没戏了。” 其实这种言论是在瞎扯。 我们一直在强调校招是分层的。 现在学生太多了&#xff0c;而且招聘对学历是有要求的。比如大厂的…

微信小程序运营日记(第四天)

2024年11月6日-星期三-2024年45周 {微信小程序的时间板块进行一个增加&#xff0c;增加&#xff1a;2024年第45周|共53周&#xff0c;星期三&#xff0c;今年时间剩余&#xff0c;本周时间剩余} 开源竞争&#xff1a; 开源竞争&#xff08;当你无法掌握一个技术就开源这个技术…

高分辨率高电流监控器电路设计

1 简介 该单电源电流检测解决方案可以在分流电阻器上测量50mA 至10A 范围内的电流信号。电流检测放大器可以在0V 至75V 的宽共模电压范围内测量分流电阻器。全差分放大器(FDA) 执行单端至差分转换&#xff0c;并以1MSPS 的最大数据速率驱动范围为5V 的SAR ADC 差分输入。可以调…

ALB搭建

ALB: 多级分发、消除单点故障提升应用系统的可用性&#xff08;健康检查&#xff09;。 海量微服务间的高效API通信。 自带DDoS防护&#xff0c;集成Web应用防火墙 配置&#xff1a; 1.创建ECS实例 2.搭建应用 此处安装的LNMP 3.创建应用型负载均衡ALB实例 需要创建服务关联角…

【客观理性深入讨论国产中间件及数据库-科创基础软件】

随着国产化的进程&#xff0c;越来越多的国企央企开始要求软件产品匹配过程化的要求&#xff0c; 最近有一家银行保险的科技公司对行为验证码产品就要求匹配国产中间件&#xff0c; 于是开始了解国产中间件都有哪些厂家 一&#xff1a;国产中间件主要产品及厂商 1 东方通&…

了解 MybatisPlus中@InterceptorIgnore防止拦截器拦截 基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Java基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 一开始是因为报错多租户的问题&#xff0…