Zot 镜像同步实战指南:跨区域镜像复制的完整配置方法 Zot 镜像同步实战指南跨区域镜像复制的完整配置方法【免费下载链接】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/zotZot 是一款基于 OCI Distribution Specification 的容器镜像与制品仓库其内置的镜像同步能力Zot 镜像复制支持定时同步与按需同步两种模式。本文带你从最小可用配置出发逐步配好跨区域同步并讲清内容过滤、路径转换和高级参数的原理与用法。多区域分发为什么要让仓库自己干活如果你的镜像被多地的集群消费靠手工docker pull / push既慢又容易漏。常见的诉求有三类多区域分发在边缘区域维护一份就近的镜像副本缩短拉取链路。镜像备份把关键镜像定期复制到其他仓库故障时可直接恢复。环境隔离开发侧持续产出生产侧只放行特定版本避免未验证的镜像流入生产。Zot 的 sync 扩展就是为解决这类问题设计的它运行在 extensions/sync/ 目录下由配置文件驱动无需额外的复制工具。⚡ 跑通一份最小的同步配置同步配置全部位于extensions.sync节点下。先看一份最小可用的配置{ extensions: { sync: { enable: true, credentialsFile: ./examples/sync-auth-filepath.json, registries: [ { urls: [https://registry1:5000] } ] } } }顶层三个参数一个都不能少enable总开关置为true后同步扩展才会加载。credentialsFile访问源仓库的凭证文件格式与 Docker 凭证文件一致。registries源仓库列表每个元素描述一个同步源可配置多条。每个源仓库条目下的常用配置项urls源仓库地址可写多个Zot 会依次尝试。pollInterval定时同步轮询周期如6h表示每 6 小时拉取一次目录清单。onDemand是否对该源开启按需同步默认false。tlsVerify是否校验源仓库 TLS 证书生产环境建议保持true。content内容过滤规则数组控制同步哪些仓库、哪些标签。完整示例可对照 config-sync.json其中四种典型配置定时、多源、按需、混合都有覆盖。定时同步按 pollInterval 批量拉取定时同步是仓库主动干活。Zot 按pollInterval轮询远端/v2/_catalog发现新仓库或新标签后逐个复制。执行入口是SyncRepo方法实现位于 sync.go它会把指定仓库的全部标签与引用签名、SBOM 等 artifacts一起复制进来。周期任务由内置调度器驱动任务生成逻辑也在sync.go的TaskGenerator中一轮同步结束后会重置目录游标等待下一轮。{ urls: [https://registry1:5000], onDemand: false, pollInterval: 6h, content: [ { prefix: /repo1/repo } ] }pollInterval写得越长远端压力越小但新镜像到达本地的延迟也越大按业务节奏取舍即可。按需同步请求 miss 时自动回源按需同步是谁要谁取。客户端向本地 Zot 拉取一个不存在的镜像时Zot 会实时从远端仓库抓取并落到本地调用方拿到的是正常返回。在源仓库条目中设置onDemand: true即可启用。核心实现在 on_demand.go 的syncImage方法镜像的 referrers签名、附加制品由syncReferrers同步补齐。回源耗时与稳定性靠这三个参数兜底maxRetries回源失败后的最大重试次数。retryDelay重试间隔失败后按此间隔再次尝试。syncTimeout单次同步的超时时间防止慢回源长期占用请求。{ urls: [https://index.docker.io], onDemand: true, tlsVerify: true, maxRetries: 5, retryDelay: 1s, syncTimeout: 10m }同一源也可以把pollInterval和onDemand同时配上周期任务负责兜底刷新按需请求负责即时补充。只同步 4.x 标签还能改写仓库路径content数组决定同步什么支持按仓库前缀和标签两个维度过滤prefix仓库前缀匹配**表示匹配所有子路径如/repo3/**。tags.regex只同步匹配正则的标签。tags.semver按语义化版本解析标签便于做版本比较。tags.excludeRegex排除匹配正则的标签如跳过带架构后缀的标签。content: [ { prefix: /repo1/repo, tags: { regex: 4.*, semver: true } }, { prefix: /repo4/**, tags: { excludeRegex: .*-(amd64|arm64)$ } } ]如果希望同步后的仓库路径与源不同用路径转换destination指定同步到本地仓库的目标路径。stripPrefix置为true时从源路径中剥掉前缀后再拼接到目标路径。这样源端的/repo2/repo落地后就成了/repo层级更扁平。过滤与转换的具体执行在 content.go 的ContentManager中它先解析content规则再做前缀匹配、标签筛选和路径改写。整体执行链路是Zot 启动时解析extensions.sync配置为每个源仓库构建ContentManager。定时任务或按需请求触发后ContentManager完成过滤与路径转换。同步开始执行定时模式批量复制按需模式单镜像回源。数据先写入 OCI layout 临时目录仓库下的 sync 暂存路径校验通过后再提交到正式镜像存储失败可安全丢弃不影响已有内容。安全与性能参数怎么配基础参数之外还有几项值得留意certDir指向证书目录用于对自签名或私有 CA 的源仓库做 TLS 校验。onlySigned置为true时只同步带有效签名的镜像可配合镜像信任体系使用。maxRetries / retryDelay重试机制对两种模式都生效回源失败不会立刻报错而是按间隔重试。三个落地场景与调优建议多区域分发每个区域部署一套 Zot各自配置上游源仓库pollInterval按区域重要性区分边缘区域可以按需同步兜底。镜像备份对关键仓库配置较长的轮询周期加严格标签过滤把备份仓库当作定期快照故障时从备份侧恢复。开发到生产的隔离生产侧的 Zot 只同步通过验收的标签如tags.regex锁定语义化版本开发侧的试验性标签天然不会流入生产。几条调优建议同步频率不是越短越好过高的pollInterval频率会增加远端与本地带宽开销。用标签过滤缩小同步范围比全量复制更快也更省存储。保持tlsVerify为true确需对接私有 CA 时用certDir补证书而不是关闭校验。重试参数按回源链路质量配置重试多、间隔短适合不稳定的跨云链路。延伸阅读官方文档docs/ 中的扩展与配置章节。同步扩展全部源码extensions/sync/建议对照sync.go、on_demand.go、content.go三个文件阅读。更多配置样例examples/ 下的config-sync*.json系列文件。同步相关设计说明sync/README 系列。【免费下载链接】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),仅供参考