公开分发还是私有部署
Docker Hub 和 Quay 更适合公开镜像。GHCR、GitLab、ECR、Artifact Registry 和 ACR 更适合镜像跟随仓库或云 IAM 权限。
容器镜像仓库存储 CI 构建出的镜像,并被生产运行时拉取。最合适的免费选择取决于镜像是否公开、运行在哪里、拉取频率多高,以及由哪套权限模型控制部署。
| 提供商 | 免费套餐 | 使用额度 | 功能特性 | 工作区限制 | 关键限制 | 操作 |
|---|---|---|---|---|---|---|
Docker HubDocker 原生镜像仓库 | Docker Personal 免费 | 1 个私有仓库、公开仓库不限,Personal 每小时 100 次拉取 | 支持镜像托管、官方镜像生态、Webhook、Docker Scout 基础能力和最广泛客户端兼容 | 最适合公开镜像和需要 Docker 原生发现能力的个人项目 | 拉取速率限制和 1 个私有仓库限制,使它不适合生产私有部署 | 访问官网 ↗ |
GitHub Container RegistryGitHub Packages / GHCR | 公开包免费;容器镜像存储和带宽当前免费 | 私有包使用 GitHub Packages 配额;同仓库 Actions 拉取不计传输 | 支持 OCI/Docker 镜像、GITHUB_TOKEN 鉴权、仓库权限联动、Actions 集成和细粒度可见性 | 最适合代码和 CI 已经在 GitHub 上的项目 | 私有包仍受配额影响;公开容器免费带宽属于当前政策,规模化前需核对 | 访问官网 ↗ |
GitLab Container RegistryDevSecOps 一体化 | GitLab Free 集成镜像仓库 | 镜像仓库内置在项目中;Git 仓库和 LFS 免费项目限制为 10 GiB | 支持项目/组级仓库、OCI/Docker 镜像、标签、权限、清理策略和 GitLab CI 集成 | 最适合 GitLab 原生 CI/CD 和项目级镜像权限 | 大型镜像库必须配置清理策略;项目存储和镜像仓库行为需按命名空间核对 | 访问官网 ↗ |
Amazon ECR PublicAWS 公开镜像仓库 | 公开镜像含免费传输额度 | 认证公开仓库含每月 5 TB 互联网传输;新私有 ECR 客户首年每月 500 MB 存储 | 支持公开 Gallery、IAM 鉴权、私有 ECR 配套、漏洞扫描选项和 AWS 部署链路 | 最适合 AWS 工作负载或面向 AWS 用户的公开镜像 | 私有 ECR 不是永久免费;首年或额度外存储与传输会计费 | 访问官网 ↗ |
Google Artifact RegistryGCP 制品仓库 | 0.5 GB 免费存储层 | 免费存储按结算账号在项目间共享;存储、传输和扫描分别计费 | 支持 Docker/OCI 镜像、语言包、远程/虚拟仓库、IAM 权限和 Google Cloud 部署集成 | 最适合 GCP 原生部署和多类型制品管理 | 免费层很小;漏洞扫描和出站流量可能才是真正成本边界 | 访问官网 ↗ |
Quay.ioRed Hat Quay | 公开仓库免费 | 免费层聚焦公开仓库;私有仓库依赖付费方案或试用 | 支持机器人账号、团队、访问控制、仓库自动化、日志和 OCI 镜像托管 | 适合需要企业化权限控制的公开 OCI 托管 | 不是免费私有镜像仓库;团队私有镜像需规划付费 | 访问官网 ↗ |
阿里云容器镜像服务 ACR中国区云镜像仓库 | 个人版免费 | 3 个命名空间、300 个公开仓库、1 个并发构建;每个阿里云账号 1 个个人版实例 | 支持镜像推拉、自动构建、中国区访问和阿里云部署集成 | 最适合中国区个人开发和测试 | 无 SLA,不建议生产使用;生产应走企业版 | 访问官网 ↗ |
Azure Container RegistryAzure 私有镜像仓库 | 无永久免费仓库层;可用 Azure 免费账号额度试用 | Basic 层含 10 GB 存储;网络与超额存储另行计费 | 支持私有仓库、Webhook、Azure 鉴权、Tasks 构建、Premium 地理复制和 Azure 部署集成 | 最适合 Azure 生产工作负载,不是免费探索优先 | 应视为付费基础设施;超出包含存储和出站流量会计费 | 访问官网 ↗ |
Docker Hub 和 Quay 更适合公开镜像。GHCR、GitLab、ECR、Artifact Registry 和 ACR 更适合镜像跟随仓库或云 IAM 权限。
镜像仓库靠近 Kubernetes、Serverless 容器或 VM 部署区域时,拉取延迟、出站费用和区域可靠性都会更好。
在镜像库变乱前,应设置不可变发布标签、短期分支标签、清理策略和漏洞扫描门禁。
构建缓存很大且可丢弃。生产发布镜像需要稳定标签、来源证明、签名和更严格权限。
如果 CI、自动扩容或大量服务器反复拉取同一基础镜像,免费公开仓库可能在最糟糕的时候触发限流。
每个标签都可能保留镜像层。没有清理策略时,旧分支构建和缓存会悄悄吃掉存储。
即使没有密钥,公开镜像也可能暴露包版本、内部路径、构建参数和运维假设。
镜像存储可能便宜,但漏洞扫描、签名、SBOM 和策略执行往往才是真正升级原因。
在 CI 中只构建一次,用 commit SHA 和发布版本打标签,推送到仓库,再用不可变 digest 或标签部署。
同一个镜像从开发晋级到预发再到生产,而不是每个环境重新构建。
可复用基础镜像可按需公开;应用镜像应使用私有权限和部署专用 Token。
Docker Hub 是公开发现的默认选择;如果镜像和 GitHub 仓库绑定,GHCR 很顺。Quay.io 也适合需要企业化权限控制的公开 OCI 镜像。
优先选择靠近运行环境和权限体系的仓库:GitHub 流程用 GHCR,GitLab CI/CD 用 GitLab Registry,AWS 用 ECR,GCP 用 Artifact Registry,中国区阿里云用 ACR,Azure 用 Azure Container Registry。
只有刻意公开时才适合。公开镜像可能暴露包版本、构建路径、标签和运维假设。私有应用镜像应使用私有仓库和最小权限部署凭据。
意外成本通常来自旧标签、缓存层、多架构镜像、漏洞扫描、跨区域复制,以及部署频繁拉取镜像产生的互联网出站流量。
保留不可变发布标签,删除短期分支和 PR 标签,设置保留策略,避免只用 latest 部署,并定期确认生产环境仍在使用哪些 digest。