了解Docker的文件系统网络模式的基本原理

news2024/11/18 7:34:49

Docker文件系统

Linux基础

一个Linux系统运行需要两个文件系统: bootfs + rbootfs

bootfs(boot file system)

bootfs 即引导文件系统,Linux内核启动时使用的文件系统。对于同样的内核版本的不同Lunx发行版本,其bootfs是一样的。

引导文件系统包括:启动所需的映像文件引导加载程序(bootloader)。image.png
在 Linux 系统中,bootfs 通常是一个小型的文件系统,容纳了以下重要的组件:

  • 内核映像(vmlinuz):这是 Linux 内核的压缩形式,它是操作系统的核心部分。内核映像负责初始化系统硬件、加载其他驱动程序和模块,并启动用户空间进程。
  • 初始 RAM 磁盘(initrd)或初始 RAM 文件系统(initramfs):这是一个临时的文件系统,用于在 Linux 内核引导过程中提供额外的驱动程序和工具。它包含了用于引导过程中所需的必要文件和脚本。
  • 引导加载程序(bootloader):这是一个位于计算机固件和操作系统之间的软件,负责加载和启动操作系统。常见的引导加载程序包括 GRUB(GRand Unified Bootloader)和 LILO(LInux LOader)

bootfs 只是引导过程中的一个阶段,一旦 Linux 内核成功加载并初始化,它将卸载 bootfs 并切换到其他文件系统,如根文件系统(rootfs)。

通常,为了保证安全,引导文件系统一般是挂载为只读的。

rootfs(root file system)

rootfs 是 Linux 系统中的一个概念,它指的是根文件系统(Root Filesystem),也被称为根目录或根挂载点。这个文件系统在不同的Linux发行版本间是不一样的。
image.png
在 Linux 中,根文件系统是文件系统层次结构的顶级目录,包含了操作系统中所有文件和目录的根源。根文件系统是文件系统的起点,它是整个文件系统层次结构的起点。

典型的目录结构 /dev, /proc, /bin, /etc, /lib, /usr, and /tmp 等。

在启动完成之后,根文件系统改为读写模式,用户可以对其进行修改。

Docker镜像的基本原理

镜像的本质是文件系统,容器就是一个进程,进程被Namespace隔离,受到Cgroups 限制。

Docker 使用一种称为容器文件系统的技术来管理和组织容器中的文件。容器文件系统提供了容器内部文件和目录的隔离和管理。

在 Docker 中,每个容器都有自己的文件系统,这个文件系统是从一个基础镜像(Base Image)开始构建的。基础镜像是一个只读的文件系统模板,包含了操作系统和其他预装的软件。当你创建一个容器时,Docker 会在基础镜像上创建一个可写的容器层(Container Layer),用于保存容器内部的修改和新增的文件。
image.png

  • 基础镜像是只读的,Docker利用 union mount (联合挂载)增加更多只读的文件,看起来就像文件系统,即容器。
  • 所有 Docker 容器都共享主机系统的 bootfs 即 Linux 内核。

Docker 目前支持的文件系统包括 OverlayFS, AUFS, Btrfs, VFS, ZFS 和 Device Mapper。

  • AUFS(Advanced Multi-Layered Unification Filesystem):AUFS 是 Docker 最早使用的容器文件系统之一。它通过将多个文件系统层堆叠在一起,形成一个可写的容器层和只读的基础镜像层。
  • OverlayFS:OverlayFS 是 Linux 内核提供的一种联合文件系统,也被广泛用于 Docker。它类似于 AUFS,通过将多个文件系统层叠在一起,并提供一个统一的虚拟文件系统。
  • Btrfs:Btrfs 是一个先进的复制文件系统,它也可以用作 Docker 容器的文件系统。与 AUFS 和 OverlayFS 类似,Btrfs 通过层叠多个文件系统来实现容器文件系统的管理。
Linux 发行版Docker 推荐使用的存储驱动
Docker on Ubuntuoverlay2 (16.04 +)
Docker on Debianoverlay2 (Debian Stretch), aufs, devicemapper
Docker on CentOSoverlay2
Docker on Fedoraoverlay2

表来源:https://yeasy.gitbook.io/docker_practice/underly/ufs

文件系统

AUFS

一种联合文件系统,就是把不同物理位置的目录通过mount到一个目录中。

DVD/CD

.
├── A
│ ├── a
│ └── x
└── B
├── b
└── x

mount -t aufs -o dirs=./A:./B none ./C

特点:

  • 默认只有第一层可写,其余只读。
  • 增加文件:默认情况,新增文件放在最上面的可写层中。
  • 删除文件:底下各层是只读的,AUFS 使用 whiteout 机制,它的实现是通过在上层的可写的目录下建立对应的whiteout隐藏文件来实现的。
  • 修改文件: AUFS 利用其 CoW (copy-on-write)特性来修改只读层中的文件 。修改文件时将文件拷贝到可写层再进行修改。
  • 节省空间:多容器之间,共享分层,减少物理空间占用。
  • 查找文件性能:层数越深,性能越低,制作镜像时,注意减少层数。
  • 写入性能: CoW特性在写入大型文件时第一次会出现延迟。

OverlayFS

OverlayFS 的发展分为两个阶段,2014 年,OverlayFS 第一个版本被合并到 Linux 内核 3.18 版本中,
此时的 OverlayFS 在 Docker 中被称为overlay文件驱动。由于第一版的overlay文件系统存在很多弊
端, Linux 内核在 4.0 版本对overlay做了很多必要的改进,此时的 OverlayFS 被称之为overlay2。

overlay2 和 AUFS 类似,它将所有目录称之为层(layer),overlay2 的目录是镜像和容器分层的基础,而把这些层统一展现到同一的目录下的过程称为联合挂载(union mount)。

存在的问题

  • 容器间数据共享不方便
  • 文件存储于联合文件系统中,不易于宿主机访问;
  • **对于修改、删除类操作,一般效率比较低,**比如 I/O要求较高的应用MySQL、Redis,不适合容器化。
  • 删除容器会使得数据丢失:容器关闭之后,保留在上层的数据会随容器生命周期完结而消失。

Docker提供了数据卷处理这些问题。

Docker网络模式

网络基本原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),容器启动时,根据Docker网桥的网段分配给容器一个IP地址。
容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
bridge模式
Docker网桥是宿主机虚拟出来的,不是真实存在,外部网络无法寻址到,外部网络无法通过容器ID直接访问到容器。
如果希望外部能访问到,则需要进行端口映射,映射之后的访问格式:[宿主机IP]:[映射的端口]

网络模式

模式配置描述
bridge–net=bridge默认
host–net=host容器和宿主机共享Network namespace
container– net=container:NAME_or_ID指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,比如共享 IP、端口范围等。注意不是跟宿主机共享。
none–net=none独立的Network namespace,没有进行任何网络设置(如分配veth pair、网桥连接、配置IP等),需要自行配置。
overlay– driver overlay

bridge模式

Docker启动的时候,会在宿主机上创建虚拟网桥Docker0,之后我们运行的容器默认会连接到这个网桥上。

在创建启动容器的时候,从Docker0分配一个IP给容器使用,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以veth*这样类似的名字命名,并将这个网络设备加入到docker0网桥中。

veth pair 包括两个虚拟网络接口:veth0 和 veth1。这两个接口被创建成一对,形成一个虚拟网卡链路。数据从一个接口进入,通过虚拟链路传输,然后从另一个接口出去。

bridge模式

在这种模式下,我们可以看到Internet无法直接访问我们的容器,所以,需要通过端口映射-p才能让外部访问。

host模式

在此模式下,容器将不会获得一个独立的Network Namespace,而是 和宿主机共用一个Network Namespace,使用宿主机的IP和端口。

容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是宿主机上已经使用的端口就会被占用,网络的隔离性不好。

外部能直接访问到容器A。

host模式

container模式

新创建的容器和已经存在的一个容器共享一个 Network Namespace,比如 共享 IP、端口范围等。而不是和宿主机共享Network Namespace。
container模式

none模式

Docker 容器拥有自己的 Network Namespace,但是,并不为Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。需要我们自己为 Docker 容器添加网卡、配置 IP 等
none模式

overlay模式

一种容器网络模式,它可以在多个Docker主机之间创建一个虚拟网络,使得容器可以跨主机进行通信。

当使用Overlay模式时,Docker会创建一个覆盖网络(Overlay Network),该网络会跨越多个主机,并且容器可以通过该网络进行通信。Overlay网络使用VXLAN(Virtual Extensible LAN)技术来实现容器之间的通信。

适用于容器编排和集群管理工具,如Docker Swarm和Kubernetes,以实现容器的高可用性和弹性扩展。

Overlay网络的性能可能会受到网络延迟和带宽的影响,因此在设计和配置Overlay网络时需要考虑这些因素。
image.png
特点总结:

  • 容器多主机通信:使得运行在不同主机上的容器间的通信,就像在同一个网络中的一样。
  • 跨主机网络:在多台主机(计算机)上创建一个逻辑网络,使得这些主机上的容器或虚拟机可以互相通信和交互。
  • 路由和发现:使用 VXLAN(Virtual Extensible LAN)技术来实现容器之间的网络隔离和路由。

参考

https://www.qikqiak.com/k8s-book/docs/10.Docker%20Swarm.html
https://yeasy.gitbook.io/docker_practice/underly/ufs

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

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

相关文章

3ds Max2024安装教程(最新最详细)附网盘资料

目录 一.简介 二.安装步骤 一.简介 3DS Max是由Autodesk公司开发的一款专业三维建模、动画和渲染软件,广泛应用于影视、游戏、建筑和工业设计等领域。 3DS Max的主要特点和功能包括: 三维建模:3DS Max提供了各种强大的建模工具&#xff…

vue elementui 动态表头、表头合并、合并行、合并列、行根据某字段内容一致的进行合并、表格列展开收起功能

效果图&#xff1a; 1、表头第1、2列合并 第一种写法&#xff08;普通表头&#xff09;&#xff1a; <el-tableref"main":data"tableData"border:header-cell-style"headerStyle"style"width: 100%;"><el-table-column al…

微软服务器数据库 Navicat Premium 连接

需要固定IP&#xff0c;在服务器的网络里面加上。 需要打开SSL,入下图 只用打开&#xff0c;不用选择秘钥&#xff0c;证书等

Centos下用nodejs实现一个简单的web服务器

WebRTC是音视频直播中最常用的一个框架&#xff0c;在使用的过程中&#xff0c;我们就需要实现一个服务器端。本文以nodejs实现一个服务器为例&#xff0c;讲述一下在centos下如何用nodejs实现一个简单的web服务器。 一、安装nodejs 在linux环境下安装nodejs有多重方式&#x…

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 编写客户端

文章目录 一、设计核心类Connection 类Channel 类ConnectionFactory 类 二、代码编写Connection 类Connection 类Channel 类 一、设计核心类 Connection 类 Connection类有以下特点与功能 表示一个TCP连接该类持有 Socket对象可以写入请求,读取响应管理多个 Channel 对象 Ch…

万万没想到!| 三代宏病毒组研究还能这么干!

书接上回&#xff0c;我也是一个万万没想到啊&#xff0c;陈卫华&#xff0c;赵兴明老师的三代宏病毒组研究&#xff0c;居然让我追到续集了&#xff01; 前一回中&#xff0c;利用三代单分子测序技术&#xff0c;科研团队成功构建了中国人肠道噬菌体目录&#xff08;CHGV&…

云安全—K8S API Server 未授权访问

0x00 前言 master节点的核心就是api服务&#xff0c;k8s通过REST API来进行控制&#xff0c;在k8s中的一切都可以抽象成api对象&#xff0c;通过api的调用来进行资源调整&#xff0c;分配和操作。 通常情况下k8s的默认api服务是开启在8080端口&#xff0c;如果此接口存在未授…

【验证码系列】用逆向思维深度分析滑动验证码(含轨迹算法)

文章目录 1. 写在前面2. 抓包分析3. 接口分析4. 滑动验证码弹出分析5. 滑动验证分析6. 轨迹生成算法实现7. 生成W参数值算法 1. 写在前面 验证码是机器人防护&#xff08;即爬虫&#xff09;常用重要手段之一&#xff01;在爬虫这个领域内专精某一项&#xff08;验证码识别、JS…

七人拼团模式:颠覆你的购物观念,499元产品让你赚翻天!

七人拼团模式是一种创新的消费模式&#xff0c;通过聚集消费者的购买力&#xff0c;让消费者能够以更优惠的价格购买到优质的商品。下面我们以499元的产品为例&#xff0c;详细介绍七人拼团模式的玩法规则和收益计算。 玩法规则&#xff1a; 消费者购买499元的指定产品后&…

wireshark捕获DNS

DNS解析&#xff1a; 过滤项输入dns&#xff1a; dns查询报文 应答报文&#xff1a; 事务id相同&#xff0c;flag里 QR字段1&#xff0c;表示响应&#xff0c;answers rrs变成了2. 并且响应报文多了Answers 再具体一点&#xff0c;得到解析出的ip地址&#xff08;最底下的add…

write_edif 生成 AD9361 配置的自定义IP核

将AD9361配置文件设置为顶层 设置里&#xff1b; -mode out_of_context 替换文字 综合 导出 IP 核 write_edif -security_mode all D:/tops.edfD:/tops.edf write_verilog -mode synth_stub D:/tops_stub.vD:/tops_stub.v 调用 AD9361 IP 核

OpenAI将推出ChatGPT Plus会员新功能,有用户反馈将支持上传文件和多模态

&#x1f989; AI新闻 &#x1f680; OpenAI将推出ChatGPT Plus会员新功能&#xff0c;有用户反馈将支持上传文件和多模态 摘要&#xff1a;OpenAI为ChatGPT Plus会员推出了一些新功能&#xff0c;包括上传文件、处理文件和多模态支持。用户不再需要手动选择模式&#xff0c;…

视频直播与制作软件 Wirecast Pro mac中文版软件功能

Wirecast Pro mac是一款专业的视频直播和流媒体软件&#xff0c;由Telestream公司开发和发布&#xff0c;适用于各种场景&#xff0c;包括企业会议、体育赛事、音乐演出、教育培训等。 Wirecast Pro mac软件功能 支持多摄像头连接&#xff0c;实现多角度拍摄和切换。 可导入图片…

电脑文件夹怎么压缩?分享三个简单的方法!

为了节省存储空间和便于管理&#xff0c;压缩文件夹可以将多个文件或文件夹整合成一个压缩文件&#xff0c;从而节省存储空间。此外&#xff0c;压缩文件夹还可以方便地管理文件&#xff0c;那么电脑文件夹怎么压缩呢&#xff1f;一起来看看吧~ 一、电脑自带的压缩功能 1、找到…

虹科新闻 | 高性能超声波测距仪来袭,虹科与MaxBotix正式建立合作伙伴关系

近日&#xff0c;虹科与MaxBotix正式建立合作关系&#xff0c;将共同致力于提供高精度、工业级耐用性、功能先进和有防水保护的超声波传感器&#xff0c;重新定义距离测量技术。 虹科CEO陈秋苑表示&#xff1a;“我们非常自豪地宣布&#xff0c;与MaxBotix合作&#xff0c;为我…

在WEB应用使用MyBatis(使用MVC架构模式)

2023.10.30 本章将在web应用中使用MyBatis&#xff0c;实现一个银行转账的功能。整体架构采用MVC架构模式。 数据库表的初始化 环境的初始化配置 web.xml文件的配置&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"h…

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第六章 muduo网络库简介

2010年3月作者写了一篇《学之者生&#xff0c;用之者死——ACE历史与简评》&#xff08;http://blog.csdn.net/Solstice/archive/2010/03/10/5364096.aspx&#xff0c;ACE是&#xff08;Adaptive Communication Environment&#xff09;是一个C编写的开源框架&#xff0c;用于开…

如何使用IP归属地查询API加强网络安全

引言 在当今数字化时代&#xff0c;网络安全对于个人和组织来说至关重要。恶意网络活动的威胁不断增加&#xff0c;因此采取有效的措施来加强网络安全至关重要。其中之一是利用IP归属地查询API。这个工具可以为您的网络安全策略提供宝贵的信息&#xff0c;帮助您更好地保护自己…

微软bing大声朗读文档或网页卡顿老是中断,用离线的huihui就很流畅但没那么自然

默认的xiaoxiao_online好听&#xff0c;但卡顿&#xff0c;朗读功能确实受到了网络状态的影响。 大概率是网络问题。

概念解析 | 动态非线性系统 VS 非线性系统 VS 线性系统

KaTeX parse error: \newcommand{\blue} attempting to redefine \blue; use \renewcommand 注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:动态非线性系统 VS 非线性系统 VS 线性系统。 概念解析 | 动态非线性系统 VS 非线性…