將容器登錄手動移至另一個區域
有時您可能需要將 Azure 容器登錄從一個 Azure 區域移至另一個區域。 舉例來說,假如您在其他區域執行開發管線或者為新的部署目標提供主機服務,但想要提供附近的登錄,就必須進行這項操作。
雖然 Azure Resource Mover 目前無法自動移動 Azure 容器登錄,但您可以手動將容器登錄移至其他區域:
- 將登錄設定匯出至 Resource Manager 範本
- 使用該範本在另一個 Azure 區域中部署登錄
- 將登錄內容從來源登錄匯入目標登錄
注意
如果您需要將相同的容器映像散佈到多個 Azure 區域,Azure Container Registry 也支援異地複寫。 藉由異地複寫登錄 (需要進階服務層級),您可以使用來自單一登錄的相同映像和標記名稱,為多個區域提供服務。
必要條件
Azure CLI
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
考量
- 按照本文列出的步驟,將登錄移至相同訂閱帳戶中的其他區域。 若要將登錄移至相同 Active Directory 租用戶中的其他 Azure 訂閱帳戶,可能需要進行更多設定。
- 匯出和使用 Resource Manager 範本有助於重新建立許多登錄設定。 您可以透過編輯範本指定更多設定,或者先建立設定再更新目標登錄。
- 目前 Azure Container Registry 不支援將登錄移至其他 Active Directory 租用戶, 無論是使用客戶自控金鑰加密的登錄還是未加密登錄,都同樣適用這項限制。
- 如果您無法移動本文所述的登錄,請建立新的登錄,手動重新建立設定,然後在目標登錄中匯入登錄內容。
- 您可以找到將登錄資源移至相同訂用帳戶中的新資源群組,或將資源移至新訂用帳戶的步驟。
從來源登錄匯出範本
請使用 Azure 入口網站、Azure CLI、Azure PowerShell 或其他 Azure 工具匯出 Resource Manager 範本。 使用 Azure 入口網站:
在 Azure 入口網站中前往至來源登錄。
在功能表中的 [自動化] 下方,選取 [匯出範本] 及 [下載]。>
在新區域重新部署目標登錄
修改範本
檢查您下載的 JSON 檔案範本中的登錄屬性,視需要進行變更。 最低需求:
- 將登錄名稱的
defaultValue
變更為目標登錄想使用的名稱 - 將
location
更新為目標登錄所需的 Azure 區域
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"registries_myregistry_name": {
"defaultValue": "myregistry",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.ContainerRegistry/registries",
"apiVersion": "2020-11-01-preview",
"name": "[parameters('myregistry_name')]",
"location": "centralus",
...
}
]
}
如需詳細資訊,請參閱從 Azure 入口網站使用匯出的範本和範本參考。
建立資源群組
使用 az group create 建立目標登錄的資源群組。 下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組。
az group create --name myResourceGroup --location eastus
在新區域部署目標登錄
在下列範本中使用 az deployment group create 命令部署目標登錄:
az deployment group create --resource-group myResourceGroup \
--template-file template.json --name mydeployment
注意
如果部署期間發生錯誤,您可能需要更新範本檔案中的特定設定,再重試命令。
在目標登錄中匯入登錄內容
在目標區域建立登錄之後,請使用 az acr import 命令或對等的 PowerShell 命令 Import-AzContainerImage
將想要從來源登錄保留的映像和其他成品匯入目標登錄。 如需詳細資訊,請參閱將容器映像匯入容器登錄。
- 使用 Azure CLI 命令 az acr repository list 與 az acr repository show-tags,或是對等的 Azure PowerShell 命令協助列舉來源登錄的內容。
- 對個別成品執行匯入命令,或編寫在成品清單上執行的指令碼。
以下 Azure CLI 指令碼範例會列舉來源存放庫和標記,然後將成品匯入相同 Azure 訂閱帳戶中的目標登錄。 匯入特定存放庫或標記時可視需要進行修改。 若要從不同訂閱帳戶或租用戶中的登錄匯入,請參閱將容器映像匯入容器登錄中的範例。
#!/bin/bash
# Modify registry names for your environment
SOURCE_REG=myregistry
TARGET_REG=targetregistry
# Get list of source repositories
REPO_LIST=$(az acr repository list \
--name $SOURCE_REG --output tsv)
# Enumerate tags and import to target registry
for repo in $REPO_LIST; do
TAGS_LIST=$(az acr repository show-tags --name $SOURCE_REG --repository $repo --output tsv);
for tag in $TAGS_LIST; do
echo "Importing $repo:$tag";
az acr import --name $TARGET_REG --source $SOURCE_REG.azurecr.io/$repo":"$tag;
done
done
驗證目標登錄
在目標登錄中確認下列資訊:
- 登錄名稱、服務層級、公用存取、複寫等登錄設定
- 欲保留內容的存放庫和標籤
其他設定
如有需要,請在目標登錄中手動進行私人端點、IP 存取規則、受控識別等設定。
更新開發和部署系統,以便從來源登錄改為使用目標登錄。
更新所有用戶端防火牆規則,允許存取目標登錄。
刪除原始登錄
成功部署目標登錄,移轉內容並驗證登錄設定後,便可以刪除來源登錄。
下一步
- 進一步了解如何從公用登錄或其他私人登錄將容器映像匯入 Azure 容器登錄。
- 請參閱 Azure Container Registry 的 Resource Manager 範本參考。