將容器登錄手動移至另一個區域

有時您可能需要將 Azure 容器登錄從一個 Azure 區域移至另一個區域。 舉例來說,假如您在其他區域執行開發管線或者為新的部署目標提供主機服務,但想要提供附近的登錄,就必須進行這項操作。

雖然 Azure Resource Mover 目前無法自動移動 Azure 容器登錄,但您可以手動將容器登錄移至其他區域:

  • 將登錄設定匯出至 Resource Manager 範本
  • 使用該範本在另一個 Azure 區域中部署登錄
  • 將登錄內容從來源登錄匯入目標登錄

注意

如果您需要將相同的容器映像散佈到多個 Azure 區域,Azure Container Registry 也支援異地複寫。 藉由異地複寫登錄 (需要進階服務層級),您可以使用來自單一登錄的相同映像和標記名稱,為多個區域提供服務。

必要條件

Azure CLI

考量

  • 按照本文列出的步驟,將登錄移至相同訂閱帳戶中的其他區域。 若要將登錄移至相同 Active Directory 租用戶中的其他 Azure 訂閱帳戶,可能需要進行更多設定。
  • 匯出和使用 Resource Manager 範本有助於重新建立許多登錄設定。 您可以透過編輯範本指定更多設定,或者先建立設定再更新目標登錄。
  • 目前 Azure Container Registry 不支援將登錄移至其他 Active Directory 租用戶, 無論是使用客戶自控金鑰加密的登錄還是未加密登錄,都同樣適用這項限制。
  • 如果您無法移動本文所述的登錄,請建立新的登錄,手動重新建立設定,然後在目標登錄中匯入登錄內容
  • 您可以找到將登錄資源移至相同訂用帳戶中的新資源群組,或將資源移至新訂用帳戶的步驟。

從來源登錄匯出範本

請使用 Azure 入口網站、Azure CLI、Azure PowerShell 或其他 Azure 工具匯出 Resource Manager 範本。 使用 Azure 入口網站:

  1. Azure 入口網站中前往至來源登錄。

  2. 在功能表中的 [自動化] 下方,選取 [匯出範本] 及 [下載]。>

    Export template for container registry

在新區域重新部署目標登錄

修改範本

檢查您下載的 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 指令碼範例會列舉來源存放庫和標記,然後將成品匯入相同 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 存取規則、受控識別等設定。

  • 更新開發和部署系統,以便從來源登錄改為使用目標登錄。

  • 更新所有用戶端防火牆規則,允許存取目標登錄。

刪除原始登錄

成功部署目標登錄,移轉內容並驗證登錄設定後,便可以刪除來源登錄。

下一步