Compartilhar via

快速入门:使用 ARM 模板创建异地复制容器注册表

本快速入门演示如何使用 Azure Resource Manager 模板(ARM 模板)创建Azure Container Registry实例。 该模板设置一个 geo-replicated 注册表,该注册表会自动跨多个Azure区域同步注册表内容。 借助异地复制,可以从区域部署对映像进行网络邻近访问,同时提供单一管理体验。 这是高级注册表服务层级的一项功能。

Azure Resource Manager模板是一个 JavaScript 对象表示法(JSON)文件,用于定义项目的基础结构和配置。 模板使用声明性语法。 你可以在不编写用于创建部署的编程命令序列的情况下,描述预期部署。

重复复制的注册表不支持 ARM/Bicep 模板的完整模式部署。

如果你的环境满足先决条件,并且你熟悉使用 ARM 模板,请选择 部署到Azure 按钮。 模板将在Azure门户中打开。

注意

当我们从 https://raw.githubusercontent.com/ 网站下载特定模板并尝试使用自定义模板进行部署时,有时会遇到某些问题。

githubusercontent 前缀模板部署问题

我们可以按照以下说明在Azure China 21Vianet上部署模板:

  1. 复制模板 URI,通过更改前缀、中缀和模板文件名来转换 URI。 例如:源 URI 为 https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.network/vnet-two-subnets/azuredeploy.json

    类别 原始值 转换后的值 操作
    前缀 https://raw.githubusercontent.com https://github.com 更新
    中缀 blob 添加 mastermain 之前(Git 版本库的默认分支名称)
    模板文件名 azuredeploy.json 保留默认值,或替换为新模板文件名。 更新

    修改后,转换后的 URI 将显示为 https://github.com/Azure/azure-quickstart-templates/blob/master/quickstarts/microsoft.network/vnet-two-subnets/azuredeploy.json

    请悉知,许多模板已移动到类似 https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/{Microsoft_Resource_Provider_Name}/ 的路径,您可以按照相应的路径规定更新原始 URI。

  2. 复制转换后的 URI,并在 Internet 浏览器中手动下载特定的模板内容。

  3. 在门户的“自定义部署”页的编辑器中选择“ 生成自己的模板 ”。

  4. 在“编辑模板”页中复制下载的模板内容,并更新参数以适应Azure中国云,例如终结点、位置、VM映像、VM大小、SKU和资源提供程序版本等,这些参数在Azure中国云环境中是不支持的。

  5. 选择 “保存 ”以返回“自定义部署”页。

  6. 选择“查看 + 创建”

用于将 Resource Manager 模板部署到 Azure 的按钮。

先决条件

如果没有Azure订阅,请在开始前创建 trial subscription 帐户。

查看模板

本快速入门中使用的模板来自 Azure 快速入门模板。 该模板会设置注册表和其他区域副本。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "12610175857982700190"
    }
  },
  "parameters": {
    "acrName": {
      "type": "string",
      "defaultValue": "[format('acr{0}', uniqueString(resourceGroup().id))]",
      "maxLength": 50,
      "minLength": 5,
      "metadata": {
        "description": "Globally unique name of your Azure Container Registry"
      }
    },
    "acrAdminUserEnabled": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Enable admin user that has push / pull permission to the registry."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for registry home replica."
      }
    },
    "acrSku": {
      "type": "string",
      "defaultValue": "Premium",
      "allowedValues": [
        "Premium"
      ],
      "metadata": {
        "description": "Tier of your Azure Container Registry. Geo-replication requires Premium SKU."
      }
    },
    "acrReplicaLocation": {
      "type": "string",
      "metadata": {
        "description": "Short name for registry replica location."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ContainerRegistry/registries",
      "apiVersion": "2019-12-01-preview",
      "name": "[parameters('acrName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('acrSku')]"
      },
      "tags": {
        "displayName": "Container Registry",
        "container.registry": "[parameters('acrName')]"
      },
      "properties": {
        "adminUserEnabled": "[parameters('acrAdminUserEnabled')]"
      }
    },
    {
      "type": "Microsoft.ContainerRegistry/registries/replications",
      "apiVersion": "2019-12-01-preview",
      "name": "[format('{0}/{1}', parameters('acrName'), parameters('acrReplicaLocation'))]",
      "location": "[parameters('acrReplicaLocation')]",
      "properties": {},
      "dependsOn": [
        "[resourceId('Microsoft.ContainerRegistry/registries', parameters('acrName'))]"
      ]
    }
  ],
  "outputs": {
    "acrLoginServer": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerRegistry/registries', parameters('acrName'))).loginServer]"
    }
  }
}

该模板中定义了以下资源:

可以在 quickstart 模板库中找到更多Azure Container Registry模板示例

部署模板

  1. 选择下图以登录到Azure并打开模板。

    用于将 Resource Manager 模板部署到 Azure 的按钮。

  2. 选择或输入以下值。

    • Subscription:选择Azure订阅。

    • 资源组:选择“新建”,为资源组输入一个独一无二的名称,然后选择“确定”。

    • 区域:选择资源组的位置。 示例: 中国东部 2

    • Acr 名称:接受为注册表生成的名称,或者输入一个名称。 它必须全局唯一。

    • 已启用 Acr 管理员用户:接受默认值。

    • 位置:接受注册表的主副本生成的位置,或输入 中国东部 2 等位置。

    • Acr Sku:接受默认值。

    • Acr 副本位置:使用区域的短名称输入注册表副本的位置。 该位置必须与主注册表的位置不同。 示例: chinaeast2

      模板属性

  3. 选择“查看 + 创建”,然后查看条款和条件。 如果同意,请选择“创建”。

  4. 成功创建注册表后,你会收到通知:

    门户通知

Azure门户用于部署模板。 除了Azure门户,还可以使用Azure PowerShell、Azure CLI和 REST API。 若要了解其他部署方法,请参阅部署模板

查看已部署的资源

使用Azure门户或工具(如Azure CLI)查看容器注册表的属性。

  1. 在门户中,搜索“容器注册表”,然后选择所创建的容器注册表。

  2. 在“概述”页上,记下注册表的“登录服务器” 。 使用 Docker 标记映像并将其推送到注册表时,请使用此 URI。 有关信息,请参阅使用 Docker CLI 推送第一个映像

    注册表概述

  3. 在“复制”页上,确认主副本和通过该模板添加的副本的位置。 如果需要,可在此页上添加更多副本。

    注册表复制

清理资源

如果不再需要资源组、注册表和注册表副本,请将其删除。 为此,请转到Azure门户,选择包含注册表的资源组,然后选择 Delete 资源组

删除资源组

后续步骤