本站包含联盟链接——如果你通过链接注册,我们可能获得佣金。 Affiliate links.

DigitalOcean 容器镜像库指南 2026 — 存储 Docker 镜像

DigitalOcean 容器镜像库指南 2026 — 存储 Docker 镜像

DigitalOcean 容器镜像库是由 DigitalOcean 完全托管的私有 Docker 镜像存储服务。它与标准 Docker CLI 集成,并直接连接到 DigitalOcean Kubernetes 和 App Platform。本指南将引导您了解定价层级、如何使用 doctl 推送和拉取镜像,以及长期的镜像库维护,包含您可以立即使用的实用命令。

什么是容器镜像库

DigitalOcean 容器镜像库(DOCR)是一项完全由 DigitalOcean 管理的私有 Docker 镜像存储服务。您无需设置自己的镜像库服务器、管理存储或自行修补安全系统。该镜像库完全支持 OCI(Open Container Initiative)标准,因此可以与 Docker、Buildx、Podman 或任何支持 Docker Registry API v2 的 CI/CD 工具无缝协作,无需对工作流进行重大更改。对于通过容器部署应用的开发团队——无论是在 Droplets、DigitalOcean Kubernetes(DOKS)还是 App Platform 上——容器镜像库是部署前存储已完成镜像的中心枢纽,取代了对 Docker Hub 公开仓库(除非您付费使用私有仓库,否则会向所有人暴露您的镜像)或在 Droplet 上运行自己的镜像库(需要您自行管理 SSL、磁盘空间和备份)的需求。DOCR 中的镜像 URL 遵循以下格式:registry.digitalocean.com/<registry-name>/<image-name>:<tag>,例如 registry.digitalocean.com/my-registry/my-app:v1.2。一个 DigitalOcean 账户创建一个镜像库(单个命名空间),但您可以根据您的计划的仓库限制在其中创建多个仓库。DOCR 与自托管镜像库的区别在于它与其他 DigitalOcean 服务无缝集成,无需手动设置凭据。DOKS 可以从 DOCR 拉取镜像而无需手动创建 imagePullSecrets,而 App Platform 使用 DOCR 作为其镜像源,当新镜像标签被推送时可以立即自动部署。需要注意的一个重要限制是:容器镜像库并非在每个 DigitalOcean 区域都可用。它目前在 Richmond(ric1)和 Kansas City(mkc1)中没有服务,不同于 Droplets、Kubernetes、Load Balancers 和 VPCs 覆盖所有 15 个数据中心。在设计将镜像库与这些区域中的集群或 Droplets 相连接的架构之前,务必首先检查区域可用性。

  1. 支持 OCI 标准的私有镜像库;与 Docker/Buildx/Podman 直接协作
  2. URL 格式:registry.digitalocean.com//:
  3. 与 DOKS 和 App Platform 连接,无需手动设置凭据
  4. 一个账户 = 一个镜像库命名空间,但您可以创建多个仓库

定价计划:Starter/Basic/Professional

基于真实使用经验,DigitalOcean 容器镜像库提供三个基于使用规模的层级:Starter、Basic 和 Professional。主要区别在于您可以创建的仓库数量、包含的存储空间和如果超过配额时的超额费用(截至 2026 年 7 月的价格——在做决定之前请检查 DigitalOcean 网站上的最新费率)。Starter 计划费用为 $0/月,您可以创建 1 个仓库,包含 500 MiB 的存储空间。它非常适合实验、小型个人项目或具有单一简单镜像的团队。这个免费层级没有超额费用,因为使用量是有限制的。Basic 计划费用为 $5/月,支持最多 5 个仓库,包含 5 GiB 的存储空间,如果超过配额则额外按 $0.02/GiB 收费。它适合具有多个服务或微服务且需要单独镜像的中小型团队。Professional 计划费用为 $20/月,允许无限仓库,包含 100 GiB 的存储空间,采用相同的 $0.02/GiB 超额费率。它适合具有许多镜像、每个镜像有多个标签以用于回滚场景或经常构建镜像并快速消耗存储空间的 CI/CD 的团队。选择计划应反映您团队的实际行为,而不仅仅是存在多少服务,因为您每次推送新标签时每个镜像层都会积累。如果您从不删除旧镜像或设置垃圾回收,您将比预期更快地达到配额。使用 doctl registry create my-registry --subscription-tier basic --region sgp1 创建具有特定计划的镜像库,并使用 doctl registry get 检查您的当前计划和存储消耗情况,该命令显示镜像库名称、端点、活跃计划和存储使用量与配额的比较。您可以随时使用 doctl registry update-subscription --subscription-tier professional 升级计划,无需重新创建镜像库或迁移现有镜像。

使用 doctl 推送/拉取 Docker 镜像

使用容器镜像库从安装 doctl 开始,doctl 是 DigitalOcean 的官方 CLI(github.com/digitalocean/doctl)。在 macOS 上通过 Homebrew 使用 brew install doctl 安装,在 Linux 上通过 snap 使用 sudo snap install doctl 安装,或直接从 GitHub releases 下载二进制文件。安装后,使用来自 cloud.digitalocean.com/account/api/tokens 的个人访问令牌进行身份验证,通过 doctl auth init,然后在提示时粘贴您的令牌。身份验证完成后,使用 doctl registry login 登录镜像库。此命令自动调用 Docker 的凭据辅助程序,让您的本地 Docker CLI 从 registry.digitalocean.com 推送/拉取而无需单独的 docker login 或密码管理(令牌按计划过期,需要定期重新登录)。要推送镜像,首先使用 docker build -t my-app . 正常构建它,然后使用 docker tag my-app registry.digitalocean.com/my-registry/my-app:v1 将其标记为指向您的镜像库,最后使用 docker push registry.digitalocean.com/my-registry/my-app:v1 推送。在另一端进行部署时——无论是 Droplet、Kubernetes 还是 App Platform——使用 docker pull registry.digitalocean.com/my-registry/my-app:v1 拉取镜像。doctl 也提供了不依赖每次使用 Docker CLI 而直接管理仓库和标签的命令:doctl registry repository list 显示镜像库中的所有仓库,doctl registry repository list-tags my-app 显示该仓库的每个标签及其文件大小和推送日期,doctl registry repository delete-tag my-app v1 删除您不再需要的标签,然后在运行垃圾回收以回收存储空间之前。对于使用 GitHub Actions 等 CI/CD 管道的团队,在工作流 YAML 中插入 doctl registry logindocker push 步骤,将您的个人访问令牌存储为 GitHub Secret,并在构建期间调用它。这可以确保每次您将代码合并到主分支时新镜像都会自动推送到镜像库。

要点总结: 安装 doctl:brew(macOS)/ snap(Linux)/ 来自 GitHub releases 的二进制文件

连接到 DigitalOcean Kubernetes

DigitalOcean Kubernetes(DOKS)与容器镜像库本地集成——无需手动创建 Kubernetes Secrets 来拉取镜像,这是其他提供商私有镜像库通常需要的步骤。通常,当集群需要从私有镜像库拉取时,您必须创建包含凭据的 imagePullSecrets 对象,然后在每个 pod 规范中引用它。但 DOCR 在单个命令中绑定到集群。使用 doctl kubernetes cluster registry add my-cluster 连接它们。此命令自动创建并分发必要的 Secrets 到集群的命名空间中,让 pods 立即从 registry.digitalocean.com 拉取而无需管理员手动进行 base64 编码凭据或运行 kubectl create secret docker-registry。要断开连接,使用 doctl kubernetes cluster registry remove my-cluster。连接后,在您的 Deployment 清单中正常引用镜像——例如,在您的容器规范中设置 image: registry.digitalocean.com/my-registry/my-app:v1——而无需向单个 pods 添加 imagePullSecrets,因为集群默认在服务账户级别绑定权限。从成本角度来看,DOKS 保持控制平面免费但对节点池收费,从 $12/月每个节点开始(使用标准 Droplet 定价)。容器镜像库定价基于您选择的层级(Starter/Basic/Professional)是单独的。将镜像库与集群相连接不会产生除这两项服务之外的额外费用。请注意,镜像库和 Kubernetes 无需在同一区域即可连接(链接通过 API 发生,而不是单个区域内的私有网络),但经常跨区域拉取镜像可能会减慢部署速度,尤其是对于大型镜像。考虑将镜像库放在与集群实际区域相近的地方以减少拉取延迟。

连接到 App Platform 用于 CI/CD

App Platform 是 DigitalOcean 的 PaaS 服务,可以直接从容器镜像部署,而不仅仅从 GitHub/GitLab 中的源代码部署。当您创建新应用并选择 DigitalOcean 容器镜像库作为镜像源时,系统允许您从同一账户的镜像库中选择任何仓库和标签——无需单独的凭据,因为 App Platform 和镜像库共享一个账户。对于 CI/CD 工作流的关键优势是 App Platform 的自动部署功能:每当新镜像标签被推送到您的链接仓库时,App Platform 会自动触发部署,无需您从 CI 管道中单独调用 DigitalOcean API。这创建了一个干净的 CI 流程:构建镜像、使用定义的标签(如 latest 或 commit SHA)推送到 DOCR,然后 App Platform 检测标签并自动部署。通过控制面板创建或编辑应用时配置此功能,或通过应用规范(YAML)文件,通过设置 image.registry_type: DOCRimage.repositoryimage.tag,然后使用 doctl apps create --spec app.yamldoctl apps update <app-id> --spec app.yaml 进行更新来部署。从成本角度来看,App Platform 为静态站点提供免费层级(最多 3 个应用,每个应用 1 GiB 传输)。从容器镜像部署需要从 Shared 层级起的付费计划,具有 1vCPU/512MiB RAM/50GiB 传输,每月 $5,可扩展至更大的实例大小(DigitalOcean 在 2026 年中期放弃了旧的层级名称如 Basic/Professional,转而让您直接选择容器实例大小)。一个重要的限制:您只能引用同一 DigitalOcean 账户中的镜像库中的镜像。您无法通过此自动部署机制从其他账户的镜像库或 Docker Hub 公开拉取镜像——您必须首先将镜像镜像到您自己的 DOCR 中。

维护您的镜像库:垃圾回收和删除旧镜像

在运行镜像库一段时间后,经常推送镜像而不删除旧标签,您的存储配额会比预期填满得更快,因为每个镜像层(即使部分与之前的标签重叠)在显式删除之前都会保留在磁盘上。DigitalOcean 容器镜像库包括垃圾回收功能,可从不再被任何标签引用的层和清单中回收空间。标准过程是:首先使用 doctl registry repository delete-tag my-app v0.9 删除您不再需要的标签,或使用 doctl registry repository delete my-old-app --force 删除整个仓库(如果您不再使用它)。仅删除标签不会立即释放存储空间,因为底层层会保留直到您运行垃圾回收。使用 doctl registry garbage-collection start my-registry 开始垃圾回收。系统扫描没有标签引用的清单和层,然后删除它们。在垃圾回收期间,避免向同一镜像库推送新镜像,因为操作可能与扫描过程冲突。使用 doctl registry garbage-collection get-active my-registry 检查垃圾回收是否在运行,并使用 doctl registry garbage-collection list my-registry 查看过去的运行情况。经常从 CI/CD 推送镜像的团队应该将垃圾回收作为计划例程运行:例如,设置策略以保留每个仓库只有最后 N 个标签(如最近 10 个标签用于回滚功能),使用调用 doctl registry repository list-tags 比较日期的脚本删除比这更旧的标签,然后按周度等计划运行垃圾回收。此方法防止不必要的计划升级,因为存储增长仅是因为旧镜像从未被删除,而不是因为实际使用增加。

常见错误及其修复方法

使用容器镜像库持续使用的最常见错误是忘记定期运行垃圾回收。仅使用 doctl registry repository delete-tag 删除标签不会立即回收存储空间——没有标签引用的层会保留直到您运行 doctl registry garbage-collection start。CI/CD 在每个提交时推送镜像但从不运行垃圾回收的团队经常看到每 GiB $0.02 的超额账单稳步增加,即使只有少数镜像在活跃使用中。其余存储保存在后台累积的孤立层。仅次于此的是草率的标签管理,特别是在生产中仅使用 latest 标签并在每次部署时覆盖它。这使回滚变得不可能,因为 latest 总是指向最新的镜像;较旧的版本,即使没有被删除,也没有标签可以将其拉回。修复方法是使用标识信息(如 commit SHA 或版本号)以及 latest 为每个构建标记,这样您总是可以回滚。第三个常见问题特定于 CI/CD 团队是个人访问令牌过期。doctl registry login 使用的令牌可能会从 cloud.digitalocean.com/account/api/tokens 过期或被撤销而您没有更新 CI 密钥,导致 doctl registry login 突然在曾经工作的管道中途失败。团队应该定期查看令牌过期日期或对 CI/CD 使用与开发人员个人令牌分离的专用服务账户令牌;这样,撤销单个令牌不会破坏管道。最后一个常见错误在多项目团队中是推送到错误的仓库或账户,特别是在多个 DigitalOcean 团队之间切换上下文时没有验证 doctl 当前指向哪个账户,或使用不正确的镜像库名称进行标记。Docker CLI 如果仓库不存在则自动创建它,所以没有错误标记这个错误——镜像默默地落在错误的位置。这可能会点击您的计划的仓库配额(Basic 计划限制 5 个仓库)而无明显原因。在生产中推送之前始终仔细检查您的 doctl 上下文和标签名称。

最佳实践

坚实的标记策略是可持续的容器镜像库管理的基础。大多数开发团队使用语义版本控制以及 commit SHA,例如 docker tag my-app registry.digitalocean.com/my-registry/my-app:v1.4.2 配合 docker tag my-app registry.digitalocean.com/my-registry/my-app:$(git rev-parse --short HEAD),所以您可以将每个镜像追踪回其 commit。latest 标签仍然适用于测试环境,但不应是您的生产部署的唯一标签,因为回滚变得不可能。推荐的 CI/CD 模式是"一次构建,处处推广":构建镜像一次,然后通过每个环境移动相同的镜像(一次构建,处处推广),而不是为测试阶段重新构建然后再为生产重新构建。这减少了由于构建之间的依赖版本转变导致镜像内容在环境之间不同的风险。通过推送单个构建与 commit 特定标签来完成此操作,然后有每个环境拉取完全相同的标签而不依赖 latest。减小镜像大小有助于在每个计划中的推送/拉取速度和存储消耗。基本方法使用多阶段构建:在一个包含您完整工具链的镜像中分离编译/构建步骤与用于运行应用的最终镜像,然后将仅二进制或必要文件复制到较小的基础镜像(如 alpine 或 distroless)。与 .dockerignore 文件配合使用以从一开始阻止复制不必要的文件,如旧的 node_modules、.git 或日志文件到构建上下文中。较小的镜像降低垃圾回收开销并相应减少超额成本。对于多人或多团队设置,通过 DigitalOcean Teams 而不是跨每个人共享一个个人访问令牌来管理镜像库访问。按角色拆分令牌:一个令牌用于具有最小必需权限的 CI/CD 管道,与个别开发人员在其自己的机器上使用的令牌分开。如果某人离开或令牌泄露,您可以仅撤销该令牌而无需破坏管道或其他开发人员。也请验证镜像库是否绑定到 DigitalOcean Teams 内的正确项目,确保开发/测试/生产环境清晰分离。

领取 $200 免费额度 →

常见问题(FAQ)

容器镜像库与 Docker Hub 有何不同?
DOCR 是与您的 DigitalOcean 账户直接关联的私有镜像库,与 DOKS 和 App Platform 本地集成——无需手动设置凭据。Docker Hub 是一个公开镜像库,需要单独付费的计划以获得私有仓库,并缺乏与 DigitalOcean 服务的自动集成。根据您是否主要在 DigitalOcean 上进行部署来选择。
我可以免费使用容器镜像库吗?
可以,Starter 计划费用为 $0/月,支持 1 个仓库,包含 500 MiB 的存储空间。它适合实验或小型单镜像项目。对于多个仓库或更大的存储空间,升级到 Basic($5/月)或 Professional($20/月)。
如果我超过我的计划的存储配额会发生什么?
Basic 和 Professional 计划在您超过包含的存储空间时按 $0.02/GiB 收费。Starter 作为免费计划,没有超额——如果您达到 500 MiB,删除旧镜像/标签或升级到 Basic/Professional 以继续。
容器镜像库在每个 DigitalOcean 区域都可用吗?
不是。容器镜像库目前在 Richmond(ric1)和 Kansas City(mkc1)中没有服务。其他服务如 Droplets、Kubernetes、Load Balancers 和 VPC 覆盖所有 15 个数据中心。在将镜像库与这些区域中的集群或 Droplets 相连接之前,务必检查区域可用性。
我需要手动创建 Secrets 来与 DigitalOcean Kubernetes 使用镜像库吗?
不是。命令 doctl kubernetes cluster registry add 自动将必要的 Secret 绑定到集群的命名空间中,让 pods 立即从 DOCR 拉取而无需手动 imagePullSecrets 或 kubectl create secret docker-registry。
升级或降级镜像库计划时需要迁移镜像吗?
不是。使用 doctl registry update-subscription --subscription-tier 随时更改计划而无需创建新镜像库或移动现有镜像。所有镜像和标签保持原位;仅基于新计划更改仓库和存储配额。