Azure开发人员 CLI (azd) 可以将应用部署到Azure 应用服务。 此部署模式将应用作为适用于容器的 Linux Web 应用运行。 在服务使用host: appservice并采用基于 Docker 的构建时,azd deploy会构建映像,将其推送到 Azure 容器注册表 (ACR),并使现有的 App Service 站点指向该新映像。
由于 azd deploy 仅更新映像引用,因此在部署之前,基础结构必须准备好站点容器。 了解此部署模式有助于正确设置站点并避免部署失败。
本文介绍该部署模式的工作原理、基础结构必须已配置的内容,以及它与 containerapp 主机有何不同。 它假定你熟悉 azd 项目, azure.yaml以及 azd 预配和部署命令。
azd 如何将容器部署到应用服务
使用容器配置设置 host: appservice 服务时, azd deploy 将目标站点视为 用于容器的 Web 应用 ,并执行以下操作:
- 从 Dockerfile 生成容器映像。
- 将映像推送到基础结构定义的 ACR 实例。
- 将网站的
linuxFxVersion设置更新为DOCKER|<image>,以便网站运行你的映像。
azd deploy
仅更新现有站点的映像引用。 它不会创建或配置底层基础结构,因此在部署之前,站点必须已准备好容器。
azure.yaml 中的服务配置
部署到 App Service 的容器使用 host: appservice,并采用基于 Docker 的构建。 设置 language: docker,或添加指向您的 Dockerfile 的 docker 配置项:
services:
web:
project: ./src/web
host: appservice
language: docker
docker:
path: ./Dockerfile
使用此配置, azd 从 ./src/web/Dockerfile中生成映像,将其推送到注册表,并更新应用服务站点以运行映像。 主机 appservice 不会应用服务级别 env: 设置,因此请改为通过基础结构配置应用设置。
容器就绪应用服务站点的基础结构要求
azd deploy不会为appservice主机预配或修改基础结构,因此,在部署之前,现有Bicep或 Terraform 必须将站点配置为 Linux 容器应用。 基础结构必须满足以下协定:
| 要求 | 详细信息 |
|---|---|
| Linux 应用服务计划 | 该方案运行 Linux(kind: linux,配合 reserved: true)。 应用服务仅支持 Linux 上的容器,而不支持Windows。 |
| 容器就绪站点 | 网站的 linuxFxVersion 使用 DOCKER\| 值。 可以使用占位符映像,因为 azd deploy会使用它生成并推送的映像替换该映像。 |
| 单个容器 | 该站点运行一个容器。 主机 appservice 不支持多容器或 Docker Compose 配置。 |
| 使用托管标识访问 ACR | 站点通过用户分配的托管身份向 ACR 进行身份验证,例如使用 acrUseManagedIdentityCreds: true 和 acrUserManagedIdentityID。 主机 appservice 不支持管理员凭据。 |
azd deploy 与 provision 和 up 的比较
容器部署到应用服务涉及两个问题:基础结构和应用程序代码,这些代码映射到不同的 azd 命令:
| 命令 | 它的作用是什么 | 何时使用它 |
|---|---|---|
azd provision |
根据 Bicep 或 Terraform 创建和配置 Azure 资源,包括支持容器的应用服务站点和 ACR。 | 当基础设施发生变化或站点尚不存在时,使用它。 |
azd deploy |
生成映像,将其推送到 ACR,并更新站点的映像引用。 它不会触摸基础结构。 | 使用它将应用程序更改寄送到已预配的站点。 |
azd up |
通过一条命令依次运行 azd provision 和 azd deploy。 |
首次部署时,或需要一并进行预配和部署时,请使用此项。 |
由于 azd deploy 仅更新映像引用, appservice 因此容器部署始终依赖于之前 azd provision 或 azd up 创建的基础结构。
部署就绪情况验证
在更新站点之前,azd deploy会验证目标站点是否已做好容器准备。 例如,如果站点不是 Linux 容器应用,使用的是 Windows 计划,缺少 DOCKER|linuxFxVersion 值,或者没有用于访问 ACR 的托管标识权限,那么 azd deploy 将停止并返回一条错误,指出缺少的配置。 在再次部署之前,请先更正基础架构并重新预配资源。
App Service 容器与容器应用的比较
appservice和containerapp主机都部署容器映像,但它们以不同的方式管理基础结构和配置:
| Behavior |
appservice 主机 |
containerapp 主机 |
|---|---|---|
| 基础结构配置 |
azd deploy 仅更新镜像引用,并要求站点已具备容器运行条件。 |
为你预配并配置更多容器运行时环境。 |
| 环境变量 | 不应用服务级别 env: 设置。 请改为通过基础结构配置应用设置。 |
将服务级别 env: 设置应用于容器。 |
| 多语言支持 | 通过 language: docker 将任何语言编写的应用容器化,这对于没有内置 azd 支持的运行时非常有用。 |
通过 language: docker 将任何语言编写的应用程序容器化,这对于没有内置 azd 支持的运行时非常有用。 |