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

本快速入门介绍如何使用 Azure 资源管理器模板(ARM 模板)创建 Azure 容器注册表实例。 该模板会设置一个异地复制注册表,使其自动在多个 Azure 区域之间同步注册表内容。 借助异地复制,可以从区域部署对映像进行近网络访问,同时提供单一管理体验。 这是高级注册表服务层级的一项功能。

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

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

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

注意

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

githubusercontent 前缀模板部署问题

我们可以按照以下指导在 Azure 中国世纪互联部署模板:

  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 保留默认值,或替换为新模板文件名。 update

    修改后,转换后的 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 中国云的要求更新参数,例如 Azure 中国云环境不支持的终结点、位置、VM 映像、VM 大小、SKU 和资源提供程序的 API 版本。

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

  6. 选择“查看 + 创建”。

用于将资源管理器模板部署到 Azure 的按钮。

先决条件

如果没有 Azure 订阅,请在开始前创建一个试用版订阅帐户。

查看模板

本快速入门中使用的模板来自 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]"
    }
  }
}

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

可以在快速入门模板库中找到更多 Azure 容器注册表模板示例。

部署模板

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

    用于将资源管理器模板部署到 Azure 的按钮。

  2. 选择或输入以下值。

    • 订阅:选择一个 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 门户,选择包含注册表的资源组,然后选择“删除资源组”。

删除资源组

后续步骤

在本快速入门中,你已使用 ARM 模板创建了 Azure 容器注册表,并在其他位置配置了注册表副本。 请继续阅读 Azure 容器注册表教程,以更深入地了解 ACR。

有关引导你完成模板创建过程的分步教程,请参阅: