你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:生成应用并将其部署到 Azure 容器应用

本文演示如何使用首选编程语言从源存储库生成微服务并将其部署到 Azure 容器应用。

这是系列文章中的第一篇教程,指导你了解如何在 Azure 容器应用中使用核心功能。 第一步是创建一个返回音乐专辑静态集合的后端 Web API 服务。

注意

还可以按照快速入门:从存储库生成应用并将其部署到 Azure 容器应用一文中的说明,使用 az containerapp up 生成和部署此应用。 az containerapp up 命令是使用单个命令生成应用并将其部署到 Azure 容器应用的快速便捷的方法。 但是,它不会为容器应用提供相同级别的自定义。

本系列的下一篇教程将生成前端 Web 应用程序并将其部署到 Azure 容器应用。

以下屏幕截图显示了本教程中部署的专辑 API 的输出。

屏幕截图显示来自相册 API 终结点的响应。

先决条件

若要完成此项目,需要满足以下条件:

要求 说明
Azure 帐户 如果你没有帐户,请免费创建一个。 需要对 Azure 订阅具有用户访问管理员或所有者权限才能继续操作。 请确保对上下文使用最具限制性的角色。

有关详细信息,请参阅使用 Azure 门户分配 Azure 角色Azure 角色、Microsoft Entra 角色和经典订阅管理员角色
GitHub 帐户 免费注册。
git 安装 git
Azure CLI 安装 Azure CLI
要求 说明
Azure 帐户 如果你没有帐户,请免费创建一个。 需要拥有 Azure 订阅的“参与者”或“所有者”权限才能继续操作。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色
GitHub 帐户 免费注册。
git 安装 git
Azure CLI 安装 Azure CLI
Docker Desktop Docker 提供了用于在 macOSWindowsLinux 上配置 Docker 环境的安装程序。

在命令提示符下,键入 docker 以确保 Docker 正在运行。

设置

若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。

az login

为了确保运行最新版本的 CLI,请运行升级命令。

az upgrade

接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。

如果在 Azure CLI 中运行 az containerapp 命令,或在 Azure PowerShell 中运行 Az.App 模块中的 cmdlet 时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。

az extension add --name containerapp --upgrade

注意

从 2024 年 5 月开始,Azure CLI 扩展不再默认启用预览功能。 要访问容器应用预览功能,请使用 --allow-preview true 安装容器应用扩展。

az extension add --name containerapp --upgrade --allow-preview true

现在已安装当前扩展或模块,接下来请注册 Microsoft.AppMicrosoft.OperationalInsights 命名空间。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

创建环境变量

完成 Azure CLI 安装后,接下来可以定义要在本文中使用的环境变量。

在 bash shell 中定义以下变量。

RESOURCE_GROUP="album-containerapps"
LOCATION="canadacentral"
ENVIRONMENT="env-album-containerapps"
API_NAME="album-api"
FRONTEND_NAME="album-ui"
GITHUB_USERNAME="<YOUR_GITHUB_USERNAME>"

在运行此命令之前,请确保将 <YOUR_GITHUB_USERNAME> 替换为你的 GitHub 用户名。

接下来,定义一个对你而言唯一的容器注册表名称。

ACR_NAME="acaalbums"$GITHUB_USERNAME

准备 GitHub 存储库

导航到首选语言的存储库并创建该存储库的分支。

选择专辑 API 存储库顶部的“创建分支”按钮,以在你的帐户中创建该存储库的分支。

现在可以克隆示例存储库的分支。

使用以下 git 命令将分支存储库克隆到 code-to-cloud 文件夹:

git clone https://github.com/$GITHUB_USERNAME/containerapps-albumapi-csharp.git code-to-cloud

接下来,将目录切换到克隆的存储库所在的根目录。

cd code-to-cloud/src

创建 Azure 资源组

创建一个资源组来组织与你的容器应用部署相关的服务。

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

创建 Azure 容器注册表

  1. 生成相册 API 容器映像后,在资源组中创建一个 Azure 容器注册表 (ACR) 实例来存储该映像。

    az acr create \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION \
        --name $ACR_NAME \
        --sku Basic
    
  2. 容器注册表必须允许使用 Azure 资源管理器 (ARM) 受众令牌进行身份验证,才能使用托管标识来拉取映像。

    请使用以下命令来检查是否允许使用 ARM 令牌访问 Azure 容器注册表 (ACR)。

    az acr config authentication-as-arm show --registry "$ACR_NAME"
    

    如果允许 ARM 令牌,命令将输出以下内容。

    {
      "status": "enabled"
    }
    

    如果 statusdisabled,请使用以下命令允许 ARM 令牌。

    az acr config authentication-as-arm update --registry "$ACR_NAME" --status enabled
    

创建用户分配的托管标识

为了避免使用管理凭据,请使用托管标识进行身份验证,从 Microsoft Azure 容器注册表中的专用存储库拉取映像。 如果可能,请使用用户分配的托管标识来拉取映像。

  1. 创建用户分配的托管标识。 在运行以下命令之前,请选择托管标识的名称,并将 \<PLACEHOLDER\> 替换为该名称。

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. 获取标识的资源 ID。

    IDENTITY_ID=$(az identity show \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    

生成应用程序

使用 ACR 任务可为专辑 API 生成和推送 Docker 映像,而无需在本地安装 Docker。

使用 ACR 生成容器

运行以下命令,以使用 ACR 启动映像生成和推送过程。 该命令末尾的 . 表示 Docker 生成上下文,即,此命令应在 Dockerfile 所在的 src 文件夹中运行。

az acr build --registry $ACR_NAME --image $API_NAME .

az acr build 命令的输出会显示将源代码上传到 Azure 的进度,以及 docker builddocker push 操作的详细信息。

生成应用程序

以下步骤演示如何使用 Docker 在本地生成容器映像,并将该映像推送到新的容器注册表。

使用 Docker 生成容器

以下命令为专辑 API 生成容器映像,并使用 ACR 登录服务器的完全限定名称来标记该映像。 该命令末尾的 . 表示 Docker 生成上下文,即,此命令应在 Dockerfile 所在的 src 文件夹中运行。

docker build --tag $ACR_NAME.azurecr.io/$API_NAME .

将映像推送到容器注册表

首先登录到你的 Azure 容器注册表。

az acr login --name $ACR_NAME

现在,将映像推送到注册表。

docker push $ACR_NAME.azurecr.io/$API_NAME

创建容器应用环境

Azure 容器应用环境充当一组容器应用周围的安全边界。

使用以下命令创建容器应用环境。

az containerapp env create \
  --name $ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

将映像部署到容器应用

创建环境后,接下来可以使用 az containerapp create 命令创建并部署容器应用。

使用以下命令创建并部署容器应用。

az containerapp create \
  --name $API_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT \
  --image $ACR_NAME.azurecr.io/$API_NAME \
  --target-port 8080 \
  --ingress external \
  --registry-server $ACR_NAME.azurecr.io \
  --user-assigned "$IDENTITY_ID" \
  --registry-identity "$IDENTITY_ID" \
  --query properties.configuration.ingress.fqdn
  • 通过将 --ingress 设置为 external,可以从公共 Internet 访问你的容器应用。

  • target-port 设置为 8080,以匹配容器正在为请求侦听的端口。

  • 如果未指定 query 属性,对 az containerapp create 的调用会返回一条 JSON 响应,其中包含丰富的有关应用程序的详细信息。 添加查询参数可将输出筛选成应用的完全限定的域名 (FQDN)。

  • 此命令会将 acrPull 角色添加到用户分配的托管标识,使其能够从容器注册表中提取映像。

验证部署

将 FQDN 复制到 Web 浏览器。 在 Web 浏览器中,导航到 FQDN 的 /albums 终结点。

屏幕截图显示来自相册 API 终结点的响应。

清理资源

如果你不打算继续学习微服务之间的通信教程,可以删除在本快速入门中创建的 Azure 资源。 运行以下命令以删除资源组,以及在本快速入门中创建的所有资源。

az group delete --name $RESOURCE_GROUP

提示

遇到问题? 在 Azure 容器应用存储库中提交问题,告知我们有关 GitHub 的信息。

后续步骤

本快速入门是循序渐进的系列教程的第一篇,其中展示了 Azure 容器应用中的各项功能。 请继续了解如何从一个调用本文中部署的 API 的 Web 前端启用通信。