容器注册表是 Node.js SaaS 架构中最不显眼的部分之一——直到它出故障。
正常部署依赖一条脆弱的链条:
Git commit
└─► CI
├─► npm install
├─► build TypeScript
├─► build container
├─► generate SBOM
└─► sign artifact
└─► artifact registry
└─► production runtime
如果注册表不可用,部署就会停止。如果镜像标签被覆盖,回滚就变得含糊不清。如果泄露的 CI 凭证能够发布恶意镜像,注册表就成了软件供应链攻击路径的一部分。如果生产环境直接从公共注册表拉取 node:latest,外部中断或速率限制就可能演变成生产扩容事故。
对于 2026 年的 Node.js SaaS 团队来说,有六个强有力选项:GitHub Container Registry / GitHub Packages、Amazon Elastic Container Registry (ECR)、Google Artifact Registry、Azure Container Registry (ACR)、Cloudsmith 和 JFrog Artifactory。
关键问题很简单:你的注册表主要是一个云本地容器存储,还是完整软件供应链的记录系统?
快速推荐
选择 GitHub Container Registry (GHCR),当源代码、CI/CD、权限和开发者工作流都已经在 GitHub 上时。GitHub 当前的计费文档仍说明容器镜像存储和带宽在 Container registry 中是免费的。GitHub Packages 也支持私有 npm 包,但通用包的计费与当前 GHCR 容器政策不同。
选择 Amazon ECR,当 AWS 承载运行时。私有注册表存储在 AWS 公布的示例中目前约为每 GB 每月 0.10 美元,同一区域内从 ECR 拉取到 AWS 计算资源不产生数据传输费用,而且 ECR 现在具备更强的拉取缓存、OCI referrer 同步、跨仓库层共享、生命周期策略和扫描能力。
选择 Google Artifact Registry,当 GCP 是运行时,或者当你希望用一个云原生服务同时管理 Docker/OCI 镜像和 npm 等语言包时。Artifact Registry 目前包含前 0.5 GiB 月的存储,之后按公布的小时费率大约每 GiB 月收费 0.10 美元。
选择 Azure Container Registry (ACR),当 AKS、Container Apps、App Service 或其他 Azure 运行时主导你的技术栈时。Basic、Standard 和 Premium 目前分别包含 10、100 和 500 GiB;Premium 增加异地复制、Private Link、连接注册表和更高的规模限制。
选择 Cloudsmith,当你的 Node.js 平台需要一个云原生通用注册表来管理容器和私有 npm 包,而无需完整企业级 Artifactory 部署的运维范围时。当前公开定价很直接:Core 免费;Pro 每月 149 美元,包含 5 GB 制品数据和 25 GB 交付流量。
选择 JFrog Artifactory,当注册表正在成为企业软件供应链记录系统时。Artifactory 支持容器、npm、Maven、PyPI、Helm、ML 模型、AI/代理包、联邦和许多仓库类型。
容器注册表与制品仓库
容器注册表 主要存储 OCI/Docker 镜像、清单、层、签名、SBOM 和证明。通用制品仓库 还存储 npm、Maven、PyPI、NuGet、Helm、Go module、原始二进制文件,以及越来越多的 ML/AI 资产。
对于 Node.js SaaS,这个区别很重要,因为你通常发布两类内部软件:
container image + private npm packages
如果一个平台能同时治理两者,权限和来源就会变得更简单。
推荐的 Node.js 供应链架构
Git repository
└─► CI workflow
├─► npm ci from trusted/proxied registry
├─► tests
├─► private npm package build
├─► container build
├─► SBOM
├─► provenance attestation
└─► signature
└─► artifact registry
├─► private npm package
├─► OCI image
├─► signature
├─► SBOM
└─► provenance
└─► policy gate
├─► vulnerability
├─► malware
├─► license
└─► signature
└─► production deployment by digest
核心原则是:一次构建,提升同一个不可变制品。
2026 年对比
| 平台 | 最适合 | 2026 定价信号 | 容器 | 私有 npm | 上游代理/缓存 |
|---|---|---|---|---|---|
| GitHub Container Registry / Packages | GitHub 原生 CI/CD | GHCR 镜像存储/带宽目前免费;通用 Packages 配额因套餐而异 | 优秀 | 是 | 相对于通用注册表有限 |
| Amazon ECR | AWS 原生容器工作负载 | 私有存储约 0.10 美元/GB/月;同区域 AWS 拉取传输 0 美元 | 优秀 | 否(使用 CodeArtifact) | 强大的拉取缓存 |
| Google Artifact Registry | GCP 原生 + 多格式 | 0.5 GiB 免费,之后约 0.10 美元/GiB/月 | 优秀 | 是 | 远程、虚拟、连接器仓库 |
| Azure Container Registry | Azure 原生容器工作负载 | 按区域/协议而定;各层包含 10/100/500 GiB | 优秀 | 否 | 云原生缓存/集成 |
| Cloudsmith | 通用云原生注册表 | Core 0 美元;Pro 149 美元/月 | 优秀 | 优秀 | 强大的上游代理/缓存 |
| JFrog Artifactory | 企业通用供应链 | Pro 目前促销价 50 美元/月,含 25 GB 用量 | 优秀 | 优秀 | 优秀的远程仓库/代理模型 |
GitHub Container Registry
当源代码和 CI 已经在 GitHub 上时,GHCR 在简洁性方面很难被超越。GitHub 当前的计费文档包含一条异常重要的说明:Container registry 的容器镜像存储和带宽目前免费。GitHub 表示在该政策改变前至少提前一个月通知客户。
对于通用私有 GitHub Packages,包含的配额因套餐而异。当前计算器列出的超出部分约为存储每 GB 0.25 美元,GitHub Actions 外部的出站传输每 GB 0.50 美元。
最佳工作流是发布不可变镜像引用,例如:
ghcr.io/acme/billing-api@sha256:...
而不是依赖 latest。
GHCR 对许多 SaaS 团队来说已经足够。当你需要广泛的上游代理、包联邦、多格式治理或独立于源代码控制的制品策略时,通用注册表会变得更有吸引力。
Amazon ECR
ECR 是 ECS、EKS、Fargate、Lambda 容器镜像和 AWS 原生交付管线的天然注册表。
AWS 当前的公开示例大约使用:
$0.10 / GB-month
用于私有镜像存储。同一区域内 ECR 与 AWS 计算资源之间的传输在文档中是免费的。
在 2026 年,ECR 增加了几个有用的供应链功能:
- 跨仓库层共享 在不同仓库之间复用公共镜像层,减少重复存储和上传时间。
- 拉取缓存 增加了 OCI referrer 发现和同步,以便签名、SBOM 和证明可以跟随缓存的镜像。
- ECR 扩展了上游支持,包括 Chainguard,并在 2026 年 8 月将 Docker 推送层限制提高到 200 GB。
对于普通 Node.js SaaS 服务,镜像要远小于该限制。一个有用的模式是:
Docker Hub / Chainguard
└─► ECR pull-through cache
└─► ECS / EKS
这减少了对公共外部注册表的直接运行时依赖。
Google Artifact Registry
Google Artifact Registry 是本对比中最强的云原生多格式选项,因为它可以在一个 IAM 模型下托管 Docker/OCI 以及 npm 和其他包格式。
当前存储定价:
- 前 0.5 GiB 月:免费
- 超过 0.5 GiB 月:约 0.10 美元/GiB 月
将注册表与 GKE、Cloud Run 或 Compute Engine 放在同一位置,可以根据文档中的情况免除同位置传输费用。
Artifact Registry 也有 远程 和 虚拟 仓库模型用于依赖控制。2026 年 7 月 Google 增加了 连接器仓库,它代理上游请求而不缓存制品——当许可或第三方政策阻止本地缓存,但你仍然希望有一个受控、可审计的端点时,这很有用。
其他 2026 年更新包括镜像预热、平台请求日志、包指纹和 Artifact Analysis 中的密钥发现。
Azure Container Registry
ACR 是 Azure 原生容器工作负载的自然选择。当前包含的存储:
| 层 | 包含存储 |
|---|---|
| Basic | 10 GiB |
| Standard | 100 GiB |
| Premium | 500 GiB |
Premium 增加异地复制、Private Link、连接注册表和实质上更高的企业限制。
Azure 的具体美元价格因区域和协议而动态呈现,因此生产环境的成本估算应使用实时的 Azure 计算器。
ACR 专注于容器。如果你的 Node.js 平台还需要通用私有 npm 注册表,可以将其与 Azure Artifacts、GitHub Packages、Cloudsmith 或 JFrog 配对。
Cloudsmith
Cloudsmith 是简单云容器注册表和完整企业级 Artifactory 平台之间的有用中间地带。
当前公开定价:
| 套餐 | 价格 | 制品数据 | 交付流量 |
|---|---|---|---|
| Core | 0 美元/月 | 500 MB | 1 GB |
| Pro | 149 美元/月 | 5 GB | 25 GB |
| 额外数据 | 1.50 美元/GB | — | — |
Cloudsmith 支持 30 多种格式,可以在一个平台上存储 Docker 容器和 npm 包。它还提供上游代理/缓存能力以及针对漏洞、恶意软件和许可的供应链策略。
对于 Node.js 团队,一个有用的模式是:
@acme/* → Cloudsmith private npm
public npm → Cloudsmith upstream proxy
Docker/OCI → same platform
这为 CI 提供了一个受治理的依赖边界。
JFrog Artifactory
Artifactory 是本对比中最广泛的平台。它支持容器、npm、Maven、PyPI、Helm、NuGet、Go、原始二进制文件、ML 模型以及许多其他包技术。
JFrog 当前的定价显示 Pro 版挂牌价为 150 美元/月,同时有临时 50 美元/月 的促销价。当前的立即购买页面显示该促销活动可到 2027 年 6 月 4 日,并包含 25 GB 的存储 + 传输合并用量。
Artifactory 的企业差异化优势包括远程仓库、制品联邦、高级查询能力、安全集成和多站点分发。
其 2026 年版本还显示制品管理正在扩展到传统软件包之外——Artifactory 为代理插件、技能和包含提示、钩子、MCP 服务器、指令和代理资产的“Agent Packages”添加了仓库支持。
供应链最佳实践
部署摘要,而不是 latest
latest 是一个可变指针。如果在新镜像推送后某个副本重启,你可能会在没有刻意部署的情况下出现混合版本。
billing-api@sha256:...
摘要就是制品身份。
一次构建,按摘要提升
# 不好
构建 staging 镜像 → 测试 → 重建 production 镜像 → 部署
# 更好
构建摘要 A → 测试 A → 预发布 A → 提升 A → 部署 A
被测试的制品就是被部署的制品。
签名镜像并存储 SBOM
现代 OCI 注册表可以将签名、SBOM 和来源证明与镜像摘要关联起来。生产门禁可以要求:
受信任签名 + 批准的来源证明 + 漏洞策略通过
在 CI 期间生成 SBOM。当出现新漏洞时,安全团队可以识别受影响的生产镜像,而无需重新构建所有内容。
代理 Docker Hub 和公共 npm
直接依赖公共注册表会带来运营和安全风险:
- 速率限制
- 上游中断
- 包删除
- 恶意替换
- 依赖混淆
在工作负载合理的情况下使用受控的代理/缓存层。
分离发布者和运行时权限
CI 需要推送权限。生产环境通常只需要只读拉取权限。
CI: 推送 service-a
runtime: 拉取 service-a
developers: 读取已批准的包
release automation: 提升/标记已批准的摘要
避免为每个生产仓库设置具有写权限的永久注册表凭证。
生命周期和清理
注册表增长很快。保留:
- 已部署的生产摘要
- 回滚版本
- 已签名的发布制品
- 合规要求保留的历史记录
删除:
- 过时的功能分支镜像
- 不再引用的过时层
- 过期的 CI 快照
切勿在没有检查部署引用的情况下仅按时间删除制品。
区域位置
注册表位置影响部署速度、自动扩缩容和冷启动。尽可能让注册表和运行时靠近。
Cloud Run us-central1 → Artifact Registry us-central1
除非有明确要求,否则避免跨洲注册表。
扫描成本可能超过存储成本
容器存储很便宜。安全扫描、复制和传输的成本可能更高。比较总成本:
注册表 + 扫描器 + 出站流量 + 复制 + 支持
而不仅仅是存储价格。
最终建议
对于 2026 年的 Node.js SaaS 团队:
- GitHub Container Registry 是 GitHub 原生团队的最佳低摩擦选项,尤其是在当前政策下容器镜像存储和带宽仍然免费时。
- Amazon ECR 是最佳 AWS 原生选择,特别是同区域传输经济性、拉取缓存、跨仓库层共享和 OCI referrer 支持。
- Google Artifact Registry 是最强的云原生多格式选项,因为它可以一起治理 Docker 镜像和私有 npm 包。
- Azure Container Registry 是自然的 Azure 原生选择,特别是 Premium 提供的私有网络和异地复制。
- Cloudsmith 最适合成长中的团队,他们希望有一个跨 npm、容器和其他格式的专用云原生通用注册表。
- JFrog Artifactory 是最强的企业级通用注册表,当制品联邦、多种包类型、供应链安全和全组织治理足以证明专用平台的合理性时。
工程规则很简单:
不要把注册表当作 CI 总能重建的东西的缓存。要把每个生产制品当作一个已签名、不可变的发布对象来对待。
存储其摘要。保留其 SBOM 和来源。控制谁能发布。代理不受信任的上游依赖。保留足够的历史记录以便回滚。部署你测试过的确切制品。