本文概述了使用本地注册表(例如 Azure 容器注册表 )维护公共内容的副本(包括 Docker 中心中的容器映像)的做法和工作流。
你的环境可能依赖于公共内容,例如公共容器映像、Helm chart、Open Policy Agent (OPA) 策略或其他工件。 例如,你可以通过直接从 Docker Hub 或其他公共注册表拉取映像来运行适用于服务路由的 nginx 或运行 docker build FROM alpine
。
如果没有正确的控制措施,则依赖于公共注册表内容可能会为映像开发和部署工作流带来风险。 若要缓解风险,请在可能的情况下保留公共内容的本地副本。 有关详细信息,请参阅开放容器计划博客。
如果当前从 Docker Hub 拉取公共映像作为生成或部署工作流的一部分,建议 使用 Docker 中心帐户进行身份验证 ,而不是发出匿名拉取请求。
发出频繁的匿名拉取请求时,可能会看到类似于 ERROR: toomanyrequests: Too Many Requests.
或 You have reached your pull rate limit.
的 Docker 错误。请登录 Docker Hub 以防止这些错误。
备注
从 2020 年 11 月 2 日起, 下载速率限制 适用于从 Docker 免费计划帐户向 Docker Hub 发出的匿名和经过身份验证的请求。 这些限制分别由 IP 地址和 Docker ID 强制实施。
若要估计拉取请求数,请记住,在使用云提供商服务或在企业 NAT 后面工作时,多个用户在 Docker Hub 上显示为 IP 地址的子集。 通过将 Docker 付费帐户身份验证添加到向 Docker 中心发出的请求,可以避免速率限制导致的潜在服务中断。
有关详细信息,请参阅 Docker 定价和订阅和 Docker 服务条款。
当向 Docker Hub 进行身份验证时,Docker Hub 支持使用个人访问令牌作为 Docker 密码的替代项。 建议将令牌用于从 Docker Hub 拉取映像的自动化服务。 你可以为不同的用户或服务生成多个令牌,并在不再需要时撤销令牌。
若要使用令牌通过 docker login
进行身份验证,请在命令行上省略密码。 当提示输入密码时,改为输入令牌。 如果为你的 Docker Hub 帐户启用了双重身份验证,则在从 Docker CLI 登录时必须使用个人访问令牌。
多个 Azure 服务(包括应用服务和 Azure 容器实例)支持从公共注册表(例如用于容器部署的 Docker 中心)拉取映像。 如果需要从 Docker Hub 部署映像,建议你配置设置来使用 Docker Hub 帐户进行身份验证。 示例:
应用服务
- 映像源:Docker 中心
- 存储库访问:专用
- 登录名:Docker Hub 用户名<
- 密码:Docker Hub 令牌<
有关详细信息,请参阅应用服务上通过 Docker Hub 进行身份验证的拉取。
Azure 容器实例
- 映像源:Docker Hub 或其他注册表
- 映像类型:专用
- 映像注册表登录服务器:dockerhub.azk8s.cn
- 映像注册表用户名:Docker Hub 用户名<
- 映像注册表密码:Docker Hub 令牌<
- 图像:dockerhub.azk8s.cn/存储库名称<:>标记<
有关使用公共内容的最佳做法是将注册表身份验证和工件缓存功能结合使用。 使用构件缓存将容器构件缓存到 Azure 容器注册表中,即使在专用网络中也可以做到。 使用项目缓存不仅可保护你免受注册表速率限制的影响,而且当与异地复制的 ACR 结合使用以从离 Azure 资源最近的区域中拉取项目时,也显著提高了拉取可靠性。 此外,可以使用 ACR 产品/服务的所有安全功能,包括专用网络、防火墙配置、服务主体等。 有关将公共内容与 ACR 项目缓存配合使用的完整信息,请参阅 项目缓存 教程。
若要管理公共映像的副本,请创建一个 Azure 容器注册表(如果还没有)。 使用 Azure CLI、 Azure 门户、 Azure PowerShell 或其他工具创建注册表。
请将基础映像和其他公共内容导入到你的 Azure 容器注册表,这是我们为你建议的一次性步骤。 Azure CLI 中的 az acr import 命令支持从公共注册表(例如 Docker 中心和 Azure 容器注册表)以及从专用容器注册表导入映像。
az acr import
不需要本地 Docker 安装。 可以使用本地安装的 Azure CLI 来运行它。 它支持任何 OS 类型的映像、多体系结构映像或 OCI 项目(例如 Helm 图表)。
根据你的组织的需求,你可以将内容导入到专用注册表,或导入到共享注册表中的存储库。
az acr import \
--name myregistry \
--source dockerhub.azk8s.cn/library/hello-world:latest \
--image hello-world:latest \
--username <Docker Hub username> \
--password <Docker Hub token>
应用程序映像的开发人员应确保其代码引用受其控制的本地内容。
- 更新映像引用以使用专用注册表。 例如,将 Dockerfile 中的
FROM baseimage:v1
语句更新为非 DNL 注册表更新为FROM myregistry.azurecr.cn/mybaseimage:v1
或为启用 DNL 的注册表更新为FROM myregistry-abc123.azurecr.cn/mybaseimage:v1
。 有关注册表创建期间 DNL 选项和 DNS 名称影响的详细信息,请参阅 快速入门 - 在门户中创建注册表。 - 配置凭据或身份验证机制以使用专用注册表。 确切的机制取决于你用于访问注册表的工具以及管理用户访问的方式。
若要在更新基础映像时自动生成应用程序映像,请设置 Azure 容器注册表任务。 此方法扩展了映像导入。 自动化的构建任务可以同时跟踪基础映像更新和源代码更新。
有关详细示例,请参阅如何使用 Azure 容器注册表任务消耗并维护公共内容。
备注
单个预配置的任务可以自动重新构建引用所依赖的基础映像的每个应用程序映像。
- 详细了解用于在 Azure 中构建、运行、推送和修补容器映像的 ACR 任务。
- 请参阅如何使用 Azure 容器注册表任务消耗和维护公共内容,了解用于更新环境的基础映像的自动化门控工作流。
- 请参阅 ACR 任务教程,了解有关自动构建和更新映像的更多示例。