Dragonfly 社区技术分享|Nydus Registry 鉴权与 Mount 改进

Nydus 容器镜像加速服务 - 架构设计与技术文档 Nydus 是一个高性能容器镜像加速服务,由 Rust 语言实现。它通过在 RAFS(Registry Acceleration File System)格式上实现内容寻址文件系统,显著提升容器启动速度、降低存储和网络带宽消耗。核心优势:快速启动:秒级容器启动,毫秒级函数计算代码包加载按需加载:以 chunk 为单位按需下载镜像数据节省资源:chunk 级别数据去重,跨层/跨镜像降低存储、传输和内存成本端到端安全:数据完整性验证,可检测供应链攻击。 阅读详情

63c5e2cfbc20b244601ca425a4f80639.gif

在 2023 年的开源活动中,李锐同学参加了 Nydus 容器开源生态集成课题的相关工作。

大家好!我是来自国防科大的李锐,在开源之夏 2023 中报名参与了 Nydus 项目,在导师的指导下完成了社区的两个改进性题目,体验了如何从零开始参与一个开源项目。

Nydus GitHub:

https://github.com/dragonflyoss/nydus

01

容器运行时与镜像

1.1 OCI 容器运行时

相较于虚拟机操作系统级的隔离,容器是一种更轻量的进程级隔离技术。容器的广泛应用促进了该领域的生态繁荣,目前主流容器生态如图所示(摘自参考 [1]),容器的运行时有 Containerd,CRI-O,以及底层的 Runc,前者接受容器创建请求,OCI 镜像处理与 runtime spec 准备等,后者是对 namespace 和 cgroups 等资源隔离技术的封装。

1145d5bc95868875e6e8ffb94e910b94.png

1.2 OCI 容器镜像  

容器镜像技术是容器得到广泛应用的核心技术,它是一种轻量、独立的软件包,包含了运行应用所需的所有内容。容器运行时,文件内容及相关配置文件共同组成了容器的静态文件系统 —— RootFS,实现了“构建一次,到处运行”。现有的容器镜像采用分层的方式构建,每个镜像由一组层组成。然而标准的 OCI 容器镜像格式无法实现按需拉取,也有数据去重粒度等问题。

702d3844d7f0424158243d0a1cad2ae7.png

1.3 Nydus 简要介绍 

Nydus 镜像加速框架项目是 CNCF 开源项目 Dragonfly 的子项目,它是对 OCI 镜像格式的探索改进,Nydus 提供了容器镜像与多种数据的按需加载的能力,它已在生产环境支撑了每日百万级别的容器创建,将容器或代码包的端到端冷启动时间从分钟级降低到了秒级。Nydus 目前由蚂蚁集团、阿里云、字节跳动联合研发,也是 Kata Containers 与 Linux 内核态原生支持的镜像加速方案,Nydus 的具体介绍可参考链接 [2] 和 [3]。

1.4 Nydus 生态及运行原理

以 Nydus 支持的 FUSE 用户态实现为例,镜像加速运行原理如图所示 (摘自链接 [4] ), Containerd 支持以 Remote Snapshotter 插件的形式扩展镜像层的挂载,具体可参考链接 [5],Nydus Snapshotter 这种插件的实现,用于支持 Containerd 运行 Nydus 镜像。Containerd 在拉取镜像层前,会调用 Snapshotter 接口,Snapshotter 会告知 Containerd 只拉取 Nydus 镜像元数据层(通常非常小),并跳过数据层的下载,接下来启动新的 Nydusd 进程来挂载 Nydus 镜像元数据。当容器启动后,有文件数据请求时,Nydus 的进程再从镜像中心懒加载数据,以此做到按需加载实现容器启动的加速。

953e856ebe0c38c97f7e400e509120eb.png

02

Nydusify Mount 子命令改进

2.1 问题描述

Nydusify 是 Nydus 生态提供的工具,可用于转换、挂载、校验 Nydus 镜像,其中 mount 子命令可以将 Nydus 镜像挂载到本地目录中,以提供给用户快速查看镜像内容。在之前的实现中,当用户挂载来自镜像中心的镜像时,需要在命令行参数中提供 --backend-type 与 --backend-config 选项以指定镜像的数据源,实际上可以从本地 Docker Config 中拿到镜像中心的相关信息,以避免提供这两个选项,对于默认的 Registry Backend 使用更加友好。

2.2 解决方案及实现 

当命令行未指定 --backend-type 和 --backend-config 选项时,可以尝试从本地 Docker Config 中拿到镜像中心的相关信息,然后创建 Registry Backend 的相关配置信息,具体如函数NewRegistryBackendConfig 中所示,其核心流程为:

  • 从默认的 Docker Config(通常是 ~/.docker/config.json ) 配置文件中加载认证信息,以获取与指定镜像仓库 Host 相关的认证配置。如果没有找到认证信息,将返回一个错误;

  • 如果找到了认证信息,将用户名和密码拼接为 username:password 格式的字符串,然后将其编码为 Base64 格式的认证字符串;

  • 最后,将认证字符串设置到backendConfig 的Auth 字段,并返回  backendConfig 对象以及可能的错误。

代码实现见 PR 链接 [6] ,效果如下所示:

  • Nydus 镜像本地直接挂载

6626ceefe3fa7454c669befe074a5b26.png

  • 进入挂载点查看镜像内容

e668d6c4f048485cd57ac0b0018dc4b7.png

03

Registry 鉴权兼容性改进

3.1 问题描述

当容器通过 Nydusd 按需从镜像仓库拉取数据时,需要先进行鉴权,各大厂商(例如 Docker Hub,Aliyun ACR,Harbor, Github GHCR)的镜像中心 Registry 鉴权实现并不完全一致,具体分为以下两种方式:

  • Basic:

    将 auth (即 username 和 password )编码后, 放入 http 请求头 中(也即:Authorization: base64(username:password)),直接请求,不需要先从 Token Server 获取 token;

  • OAuth:

    客户端请求 Blob 资源,镜像中心 Server 返回 Token Server 地址与应该申请的权限,然后客户端携带 Auth 信息(username/password)向 Token Server 发起请求获取 token,最后客户端再携带 token 向镜像中心重新发起请求获取 Blob 资源。

问题:Nydusd 中 OAuth 鉴权方式中只实现了 GET 方式向 Token Server 获取 Token,然而各种镜像中心的实现有差异,当 GET 失败时,应该 Fallback 到 POST 的方式以进行兼容。

3a4ab64c3b8369a63311b7b303af7072.png

3.2 鉴权流程分析

本小节针对鉴权流程做简要分析,具体参考[7]、[8] 以及 containerd (https://containerd.io/)的实现。

3.2.1 起始

开始时, Nydusd 请求镜像中心获取 blob 数据,镜像中心则会在 http 请求头中返回具体的鉴权方式与信息。

  • 如果镜像仓库已经配置成了 OAuth 的认证模式,那么它将返回一个 401 的错误,头部的 Www-Authenticate 字段会被设置为值 Bearer,并且其返回信息中会包含完成认证所需要的信息;

  • 如果镜像仓库未配置 OAuth 的认证模式,则返回头部的 Www-Authenticate 字段会被设置为值 Basic ,此时采用 Basic auth 认证方式。

6dcbecf154bc26b0a8542b799389d332.png

3.2.2 Basic auth 方式

在 Basic auth 认证方式中,客户端收到第一次请求的回复信息,并确认为 Basic auth 方式后,会将 username 和 passward 进行编码并封装放在请求头部,发起第二次请求,具体对应图示的 [3-4] 步骤。

/// # Basic authenticate workflow:  ///  /// step1 & step2  /// Request:  GET https://my-registry.com/namespace/repo/blobs/sha256:<blob_id>  /// Response: status: 401 Unauthorized  ///           header: www-authenticate: Basic  ///  /// step3 & step4  /// Request:  GET https://my-registry.com/namespace/repo/blobs/sha256:<blob_id>  ///           header: authorization: Basic base64(<username:password>)  /// Response: status: 200/301/307

8dfec180b78f691726cc6e6bdb44a271.png

3.2.3 OAuth auth 方式 

在 OAuth auth 认证方式中,客户端收到第一次请求的回复信息,并确认为OAuth auth方式时,客户端会做如下操作,具体对应图示的 [3-6] 部分:

  • 3)客户端会会从 header 中获取认证信息,向 Token Server 发起请求;

  • 4)Token Server 会返回一个临时 token;

  • 5)客户端将带有客户访问权限标识的 token 放入请求头,向镜像仓库再一次发起请求;

  • 6)镜像仓库将尝试验证 token ,如果成功,则会返回客户端所请求的资源。

/// # Bearer token authenticate workflow:////// step1 & step2/// Request:  GET https://my-registry.com/namespace/repo/blobs/sha256:<blob_id>/// Response: status: 401 Unauthorized///           header: www-authenticate: Bearer realm="https://auth.my-registry.com/token",service="my-registry.com",scope="repository:namespace/repo:pull,push"////// step3 & step4 /// Request:  POST https://auth.my-registry.com/token///           body: "service=my-registry.com&scope=repository:namespace/repo:pull,push&grant_type=password&username=x&password=x&client_id=nydus-registry-client"/// Response: status: 200 Ok///           body: { "token": "<token>" }////// step5 & step6 /// Request:  GET https://my-registry.com/namespace/repo/blobs/sha256:<blob_id>///           header: authorization: Bearer <token>/// Response: status: 200/301/307

6e381beff1fa9aaf673c08fa0794d8e3.png

3.3 解决方案及实现  

根据上述认证流程的分析,我们需要实现 POST 与 GET 两种获取 token 的方式,并且实现自动 fallback。

let resp = if http_get {    self.get_token_with_get(&auth, connection)?} else {    match self.get_token_with_post(&auth, connection) {        Ok(resp) => resp,        Err(_) => {            warn!("retry http GET method to get auth token");            let resp = self.get_token_with_get(&auth, connection)?;            // Cache http method for next use.            self.cached_auth_using_http_get.set(self.host.clone(), true);            resp        }    }};

3.4 优化

可以进一步针对访同一镜像仓库时采用 GET 还是 POST 方式进行缓存,这样当再次访问时,就可以直接从缓存中进行读取,而不必重试,可以有效减少访问次数,如下所示:

struct RegistryState {  //...     // Cache for the HTTP method when getting auth, it is "true" when using "GET" method.    // Due to the different implementations of various image registries, auth requests    // may use the GET or POST methods, we need to cache the method after the    // fallback, so it can be reused next time and reduce an unnecessary request.    cached_auth_using_http_get: HashCache<bool>,    // ...}#[derive(Default)]struct HashCache<T>(RwLock<HashMap<String, T>>);impl<T> HashCache<T> {    fn new() -> Self {        HashCache(RwLock::new(HashMap::new()))    }    fn get(&self, key: &str) -> Option<T>    where        T: Clone,    {        let cached_guard = self.0.read().unwrap();        cached_guard.get(key).cloned()    }    fn set(&self, key: String, value: T) {        let mut cached_guard = self.0.write().unwrap();        cached_guard.insert(key, value);    }    fn remove(&self, key: &str) {        let mut cached_guard = self.0.write().unwrap();        cached_guard.remove(key);    }}

04

项目总结

4.1 为何参加活动

一开始参加开源课题的原因是被奖金吸引,但参加后发现项目会使用更前沿的技术,能拓展视野了解技术趋势,代码质量要求也更高。可以改善我的编程习惯,看到自己的代码能够被合并,也体会到了开源协作的乐趣。

4.2 遇到的困难与挑战

万事开头难,庞大的项目代码量较难一开始就找到切入点。通过阅读文档与导师沟通,搭建环境与测试,解决了很多问题,这也让我对容器领域有了进一步的了解。

4.3 收获与展望

感谢社区同学和项目导师的帮助,他们帮忙在问题定位,实现参考,文档格式与代码 Review 上给了很多指导,我希望在后续的学习和工作里,可以继续参与 Nydus 开发工作,让自己更加有社区参与感!

05

致谢

非常感谢本题目 Mentor 严松导师和周会组织姚胤楠以及袁卓同学在本次项目中的指导和帮助,尤其是导师在项目中细致入微的解答以及对待代码的严谨态度,还有亲切近人的鼓励态度,让我在这个过程中不断思考自己的不足之处,使得大受裨益。

在后续的学习和工作中,我希望能持续参与到 Nydus 相关的开发工作中,继续为社区贡献 issue 和代码。

参考

[1].How to Build a Docker Engine-like Custom Container without Any Software

https://www.freecodecamp.org/news/build-your-on-custom-container-without-docker/

[2].Nydus —— 下一代容器镜像的探索实践

https://developer.aliyun.com/article/971522

[3].Nydus | 容器镜像基础

https://developer.aliyun.com/article/1071132?spm=5176.26934562.main.3.1c5b43c9uZVdTg#slide-0

[4].GitHub - containerd/nydus-snapshotter: A containerd snapshotter with data deduplication and lazy loading in P2P fashion

https://github.com/containerd/nydus-snapshotter

[5].containerd/docs/PLUGINS.md at main · containerd/containerd

https://github.com/containerd/containerd/blob/main/docs/PLUGINS.md

[6].Nydusify: fix some bug about the subcommand mount of nydusify by lihuahua123 · Pull Request #1328 · dragonflyoss/nydus

https://github.com/dragonflyoss/nydus/pull/1328

[7].containerd/docs/PLUGINS.md at main · containerd/containerd

https://github.com/containerd/containerd/blob/main/docs/PLUGINS.md

[8].为 Docker 的镜像仓库实现 OAuth 认证服务

https://zhuanlan.zhihu.com/p/58370332

35313953622718c1c0f6dfe66be83f92.jpeg

VLM,VLA,VLN的区别与联系 VLM 提供了理解世界的“眼睛和大脑”,VLN 赋予了这个智能体在空间中“移动的双腿”,而 VLA 则进一步赋予了它“灵巧的双手”来改变世界。三者共同构成了一个完整具身智能体的核心能力模块。 阅读详情

相关推荐

solidworks实体显示线框

solidworks实体莫名其妙显示为有点虚的线框

qq_35858902的博客 1万+

Dragonfly 社区技术分享|Nydus 远端转换缓存实现

在 2023 年的开源活动中,于强同学参加并负责了 Nydus 开源存储构建与分发支持课题的相关工作。大家好!我是来自西北工业大学的于强,在开源之夏 2023 中报名参与了 Nydus 项目,并在导师的帮助下顺利完成了题目。通过此次活动,不仅对容器和镜像的底层技术有了更进一步的了解,也体验了如何开始参与一个开源项目。Nydus GitHub:https://github.com/dragonfly...

金融级分布式架构 815

Social-Auto-Upload实战:如何用Python+Playwright实现抖音/B站/小红书一键三连发?

本文详细介绍了如何使用Python和Playwright框架构建Social-Auto-Upload自动化上传工具,实现抖音、B站、小红书等平台的一键多发布。通过模拟真实用户操作和Cookie管理技术,该工具能有效解决内容创作者跨平台发布的重复劳动问题,提升工作效率。

day7的博客 1401

直播预告 | SOFAChannel#32《你的开源入门指南——Kata Containers 社区》

如今“参与开源”已然成为很多技术人追赶的浪潮。但有些人苦于找不到参加途径,有些人畏畏缩缩不敢发声,或者是由于开源项目众多,不知道该如何挑选......在本期 SOFAChannel#32 的节目中,我们邀请到了 Kata Containers 社区新星姚胤楠同学,给大家带来开源入门指南!Kata Containers 是一种基于硬件虚拟化技术、兼容 OCI/CRI 等协议的容器运行时技术,可以完美...

金融级分布式架构 145

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

前言:ERA5主要提供DAILY和MONTHLY两大类别数据,其中主要包括气温、降水、压力、风速等。

等待着冬天的风的博客 3万+

深入解析数据通信中的码元速率与比特率:从基础到实战应用

本文深入解析了数据通信中的核心概念码元速率与比特率,通过生动的比喻和公式(比特率=波特率×log₂(M))揭示其本质关系。文章结合BPSK、QPSK、16QAM等调制技术,剖析了从4G/5G到LoRa等实战场景中如何权衡速率、距离与可靠性,并提供了软考真题解析与系统设计建议,帮助读者从理论到应用全面掌握数据速率优化。

weixin_29324877的博客 213

Dragonfly 和 Nydus Mirror 模式集成实践

文|戚文博(花名:百蓦)DragonflyMaintainer蚂蚁集团软件工程师主要负责「基于 P2P 的文件以及镜像加速系统」。本文2175字 阅读15分钟PART. 1背景自 17 年开源以来,Dragonfly 被许多大规模互联网公司选用并投入生产使用,并在 18 年 10 月正式进入 CNCF,成为中国第三个进入 CNCF 沙箱级别的项目。2020 年 4 月,CNCF 技术监督...

金融级分布式架构 624

进阶01:Labview与OPC UA设备通信

LabVIEW通过OPC UA实现高效设备通信方案 本文介绍了使用LabVIEW与OPC UA设备通信的完整实施方案。OPC UA协议具有跨平台兼容、高安全性和高效数据交换等优势。实施步骤包括:1)安装NI OPC UA工具包;2)搭建模拟测试环境,使用OPC UA Simulation Server创建测试变量;3)编写LabVIEW程序,实现连接服务器、事件订阅、数据读写等功能。重点展示了通过用户事件实现设备主动触发的机制,当模拟变量值改变时自动触发LabVIEW事件处理。该方案验证了OPC UA在工业

weixin_38637405的博客 1402

2023 GLCC 报名开启啦|Dragonfly & Nydus 项目一览

2023GLCC 报名开启—— GitLink 编程夏令营 ——Dragonfly & Nydus 项目一览活动介绍GitLink 编程夏令营(GLCC),是在 CCF 中国计算机学会指导下,由 CCF 开源发展委员会(CCF ODC)举办的面向全国高校学生的暑期编程活动。活动将覆盖近千所高校,并联合各大开源基金会、开源企业、开源社区、开源专家,旨在鼓励青年学生通过参加真实的开源软件开发...

金融级分布式架构 695

Apollo EM Planner中路径-速度解耦优化的数学建模与仿真分析

摘要 Apollo EM Planner采用路径-速度解耦优化策略解决自动驾驶运动规划问题。该算法将时空轨迹规划分解为路径规划和速度规划两个子问题:首先在静态环境下生成几何最优路径,再优化沿路径的速度曲线。通过五次多项式表示路径和速度,构建包含平滑性、安全性、舒适性的多目标优化函数,并引入弹性模型处理动态障碍物约束。算法具有解耦优化、弹性适应、实时求解等特点,适用于高速公路、城市交叉口等多种场景。数学建模包括路径几何优化、速度动态优化和弹性势能函数,最终生成满足车辆动力学和环境约束的安全轨迹。

走向CTO的路上... 933

自然语言处理:长文本场景下的关键词抽取实践

自然语言处理:长文本场景下的关键词抽取实践

丨汀、的博客 2076

Nydus 镜像扫描加速

镜像扫描的原因与内容容器镜像是当前容器/软件分发的基础,里面包含了容器隔离环境以及软件执行环境的相关内容。因此保障其安全性变得十分重要。镜像扫描即是要扫描镜像中的所有内容,及时发现可能包含的安全漏洞或者隐私泄露。1. 安全漏洞。包括系统软件包和应用软件库中可能存在的安全漏洞。可以通过比对镜像中这些库/软件包的来源、版本等与 CVE 数据库中报告的漏洞的包的来源、版本来定位可能存在的安全漏洞。2. 配置。包括镜像运行的环境配置和镜像中相关内容组合可能带来的问题。

BASK2311的博客 782

微信小程序 - 解决报错 {“errcode“:41002,“errmsg“:“appid missing, rid: X“} 微信报错错误码errcode“:41002问题分析及解决教程(详细排查)

【微信小程序】报错{“errcode“:41002,“errmsg“:“appid missing, rid: 64e55770-67c1fb7e-027c5a70“}:【微信小程序】微信小程序登录请求出现appid missing提示,微信公众号{"errcode":41002,"errmsg":"appid missing"},微信 报错{“errcode“:41002,“errmsg“:“appid missing,微信小程序获取openid返回appid missing的问题,微信小程序提示Erro

🏆 前端领域优质创作者 5655

Nydus容器镜像加速能力并集成到nerdctl(实验中。。。。。。)

内容相关 :nerdctl docker rootfs nydus

啊阿啊啊啊杨的博客 1560

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

让容器应用管理更快更安全,Dragonfly 发布 Nydus 容器镜像加速服务

镜像对容器部署的挑战 在容器的生产实践中,偏小的容器镜像能够很快地部署启动。当应用的镜像达到几个 GB 以上的时候,在节点上下载镜像通常会消耗大量的时间。Dragonfly 通过引入 P2P 网络有效提升了容器镜像大规模分发的效率。然而,用户还是必须等待镜像数据完整下载到本地,然后才能创建自己的容器。我们希望进一步缩减镜像下载的时间,让用户能够更快地部署容器应用。同时,如何更好地保护用户数据,也是容器行业近年来的重要关注点。 为此,我们为 Dragonfly 项目引入了一个容器镜像加速服务 Nydus。N.

阿里巴巴云原生的博客 1168

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

013-阿里Dragonfly体验之私有registry下载

这是坚持技术写作计划(含翻译)的第13篇,定个小目标999,每周最少2篇。 书接上篇012-P2P加速Docker镜像分发(阿里Dragonfly),讲解了如何快速搭建Dragonfly,但是访问的是公开镜像,本文主要讲解如何下载私有镜像。 实验环境 主机 类型 主机名 系统 ip docker version supernode d7y-1 Ubuntu Server...

weixin_33898876的博客 835

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

容器镜像基础(nydus)

包括 nydus 的基本概念、架构和容器镜像加速使用方法。

分享观点和经验,欢迎交流。 1663

dragonfly 踩坑指南

dragonfly 踩坑指南 dockers /etc/docker/daemon.json的设置 错误的写法 { "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } } { "registry-mirrors": ["http://127.0.0.1:65001"] } 正确的写法 {

qq_32949893的博客 572

Nydus Snapshotter:加速容器启动的利器

Nydus Snapshotter:加速容器启动的利器 项目介绍 Nydus Snapshotter 是 containerd 的一个非核心子项目,旨在通过 Nydus 镜像服务 提升容器启动速度、镜像空间利用率和网络带宽效率。Nydus 实现了一个基于块的内容寻址文件系统,称为 RAFS(Registry Acceleration File System),支持 FUSE、virtiofs 和内...

gitblog_00270的博客 1100

推荐:Nydus Snapshotter——超高效容器镜像服务

推荐:Nydus Snapshotter——超高效容器镜像服务 ???? 项目简介 Nydus Snapshotter 是一个基于containerd的非核心子项目,它为chunk-based的内容寻址文件系统(CAS)提供了一个外部插件。Nydus通过称为RAFS (Registry Acceleration File System)的格式,大大提升了OCI镜像规范在启动速度、空间效率和网络带宽利用方...

gitblog_00037的博客 593

signature=4d7e0a8216b57730ec16fe4e5ae2b93f,dragonfly对接harbor拉取镜像没有走dragonfly问题

@lowzj 启动时添加了配置文件,目前在日志里是可以看到下载信息了 谢谢。同时我发现另一个问题,虽然dfdaemon调用dfget从supernode下载了镜像,日志中能够看到相关的信息,在supernode上的repo下也可以看到文件,但client上只有pull镜像的这台data下有文件,其他client上data目录下是空的。难道不应该是client之间会同步block么?另一方面,我在同...

weixin_28773055的博客 785

容器启动加速-nydus

Nydus是一个镜像加速器,主要通过容器启动时懒加载镜像提高启动速度, 大镜像可以秒级启动,后续的读写通过COW方式。以下是nydus的几个标签: - Nydus是蚂蚁、阿里云、字节等共建的开源容器镜像加速项目 - CNCF孵化的项目Dragonfly中的一个子项目 - 新的镜像格式,不同于oci - 良好的生态,兼容containerd、k8s、harbor、buildkit -- 从构建、存储、部署、到CI集成,有丰富的解决方案

Moolight_shadow的专栏 3620

Nydus 加速镜像一致性校验增强

这是去年(2022)的夏令营活动中,王瑞同学参加 Nydus 开源项目的总结,主要介绍了为 Nydus 支持镜像与文件系统一致性校验所做的相关工作。

金融级分布式架构 620

如何在 Anolis 8上部署 Nydus 镜像加速方案?

Nydus 镜像加速服务重新优化了现有的 OCIv1 容器镜像格式,重新定义镜像的文件系统,数据与元数据分离,实现按需加载,本文作为使用 Nydus 的教程将详细介绍在 Anolis OS 上部署 Nydus 的过程,以帮助用户熟悉 Nydus 的基本使用方法。...

数据库技术 379

阿里云、蚂蚁开源 Nydus——容器镜像加速服务

近日,Dragonfly 项目引入了一个容器镜像加速服务 nydus。据悉,nydus 是由阿里云和蚂蚁集团的工程师合作开发,并大规模部署在内部的生产环境中。 据Dragonfly 发布的消息,在其的测试中, nydus 能够把常见镜像的启动时间,从数分钟缩短到数秒钟。另外,容器运行时数据一致性校验方面,nydus 镜像不会被解压到本地,同时可以对每一次数据访问进行校验,如果数据被篡改,则可以从远端数据源重新拉取。 nydus 通过优化现有的 OCI 镜像标准格式提供: 容器镜像按需下载,用户不.

寒冰屋的专栏 2699

为Dragonfly配置私有仓库

为Dragonfly配置私有仓库 环境 OS: Centos 7 Docker version Client: Version: 18.06.1-ce API version: 1.38 Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:23:03 2018 OS/Arch:

gbh18682030862的博客 625
上一篇: 全票通过|时序数据库 HoraeDB 正式加入 Apache 孵化器
下一篇: 恭喜祁晓波成为 SOFAServerless 社区优秀 Contributor!
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值