Zot 镜像同步实战:从定时到按需,3种方式打通跨区域镜像分发

Zot 镜像同步实战:从定时到按需,3种方式打通跨区域镜像分发

【免费下载链接】zotzot - A scale-out production-ready vendor-neutral OCI-native container image/artifact registry (purely based on OCI Distribution Specification)项目地址: https://gitcode.com/GitHub_Trending/zo/zot

Zot 是一个纯基于 OCI Distribution Specification 的容器镜像/制品仓库,内置的 sync 扩展可以让它充当远程仓库的镜像网关:远程仓库里有新镜像时,Zot 按你定的规则拉过来存到本地。读完这篇文章,你能独立写出一份同步配置,在定时、按需、流式三种模式之间做选择,并用前缀和标签规则精确控制同步范围,避免把整个上游仓库无脑搬进本地存储。

同步扩展如何启用:最小配置长什么样

这一节解决"配置从哪开始写"的问题。Zot 的同步逻辑挂在extensions.sync节点下,一份最小可用的同步配置如下:

{ "extensions": { "sync": { "enable": true, "credentialsFile": "./examples/sync-auth-filepath.json", "registries": [ { "urls": ["https://registry1:5000"], "pollInterval": "6h" } ] } } }

它解决的是三件事:打开开关(enable)、指向上游凭证文件(credentialsFile)、声明要同步哪些上游仓库(registries)。凭证文件是普通的 JSON,key 为仓库地址,value 是账号密码:

{ "registry2:5000": { "username": "user2", "password": "pass2" } }

⚠️ 如果上游仓库需要鉴权,漏配凭证会导致同步静默失败。完整示例可以对照 config-sync.json,配置结构定义在 pkg/extensions/config/sync/ 里,字段名以那里的类型为准。

定时同步还是按需同步:两种触发机制怎么选

这一节解决"什么时候拉镜像"的问题。Zot 支持三种模式,可以按场景组合:

  • 定时同步(Periodic):默认行为。设置pollInterval后,Zot 周期性轮询上游仓库,把新增的镜像拉下来。适合镜像集相对稳定、要求本地随时可拉取的场景。
  • 按需同步(On-Demand):设置"onDemand": true。客户端请求本地没有的镜像时,Zot 才临时去上游取。存储只会被实际拉过的镜像占用,适合上游镜像数量巨大但访问稀疏的场景。
  • 流式同步(Stream):在按需基础上更进一步,Zot 边从上游下载边把数据转发给客户端,不等本地落盘完成。首次拉取就更快,代价是与按需同步的某些重试参数互斥,详细约束见 流式同步说明。

还有一个折中选项:onDemandInBackground。开启后,请求缺失镜像时 Zot 立即返回 404,同步在后台进行,镜像就绪后的请求才成功。适合不希望请求方长时间等待、可以接受短暂 404 的网关场景。

模式触发时机存储占用适用场景
定时pollInterval 轮询全量(受过滤规则约束)镜像集小、要求本地秒拉
按需客户端首次请求仅被拉过的镜像上游镜像多、访问稀疏
流式客户端首次请求,边下边传同步完成后落盘对首次拉取延迟敏感

只同步需要的仓库和标签:content 规则怎么写

这一节解决"怎么不把上游整个搬空"的问题。content数组是过滤规则的核心,每条规则由prefix(仓库前缀,支持**通配)、tags(标签规则)和可选的路径转换参数组成:

"content": [ { "prefix": "/repo1/repo", "tags": { "regex": "4.*", "semver": true } }, { "prefix": "/repo4/**", "tags": { "excludeRegex": ".*-(amd64|arm64)$" } } ]

它解决的是"白名单 + 标签过滤":只有prefix命中的仓库会被同步,标签再经过regex(匹配才保留)、excludeRegex(匹配则剔除)、semver(只保留语义化版本 tag)三道筛选。规则由 ContentManager 统一解释,前缀匹配用的是 glob 语法,所以**可以覆盖整个命名空间下的所有子路径。

同步路径与上游不一致:destination 和 stripPrefix 怎么配

这一节解决"本地仓库名想和上游不一样"的问题。上游的命名空间往往带着环境或团队前缀,直接同步过来会让本地路径又长又乱。下面这段配置把上游repo2/repo改写成本地的repo:

{ "prefix": "/repo2/repo", "destination": "/repo", "stripPrefix": true }
  • 不设置stripPrefix时,destination作为前缀拼在原始仓库名前面,等于加一层命名空间。
  • 设置stripPrefix: true后,prefix部分会被剥掉,上游repo2/repo落到本地repo,层级关系保持不变。

📌 按需同步也复用同一套规则:本地仓库名会被反向映射回上游仓库名,所以两种模式必须用同一份content规则,定时和按需的改写行为才一致。

重试与限速:让同步在网络抖动时不翻车

这一节解决"上游不稳定、限流、大镜像拉不动"的问题。上游仓库(尤其是 index.docker.io 这类公共仓库)经常限流,参数集中在registries每个条目上:

参数作用
maxRetries/retryDelay失败重试次数与基础间隔
maxRetryDelay重试退避上限
syncTimeout单次同步操作的总超时
reqConcurrent每个上游主机的在途请求数上限
reqPerSec每个上游主机的请求速率上限
disableHTTP2/maxIdleConnsPerHost控制连接复用与 HTTP/1.1 并发

⚠️ 按需同步做高并发代理拉取时,reqConcurrent和disableHTTP2通常要一起调:只调前者,请求仍挤在同一条 HTTP/2 连接上;只调后者,并发数还会被默认的 3 个连接卡住。

进阶:多架构镜像只拉要的平台

这一节解决"multi-arch 镜像白白占满磁盘"的问题。给 registry 或 content 规则配platforms白名单,定时同步 multi-arch index 时只会复制列表中声明的子镜像,index 的 digest 保持不变,未选中的平台保持缺失(sparse 状态):

{ "prefix": "/repo4/**", "platforms": ["linux/amd64"] }

如果业务只跑 x86,这样配置就能省掉一半以上的存储空间。content 级设置会覆盖 registry 级默认值;按需同步则不受该列表限制,客户端要哪个平台才补哪个平台。更多机制细节可以看 稀疏 multi-arch 同步说明。

下一步

  • 从零跑通:参考 examples/README.md 里的同步示例逐个验证。
  • 云端鉴权:需要 ECR/GCP 这类凭证助手时,看 sync 扩展配置 中credentialHelper与oauth2CredentialHelper的定义,示例配置在 config-sync.json 同目录的 sync 相关配置文件中。
  • 行为验证:端到端的同步测试在 test/blackbox/sync.bats 里,可以作为配置正确性的对照。

【免费下载链接】zotzot - A scale-out production-ready vendor-neutral OCI-native container image/artifact registry (purely based on OCI Distribution Specification)项目地址: https://gitcode.com/GitHub_Trending/zo/zot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Octop API 入门:5 分钟开启 /api/docs 交互文档,调通你的第一个接口

Octop API 入门:5 分钟开启 /api/docs 交互文档,调通你的第一个接口

Octop API 入门:5 分钟开启 /api/docs 交互文档,调通你的第一个接口 【免费下载链接】Octop A smarter, self-hosted AI assistant — multi-user, multi-agent. 项目地址: https://gitcode.com/GitHub_Trending/oct/Octop 你刚把 Octop&#xff…

2026/10/21 1:52:34 阅读更多 →
D8051/2/3/4 系列高速运算放大器

D8051/2/3/4 系列高速运算放大器

一、产品简介D8051/2/3/4 是芯谷科技(Silicore)推出的250MHz轨到轨输出电压反馈型CMOS运算放大器系列,专为高速信号处理应用设计。该系列包含单通道(D8051/D8053)、双通道(D8052)和四通道&#…

2026/10/21 1:51:34 阅读更多 →
磁集成Boost变换器Simulink建模与仿真:耦合电感参数扫描及优化

磁集成Boost变换器Simulink建模与仿真:耦合电感参数扫描及优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:51:34 阅读更多 →

最新新闻

Wi-Fi MAC Layer: Scanning, Authentication, Association, and Data Transmission Processes

Wi-Fi MAC Layer: Scanning, Authentication, Association, and Data Transmission Processes

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:25:53 阅读更多 →
ROS2笔记1

ROS2笔记1

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:25:53 阅读更多 →
26 精武杯手机部分复盘

26 精武杯手机部分复盘

【简要案情】 近期,某市反诈部门接到多名群众报案,均遭遇“投资理财”类电信网络诈骗,指向的犯罪团伙涉案资金巨大、作案链条隐蔽。办案单位迅速成立专案组开展电子数据取证工作。经初查,该犯罪团伙搭建虚假投资平台,通…

2026/10/21 2:25:53 阅读更多 →
PHP安全漏洞修复指南:防SQL注入与XSS

PHP安全漏洞修复指南:防SQL注入与XSS

一、为什么 PHP 项目总被盯上做 PHP 开发这些年,我见过太多项目上线后被黑的情况。说句实话,大部分漏洞并不是什么高深的技术,翻来覆去就是 SQL 注入和 XSS 这两类。很多新手写代码的时候图省事,直接把用户输入拼进 SQL 语句&…

2026/10/21 2:25:53 阅读更多 →
中小企业建数据中台预算不多怎么办?先把这 5 笔成本拆开,别只问报价

中小企业建数据中台预算不多怎么办?先把这 5 笔成本拆开,别只问报价

报价单拿到手,最常见的第一反应是"怎么比我想的贵这么多"。而这个"我想的",通常是拿一套软件的价钱估出来的。 这篇为谁写:中小企业里兼管数据的 IT、被老板一句"我们是不是该上中台,先报个价"问到…

2026/10/21 2:25:53 阅读更多 →
C语言基础笔记 04 指针

C语言基础笔记 04 指针

00 包 目前CLion的最新版本还不支持中文&#xff0c;需要导入#include <stdlib.h> &#xff0c;再在main函数内写system("chcp 65001");才能在代码中用中文stdlib 还可以提供动态内存分布——malloc函数01 使用原因对于函数&#xff0c;在函数外定义的变量&…

2026/10/21 2:24:52 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →