Azure Container Registry 中的成品快取 (預覽)
成品快取功能可讓使用者快取私人容器登錄中的容器映像。 成品快取可在基本、標準和 進階版 服務層中使用。
成品快取藉由提供公用和私人存放庫的快取解決方案,來增強容器映像管理。
成品快取透過 Azure Container Registry (ACR) 提供更快速且更 可靠的提取作業 ,其利用異地復寫和可用性區域支援等功能,以獲得更高的可用性和速度的映像提取。
成品快取可讓快取的登錄可透過 專用網 存取,讓用戶順暢地配合防火牆組態和合規性標準。
成品快取可解決 Docker Hub 等公用登錄所強加的匿名提取限制挑戰。 藉由允許使用者從本機 ACR 提取影像,它會規避這些限制,確保 上游來源的不間斷內容傳遞 ,並消除達到提取限制的問題。
詞彙
快取規則 - 快取規則是您可以建立以將成品從支援的存放庫提取至快取的規則。
快取規則包含四個部分:
規則名稱 - 快取規則的名稱。 例如:
Hello-World-Cache
。來源 - 來源登錄的名稱。
存放庫路徑 - 尋找和擷取您想要快取的成品所在存放庫來源路徑。 例如:
docker.io/library/hello-world
。新的 ACR 存放庫命名空間 - 儲存成品的新存放庫路徑名稱。 例如:
hello-world
。 ACR 執行個體內部不能有已存在的存放庫。
認證
認證是一組使用者名稱和密碼,用於來源登錄。 您需要認證才能向公用或私人存放庫進行驗證。 認證包含四個部分
認證 - 認證的名稱。
來源登錄登入伺服器 - 來源登錄的登入伺服器。
來源驗證 - 用來儲存認證的金鑰保存庫位置。
使用者名稱和密碼祕密 - 包含使用者名稱和密碼的秘密。
限制
只有對可用的容器映像完成至少一次的映像提取之後,才會發生快取。 對於每個可用的新映像,必須完成新的映像提取。 當有新的標籤可用時,成品快取不會自動提取影像的新標籤。 此功能已列入藍圖,但此發行版本不支援。
成品快取僅支援 1,000 個快取規則。
上游支援
成品快取目前支援下列上游登錄:
上游登錄 | 支援 | 可用性 |
---|---|---|
Docker Hub (英文) | 同時支援已驗證的提取和未經驗證的提取。 | Azure CLI、Azure 入口網站 |
Microsoft 成品登錄 | 僅支援未經驗證的提取。 | Azure CLI、Azure 入口網站 |
彈性容器登錄(ECR) 公用 | 僅支援未經驗證的提取。 | Azure CLI、Azure 入口網站 |
GitHub Container Registry | 同時支援已驗證的提取和未經驗證的提取。 | Azure CLI、Azure 入口網站 |
Nvidia | 同時支援已驗證的提取和未經驗證的提取。 | Azure CLI |
Quay | 同時支援已驗證的提取和未經驗證的提取。 | Azure CLI、Azure 入口網站 |
registry.k8s.io | 同時支援已驗證的提取和未經驗證的提取。 | Azure CLI |
Google Container Registry | 同時支援已驗證的提取和未經驗證的提取。 | Azure CLI |
萬用字元
萬用字元會使用星號 (*) 來比對容器映像登錄內的多個路徑。 成品快取目前支援下列通配符:
注意
來自目標存放庫 => 來源存放庫的快取規則對應。
登錄層級萬用字元
登錄層級萬用字元可讓您從上游登錄快取所有存放庫。
快取規則 | 對應 | 範例 |
---|---|---|
contoso.azurecr.io/* => mcr.microsoft.com/* | 將 ACR 下的所有映像對應至 MCR。 | contoso.azurecr.io/myapp/image1 => mcr.microsoft.com/myapp/image1 contoso.azurecr.io/myapp/image2 => mcr.microsoft.com/myapp/image2 |
存放庫層級萬用字元
存放庫層級萬用字元可讓您快取上游登錄中對應到存放庫前置詞的所有存放庫。
快取規則 | 對應 | 範例 |
---|---|---|
contoso.azurecr.io/dotnet/* => mcr.microsoft.com/dotnet/* | 將 ACR 下的特定存放庫對應至 MCR 中的相對應存放庫。 | contoso.azurecr.io/dotnet/sdk => mcr.microsoft.com/dotnet/sdk contoso.azurecr.io/dotnet/runtime => mcr.microsoft.com/dotnet/runtime |
contoso.azurecr.io/library/dotnet/* => mcr.microsoft.com/dotnet/* contoso.azurecr.io/library/python/* => docker.io/library/python/* |
將 ACR 下的特定存放庫對應至不同上游登錄中的存放庫。 | contoso.azurecr.io/library/dotnet/app1 => mcr.microsoft.com/dotnet/app1 contoso.azurecr.io/library/python/app3 => docker.io/library/python/app3 |
萬用字元型快取規則的限制
萬用字元快取規則會使用星號 (*) 來比對容器映像登錄內的多個路徑。 這些規則無法與其他通配符快取規則重疊。 換句話說,如果您對某個登錄路徑有萬用字元快取規則,則無法新增與它重疊的另一個萬用字元規則。
以下是重疊規則的一些範例:
範例 1:
現有的快取規則:contoso.azurecr.io/* => mcr.microsoft.com/*
正在新增的新快取:contoso.azurecr.io/library/* => docker.io/library/*
新增快取規則會被阻止,因為目標存放庫路徑 contoso.azurecr.io/library/*
與現有的萬用字元規則 contoso.azurecr.io/*
重疊。
範例 2:
現有的快取規則:contoso.azurecr.io/library/*
=>mcr.microsoft.com/library/*
正在新增的新快取:contoso.azurecr.io/library/dotnet/*
=>docker.io/library/dotnet/*
新增快取規則會被阻止,因為目標存放庫路徑 contoso.azurecr.io/library/dotnet/*
與現有的萬用字元規則 contoso.azurecr.io/library/*
重疊。
靜態/固定快取規則的限制
靜態或固定快取規則更具體,且不使用萬用字元。 它們可以與萬用字元型快取規則重疊。 如果快取規則指定固定存放庫路徑,則允許與通配符型快取規則重疊。
範例 1:
現有的快取規則:contoso.azurecr.io/*
=>mcr.microsoft.com/*
正在新增的新快取:contoso.azurecr.io/library/dotnet
=>docker.io/library/dotnet
允許新增快取規則,因為 contoso.azurecr.io/library/dotnet
是靜態路徑,而且可以與萬用字元快取規則 contoso.azurecr.io/*
重疊。
啟用成品快取 - Azure CLI
您可以遵循下列步驟,在 Azure Container Registry 中使用或不使用 Azure CLI 驗證來啟用成品快取。
必要條件
- 您可以使用 Azure Cloud Shell,或安裝在本機的 Azure CLI 以執行本文中的命令範例。 如果想要在本機使用,則需要 2.46.0 版或更新版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - 您現有的 Key Vault 可儲存認證。 深入了解如何在 Key Vault 中建立和儲存認證。
- 您可以從 Key Vault 設定和擷取祕密。 深入了解如何從 Key Vault 設定和擷取祕密。
設定並建立不含認證的快取規則。
執行 az acr Cache create 命令以建立快取規則。
- 例如,在不使用認證的情況下,為指定
MyRegistry
Azure Container Registry 建立快取規則。
az acr Cache create -r MyRegistry -n MyRule -s docker.io/library/ubuntu -t ubuntu-
- 例如,在不使用認證的情況下,為指定
執行 az acr Cache show 命令以顯示快取規則。
- 例如,顯示指定
MyRegistry
Azure Container Registry 的快取規則。
az acr Cache show -r MyRegistry -n MyRule
- 例如,顯示指定
建立認證
設定認證之前,您必須在 Azure KeyVault 中建立和儲存祕密,並從 Key Vault 擷取祕密。 深入瞭解如何在 金鑰保存庫 中建立和儲存認證。以及從 金鑰保存庫 設定和擷取秘密。
執行 az acr credential set create 命令以建立認證。
- 例如,為指定的
MyRegistry
Azure Container Registry 建立認證。
az acr credential-set create -r MyRegistry \ -n MyRule \ -l docker.io \ -u https://MyKeyvault.vault.azure.net/secrets/usernamesecret \ -p https://MyKeyvault.vault.azure.net/secrets/passwordsecret
- 例如,為指定的
執行 az acr credential set update 以更新認證集上的使用者名稱或密碼 KV 祕密識別碼。
- 例如,為指定的
MyRegistry
Azure Container Registry 更新認證上的使用者名稱或密碼 KV 祕密識別碼。
az acr credential-set update -r MyRegistry -n MyRule -p https://MyKeyvault.vault.azure.net/secrets/newsecretname
- 例如,為指定的
執行 az-acr-credential-set-show 以顯示認證。
- 例如,顯示指定
MyRegistry
Azure Container Registry 的認證。
az acr credential-set show -r MyRegistry -n MyCredSet
- 例如,顯示指定
使用認證設定和建立快取規則
執行 az acr cache create 命令以建立快取規則。
- 例如,為指定的
MyRegistry
Azure Container Registry,建立具有認證的快取規則。
az acr cache create -r MyRegistry -n MyRule -s docker.io/library/ubuntu -t ubuntu -c MyCredSet
- 例如,為指定的
執行 az acr cache update 命令,以更新快取規則上的認證。
- 例如,為指定的
MyRegistry
Azure Container Registry 更新快取規則上的認證。
az acr cache update -r MyRegistry -n MyRule -c NewCredSet
- 例如,從指定
MyRegistry
Azure Container Registry 的現有快取規則中移除認證。
az acr cache update -r MyRegistry -n MyRule --remove-cred-set
- 例如,為指定的
執行 az acr cache show 命令以顯示快取規則。
- 例如,顯示指定
MyRegistry
Azure Container Registry 的快取規則。
az acr cache show -r MyRegistry -n MyRule
- 例如,顯示指定
將權限指派給 Key Vault
取得用以存取 Key Vault 的系統身分識別主體標識碼。
PRINCIPAL_ID=$(az acr credential-set show -n MyCredSet \ -r MyRegistry \ --query 'identity.principalId' \ -o tsv)
執行 az keyvault set-policy 命令,以在提取映像之前,將存取權指派給 Key Vault。
- 例如,指派認證存取 KeyVault 祕密的權限
az keyvault set-policy --name MyKeyVault \ --object-id $PRINCIPAL_ID \ --secret-permissions get
提取您的映像
使用 Docker 命令,依據登錄登入伺服器名稱、存放庫名稱及其所需標籤從快取提取映像。
- 例如,針對指定的登錄登入伺服器
myregistry.azurecr.io
,從所需標籤為latest
的存放庫hello-world
提取映像。
docker pull myregistry.azurecr.io/hello-world:latest
- 例如,針對指定的登錄登入伺服器
清除資源
執行 az acr cache list 命令,以列出 Azure Container Registry 中的快取規則。
- 例如,列出指定
MyRegistry
Azure Container Registry 的快取規則。
az acr cache list -r MyRegistry
- 例如,列出指定
執行 az acr cache delete 命令,以刪除快取規則。
- 例如,刪除指定
MyRegistry
Azure Container Registry 的快取規則。
az acr cache delete -r MyRegistry -n MyRule
- 例如,刪除指定
執行 az acr credential set list,以列出 Azure Container Registry 中的認證。
- 例如,列出指定
MyRegistry
Azure Container Registry 的認證。
az acr credential-set list -r MyRegistry
- 例如,列出指定
執行 az-acr-credential-set-delete 以刪除認證。
- 例如,刪除指定
MyRegistry
Azure Container Registry 的認證。
az acr credential-set delete -r MyRegistry -n MyCredSet
- 例如,刪除指定
啟用成品快取 - Azure 入口網站
您可以遵循下列步驟,在 Azure Container Registry 中使用或不使用 Azure 入口網站 驗證來啟用成品快取。
必要條件
- 登入 Azure 入口網站
- 您有現有的 Key Vault 可儲存認證。 深入了解如何在 Key Vault 中建立和儲存認證。
- 您有現有的金鑰保存庫,而不需要角色型存取(RBAC) 控制項。
在沒有認證的情況下設定成品快取
請遵循在 Azure 入口網站建立快取規則的步驟。
瀏覽至您的 Azure Container Registry。
在側邊 [功能表],[服務] 下,選取 [快取]。
選取 [建立規則]。
[新增快取規則] 的視窗隨即出現。
輸入 [規則名稱]。
從下拉功能表中選取 [來源] 登錄。
輸入您要快取之成品 [存放庫路徑]。
如果您未存取私人存放庫或執行已驗證的提取,則可以略過 [驗證]。
在 [目的地] 下,輸入 [新增 ACR 存放庫命名空間] 的名稱來儲存快取的成品。
選取 [儲存]。
使用 Docker 命令,依據登錄登入伺服器名稱、存放庫名稱及其所需標籤從快取提取映像。
- 例如,針對指定的登錄登入伺服器
myregistry.azurecr.io
,從所需標籤為latest
的存放庫hello-world
提取映像。
docker pull myregistry.azurecr.io/hello-world:latest
- 例如,針對指定的登錄登入伺服器
使用驗證設定成品快取
請遵循在 Azure 入口網站建立快取規則的步驟。
瀏覽至您的 Azure Container Registry。
在側邊 [功能表],[服務] 下,選取 [快取]。
選取 [建立規則]。
[新增快取規則] 的視窗隨即出現。
輸入 [規則名稱]。
從下拉功能表中選取 [來源] 登錄。
輸入您要快取的成品 [存放庫路徑]。
若要將驗證新增至存放庫,請核取 [驗證] 方塊。
選擇 [建立新的認證] 以建立一組新的認證,儲存來源登錄的使用者名稱和密碼。 瞭解如何 建立新的認證。
如果您已備妥認證,請從下拉式功能表中選取認證。
在 [目的地] 下,輸入 [新增 ACR 存放庫命名空間] 的名稱來儲存快取的成品。
選取 [儲存]。
使用 Docker 命令,依據登錄登入伺服器名稱、存放庫名稱及其所需標籤從快取提取映像。
- 例如,針對指定的登錄登入伺服器
myregistry.azurecr.io
,從所需標籤為latest
的存放庫hello-world
提取映像。
docker pull myregistry.azurecr.io/hello-world:latest
- 例如,針對指定的登錄登入伺服器
建立新的認證
設定認證之前,您必須在 Azure KeyVault 中建立和儲存祕密,並從 Key Vault 擷取祕密。 深入瞭解如何在 金鑰保存庫 中建立和儲存認證。以及從 金鑰保存庫 設定和擷取秘密。
瀏覽至 [認證]>[建立認證]。
針對來源登錄的新認證,輸入 [名稱]。
選取 [來源驗證]。 成品快取目前支援從 金鑰保存庫 選取,並輸入秘密 URI。
針對 [從 Key Vault 選取] 選項,深入了解使用金鑰保存庫建立認證。
選取 [ 建立]。
下一步
- 請前進到下一篇文章,以查看登錄快取的疑難排解指南。