工件缓存 - 概述

工件缓存功能允许用户在专用容器注册表中缓存容器映像。 工件缓存采用“基本”、“标准”和“高级”服务层级

本文是六个部分教程系列的第一部分。 本教程涵盖:

  1. 工件缓存
  2. 启用工件缓存 - Azure CLI
  3. 通过身份验证启用工件缓存 - Azure CLI
  4. 工件缓存故障排除指南

工件缓存

工件缓存可让你从公共和专用存储库缓存容器映像。

实现工件缓存后有以下优势:

更可靠的拉取操作:通过在 ACR 中缓存容器映像,可以更快地拉取容器映像。 由于 Microsoft 负责管理 Azure 网络,通过为客户提供异地复制和可用性区域支持,拉取操作速度会更快。

专用网络:缓存的注册表在专用网络上可用。 因此,用户可以配置其防火墙以满足合规性标准。

确保提供上游内容:所有注册表(尤其是如 Docker Hub 等公共注册表)都有匿名拉取限制,以确保它们可以向所有人提供服务。 工件缓存允许用户从本地 ACR(而不是上游注册表)拉取映像。 工件缓存可确保从上游传送内容,而用户可从缓存中拉取容器映像,而不会计入拉取限制。

术语

  • 缓存规则 - 缓存规则是你可以创建的规则,用于将工件从受支持的存储库拉取到缓存中。

    • 缓存规则包含四个部分:

      1. 规则名称 - 缓存规则的名称。 例如,Hello-World-Cache

      2. 源 - 源注册表的名称。

      3. 存储库路径 - 存储库的源路径,用于查找和检索要缓存的工件。 例如,docker.io/library/hello-world

      4. 新 ACR 存储库命名空间 - 用于存储工件的新存储库路径的名称。 例如,hello-world。 存储库不能已存在于 ACR 实例中。

  • 凭据

    • 凭据是源注册表的一组用户名和密码。 需要凭据才能使用公共或专用存储库进行身份验证。 凭据包含四个部分

      1. 凭据 - 凭据的名称。

      2. 源注册表登录服务器 - 源注册表的登录服务器。

      3. 源身份验证 - 用于存储凭据的密钥保管库位置。

      4. 用户名和密码机密 - 包含用户名和密码的机密。

限制

  • 只有在可用容器映像上至少完成一个映像拉取后,才会发生缓存。 对于每个可用的新映像,必须完成新的映像拉取。 当新标记可用时,工件缓存不会自动拉取映像的新标记。 它位于路线图中,但在此版本中不受支持。

  • 工件缓存仅支持 1000 条缓存规则。

上游支持

工件缓存当前支持以下上游注册表:

上游注册表 支持 可用性
Docker Hub 支持经过身份验证的拉取和未经身份验证的拉取。 Azure CLI、Azure 门户
Microsoft 工件注册表 仅支持未经身份验证的拉取。 Azure CLI、Azure 门户
ECR Public 仅支持未经身份验证的拉取。 Azure CLI、Azure 门户
GitHub 容器注册表 支持经过身份验证的拉取和未经身份验证的拉取。 Azure CLI、Azure 门户
Nvidia 支持经过身份验证的拉取和未经身份验证的拉取。 Azure CLI
Quay 支持经过身份验证的拉取和未经身份验证的拉取。 Azure CLI、Azure 门户
registry.k8s.io 支持经过身份验证的拉取和未经身份验证的拉取。 Azure CLI

通配符

通配符使用星号 (*) 来匹配容器映像注册表中的多个路径。 工件缓存当前支持以下通配符:

注意

缓存规则从目标存储库映射到源存储库。

注册表级别通配符

注册表级别通配符允许你缓存来自上游注册表的所有存储库。

缓存规则 映射 示例
contoso.azurecr.cn/* => mcr.microsoft.com/* 将 ACR 下的所有映像映射到 MCR。 contoso.azurecr.cn/myapp/image1 => mcr.microsoft.com/myapp/image1
contoso.azurecr.cn/myapp/image2 => mcr.microsoft.com/myapp/image2

存储库级别通配符

存储库级别通配符允许你缓存来自上游注册表的所有存储库(映射到存储库前缀)。

缓存规则 映射 示例
contoso.azurecr.cn/dotnet/* => mcr.microsoft.com/dotnet/* 将 ACR 下的特定存储库映射到 MCR 中的相应存储库。 contoso.azurecr.cn/dotnet/sdk => mcr.microsoft.com/dotnet/sdk
contoso.azurecr.cn/dotnet/runtime => mcr.microsoft.com/dotnet/runtime
contoso.azurecr.cn/library/dotnet/* => mcr.microsoft.com/dotnet/*
contoso.azurecr.cn/library/python/* => docker.io/library/python/*
将 ACR 下的特定存储库映射到来自不同上游注册表的存储库。 contoso.azurecr.cn/library/dotnet/app1 => mcr.microsoft.com/dotnet/app1
contoso.azurecr.cn/library/python/app3 => docker.io/library/python/app3

基于通配符的缓存规则的限制

通配符缓存规则使用星号 (*) 来匹配容器映像注册表中的多个路径。 这些规则不能与其他通配符缓存规则重叠。 换句话说,如果你为某个注册表路径设置了通配符缓存规则,则无法添加与其重叠的另一个通配符规则。

下面是重叠规则的一些示例:

示例 1:

现有缓存规则:contoso.azurecr.cn/* => mcr.microsoft.com/*
正在添加的新缓存:contoso.azurecr.cn/library/* => docker.io/library/*

由于目标存储库路径 contoso.azurecr.cn/library/* 与现有通配符规则 contoso.azurecr.cn/* 重叠,因此系统会阻止添加新的缓存规则。

示例 2:

现有缓存规则:contoso.azurecr.cn/library/* =>mcr.microsoft.com/library/*
正在添加的新缓存:contoso.azurecr.cn/library/dotnet/* =>docker.io/library/dotnet/*

由于目标存储库路径 contoso.azurecr.cn/library/dotnet/* 与现有通配符规则 contoso.azurecr.cn/library/* 重叠,因此系统会阻止添加新的缓存规则。

静态/固定缓存规则的限制

静态或固定缓存规则更加具体,不使用通配符。 它们可以与基于通配符的缓存规则重叠。 如果缓存规则指定固定存储库路径,则允许与基于通配符的缓存规则重叠。

示例 1:

现有缓存规则:contoso.azurecr.cn/* =>mcr.microsoft.com/*
正在添加的新缓存:contoso.azurecr.cn/library/dotnet =>docker.io/library/dotnet

允许添加新的缓存规则,因为 contoso.azurecr.cn/library/dotnet 是静态路径,可以与通配符缓存规则 contoso.azurecr.cn/* 重叠。