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

使用 az containerapp up 命令部署 Azure 容器应用

az containerapp up (或up) 命令是将应用从现有映像、本地源代码或 GitHub 存储库部署到 Azure 容器应用中的最快方法。 使用此单一命令时,可以在几分钟内启动并运行容器应用。

提供本地源代码或 GitHub 存储库时,该命令可以生成容器映像并将其推送到 Azure 容器注册表。 从 GitHub 存储库工作时,该命令会创建一个 GitHub Actions 工作流,该工作流会在将更改提交到 GitHub 存储库时自动生成并推送新的容器映像。

本文介绍如何使用命令从现有映像、本地源代码和 GitHub 存储库部署容器应用。

Prerequisites

要求 说明
一个 Azure 帐户 如果你没有帐户,请免费创建一个。 Azure 订阅需要具有 “参与者 ”或 “所有者 ”角色。 有关详细信息,请参阅 使用 Azure 门户分配 Azure 角色
Azure CLI (命令行界面) 安装 Azure CLI
一个 GitHub 帐户 如果要在 GitHub 存储库中使用映像, 请注册免费的 GitHub 帐户
本地源代码 如果要从本地源代码创建映像,请将代码置于本地目录中。
现有映像 如果要使用现有映像,请记下注册表服务器、映像名称和标记。 如果使用专用注册表,请记下凭据。

使用现有资源

up 命令可以创建资源,也可以使用现有资源,包括:

  • 一个资源组。
  • 容器注册表。
  • 容器应用环境和 Log Analytics 工作区。
  • 你的容器应用。

如果需要自定义容器应用环境,请先使用 az containerapp env create 命令创建和自定义环境。 然后运行 up 命令时,使用 --environment 选项指定自定义环境。

如果未指定现有环境,该 up 命令将在资源组中查找一个环境。 如果命令找到环境,则使用该环境。 如果命令找不到环境,则会创建一个包含 Log Analytics 工作区的环境。

有关 az containerapp up 命令及其选项的详细信息,请参阅 az containerapp up

设置 Azure CLI 环境

  1. 使用 Azure CLI 登录到 Azure。

    az login
    
  2. 安装适用于 Azure CLI 的容器应用扩展。

    az extension add --name containerapp --upgrade
    
  3. Microsoft.App注册命名空间。

    az provider register --namespace Microsoft.App
    
  4. 为 Log Analytics 工作区注册 Microsoft.OperationalInsights 提供程序。

    az provider register --namespace Microsoft.OperationalInsights
    

从现有映像部署

可以在公共或专用容器注册表中部署使用现有映像的容器应用。 如果从专用注册表进行部署,则需要使用 --registry-server--registry-username--registry-password 选项提供凭据。

可以使用以下示例代码从现有映像部署容器应用。 在运行命令之前,请将尖括号中的占位符替换为你的值。

az containerapp up \
  --name <CONTAINER_APP_NAME> \
  --image <REGISTRY_SERVER>/<IMAGE_NAME>:<TAG> \
  --ingress external \
  --target-port <PORT_NUMBER> 

该命令执行以下操作:

  1. 创建资源组。
  2. 创建环境和 Log Analytics 工作区。
  3. 创建并部署从公共注册表拉取映像的容器应用。
  4. 将容器应用 ingress 的值设置为 external 目标端口设置为指定值。

还可以使用 up 命令重新部署容器应用。 如果要使用新映像重新部署,请使用 --image 选项指定新映像。 确保将 --resource-group--environment 选项设置为原始部署中的值。

az containerapp up \
  --name <CONTAINER_APP_NAME> \
  --image <REGISTRY_SERVER>/<IMAGE_NAME>:<TAG> \
  --resource-group <RESOURCE_GROUP_NAME> \
  --environment <ENVIRONMENT_NAME> \
  --ingress external \
  --target-port <PORT_NUMBER> 

从本地源代码部署

使用 up 命令从本地源代码进行部署时,该命令会生成容器映像,将容器映像推送到注册表,并部署容器应用。 如果未指定注册表,该命令会在容器注册表中创建一个注册表。

该命令可以生成包含或不含 Dockerfile 的映像。 在不使用 Dockerfile 的版本中,支持以下语言:

  • .NET
  • Node.js
  • PHP
  • Python

可以使用以下示例代码从本地源代码部署容器应用:

    az containerapp up \
      --name <CONTAINER_APP_NAME> \
      --source <SOURCE_DIRECTORY>\
      --ingress external 

该命令执行以下操作:

  1. 创建资源组。
  2. 创建环境和 Log Analytics 工作区。
  3. 在容器注册表中创建一个新的存储库。
  4. 生成容器镜像(使用 Dockerfile(如果存在)进行构建)。
  5. 将映像推送到注册表。
  6. 创建和部署容器应用。

Dockerfile 包含 EXPOSE 指令时, up 该命令将使用 Dockerfile 中的信息配置容器应用的入口和目标端口。 如果通过 Dockerfile 配置入口,或者应用不需要入口,则可省略 --ingress 选项。

命令的输出包括容器应用程序的 URL。

如果命令报告它正在等待云生成代理,但随后停止响应,则 GitHub 暂时性错误可能是问题的根源。 若要解决此问题,请再次运行该命令。

如果遇到失败,可以再次运行带有 --debug 选项的命令以获取更多信息。 如果在没有 Dockerfile 的情况下生成失败,则可以尝试添加 Dockerfile 并再次运行命令。

若要使用 az containerapp up 命令通过更新的映像重新部署容器应用,请包括 --resource-group--environment 选项。 若要从本地源代码重新部署容器应用,请执行以下步骤:

  1. 对源代码进行更改。

  2. 运行以下命令:

    az containerapp up \
      --name <CONTAINER_APP_NAME> \
      --source <SOURCE_DIRECTORY> \
      --resource-group <RESOURCE_GROUP_NAME> \
      --environment <ENVIRONMENT_NAME>
    

从 GitHub 存储库部署

使用 az containerapp up 命令从 GitHub 存储库进行部署时,该命令会生成一个 GitHub Actions 工作流,用于生成容器映像,将其推送到注册表,并部署容器应用。 如果未指定注册表,该命令会在容器注册表中创建一个注册表。

需要 Dockerfile 才能生成映像。 Dockerfile 包含 EXPOSE 指令时,该命令将使用 Dockerfile 中的信息配置容器应用的入口和目标端口。

可以使用以下示例代码从 GitHub 存储库部署容器应用:

az containerapp up \
  --name <CONTAINER_APP_NAME> \
  --repo <GITHUB_REPOSITORY_URL> \
  --ingress external 

该命令执行以下操作:

  1. 创建资源组。
  2. 创建环境和 Log Analytics 工作区。
  3. 在容器注册表中创建注册表。
  4. 使用 Dockerfile 生成容器映像。
  5. 将映像推送到注册表。
  6. 创建和部署容器应用。
  7. 创建一个 GitHub Actions 工作流,用于生成容器映像,并在将来的更改推送到 GitHub 存储库时部署容器应用。

如果命令由于无法创建服务主体而失败,则可以在 Azure 中手动创建服务主体。 然后,可以将有关它的信息传递给命令:

az containerapp up \
  --name <CONTAINER_APP_NAME> \
  --repo <GITHUB_REPOSITORY_URL> \
  --service-principal-client-id "$SERVICE_PRINCIPAL_CLIENT_ID" \
  --service-principal-client-secret "$SERVICE_PRINCIPAL_CLIENT_SECRET" \
  --service-principal-tenant-id "$AZURE_TENANT_ID"
  --ingress external 

如果通过 Dockerfile 配置入口,或者应用不需要入口,则可省略 --ingress 选项。

up 命令创建 GitHub Actions 工作流。 因此,重新运行命令会产生创建多个工作流的不需要的效果。 如果要将更改部署到应用的映像,请将更改推送到 GitHub 存储库,而不是重新运行命令。 GitHub 工作流会自动检测存储库中的更改,然后生成和部署应用。 若要更改工作流,请在 GitHub 中编辑工作流文件。

配置容器应用设置

az containerapp up 命令提供了一种简化的方法,用于创建和部署主要使用默认设置的容器应用。 但是,使用 up 命令后,如果需要配置更高级的设置,则需要运行其他 Azure CLI 命令,例如以下命令:

若要自定义容器应用的其他设置(例如资源或缩放设置),请先使用 up 命令部署容器应用。 az containerapp update然后使用命令更改这些设置。 该 az containerapp up 命令不是命令 az containerapp update 的缩写。

后续步骤