工件缓存 - 概述
工件缓存功能允许用户在专用容器注册表中缓存容器映像。 工件缓存在基本、标准和高级服务层级提供。
本文是六个部分教程系列的第一部分。 本教程涵盖:
工件缓存
工件缓存可让你从公共和专用存储库缓存容器映像。
实现工件缓存后有以下优势:
更可靠的拉取操作:通过在 ACR 中缓存容器映像,可以更快地拉取容器映像。 由于 Microsoft 负责管理 Azure 网络,通过为客户提供异地复制和可用性区域支持,拉取操作速度会更快。
专用网络:缓存的注册表在专用网络上可用。 因此,用户可以配置其防火墙以满足合规性标准。
确保提供上游内容:所有注册表(尤其是如 Docker Hub 等公共注册表)都有匿名拉取限制,以确保它们可以向所有人提供服务。 工件缓存允许用户从本地 ACR(而不是上游注册表)拉取映像。 工件缓存可确保从上游传送内容,而用户可从缓存中拉取容器映像,而不会计入拉取限制。
术语
缓存规则 - 缓存规则是你可以创建的规则,用于将工件从受支持的存储库拉取到缓存中。
缓存规则包含四个部分:
规则名称 - 缓存规则的名称。 例如,
Hello-World-Cache
。源 - 源注册表的名称。
存储库路径 - 存储库的源路径,用于查找和检索要缓存的工件。 例如,
docker.io/library/hello-world
。新 ACR 存储库命名空间 - 用于存储工件的新存储库路径的名称。 例如,
hello-world
。 存储库不能已存在于 ACR 实例中。
凭据
凭据是源注册表的一组用户名和密码。 需要凭据才能使用公共或专用存储库进行身份验证。 凭据包含四个部分
凭据 - 凭据的名称。
源注册表登录服务器 - 源注册表的登录服务器。
源身份验证 - 用于存储凭据的密钥保管库位置。
用户名和密码机密 - 包含用户名和密码的机密。
限制
只有在可用容器映像上至少完成一个映像拉取后,才会发生缓存。 对于每个可用的新映像,必须完成新的映像拉取。 当新标记可用时,工件缓存不会自动拉取映像的新标记。 它位于路线图中,但在此版本中不受支持。
工件缓存仅支持 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/*
重叠。