教程:了解在 Azure 容器应用中部署 Python Web 应用的概述概念
本教程系列介绍如何容器化 Python Web 应用并将其部署到 Azure 容器应用。 示例 Web 应用已容器化,Docker 映像存储在 azure 容器注册表 。 Azure 容器应用配置为从容器注册表拉取 Docker 映像并创建容器。 示例应用连接到 Azure Database for PostgreSQL,以演示容器应用和其他 Azure 资源之间的通信。
有多种选项可用于在 Azure 上生成和部署云原生和容器化的 Python Web 应用。 本教程系列介绍 Azure 容器应用。 容器应用程序适合于运行通用容器,尤其适用于那些通过容器部署多微服务的应用程序。
在本教程系列中,将创建一个容器。 若要将 Python Web 应用部署为容器到 Azure 应用服务,请参阅使用 MongoDB在 Azure 上
本教程系列中的过程将指导你完成以下任务:
- 从 Python Web 应用生成 Docker 映像,并将映像存储在 Azure 容器注册表中。
- 配置 Azure 容器应用 来托管 Docker 映像。
- 设置 GitHub Actions,以使用对 GitHub 存储库所做的更改触发的新 Docker 映像更新容器。 此步骤是可选的。
- 将 Python Web 应用的持续集成和持续交付(CI/CD)设置为 Azure。
在本系列的第一部分,你将了解在 Azure 容器应用中部署 Python Web 应用的基础概念。
服务概述
下图显示了如何在本教程系列中使用本地环境、GitHub 存储库和 Azure 服务。
此图包含以下组件:
-
使用 Azure 容器应用可以在无服务器平台上运行微服务和容器化应用程序。 无服务器平台意味着你可以享受运行容器的好处,只需最少的配置。 借助 Azure 容器应用,应用程序可以根据 HTTP 流量、事件驱动处理或 CPU 或内存负载等特征动态缩放。
容器应用从 Azure 容器注册表拉取 Docker 映像。 对容器映像的更改会触发对已部署容器的更新。 还可以将 GitHub Actions 配置为触发更新。
-
使用 Azure 容器注册表,可以在 Azure 中使用 Docker 映像。 由于容器注册表靠近 Azure 中的部署,因此你可以控制访问权限。 可以使用 Microsoft Entra 组和权限来控制对 Docker 镜像的访问。
在本教程系列中,注册表源是 Azure 容器注册表。 但是,还可以使用 Docker 中心或专用注册表进行轻微修改。
Azure Database for PostgreSQL:
示例代码将应用程序数据存储在 PostgreSQL 数据库中。 容器应用使用 用户分配的托管标识连接到 PostgreSQL。 连接信息存储在显式配置的环境变量中,或通过 Azure 服务连接器存储。
-
本教程系列的示例代码在一个需要在本地将其分叉并克隆的 GitHub 仓库中。 若要使用 GitHub Actions设置 CI/CD 工作流,需要一个 GitHub 帐户。
您可以在本地工作或在 Azure Cloud Shell 中从示例代码库构建容器映像,无需 GitHub 帐户,仍然可以跟随本教程系列。
修订和 CI/CD
若要进行代码更改并将其推送到容器,请使用更改创建新的 Docker 映像。 然后,将映像推送到容器注册表,并在容器应用中创建一个新的 修订版。
若要自动执行此过程,本教程系列中的可选步骤演示如何使用 GitHub Actions 生成 CI/CD 管道。 每当将新提交推送到 GitHub 存储库时,管道都会自动生成代码并将其部署到容器应用。
身份验证和安全性
在本教程系列中,你将直接在 Azure 中生成 Docker 容器映像并将其部署到 Azure 容器应用。 容器应用运行在 环境中,该环境由 Azure 虚拟网络提供支持。 虚拟网络是 Azure 中专用网络的基本构建基块。 容器应用允许通过启用入口向公共 Web 公开容器应用。
若要设置 CI/CD,可将 Azure 容器应用授权为 GitHub 帐户的 OAuth 应用。 作为 OAuth 应用,容器应用将 GitHub Actions 工作流文件写入存储库,其中包含有关 Azure 资源和作业的信息来更新它们。 工作流将 Microsoft Entra 服务主体(或现有主体)的凭据与容器应用程序的基于角色的访问权限以及 Azure 容器注册表的用户名和密码结合使用,来更新 Azure 资源。 凭据安全地存储在 GitHub 存储库中。
最后,本教程系列中的示例 Web 应用将数据存储在 PostgreSQL 数据库中。 示例代码通过连接字符串连接到 PostgreSQL。 应用在 Azure 中运行时,它使用用户分配的托管标识连接到 PostgreSQL 数据库。 代码使用 DefaultAzureCredential
在运行时使用 Microsoft Entra 访问令牌动态更新连接字符串中的密码。 此机制可防止需要对连接字符串或环境变量中的密码进行硬编码,并提供额外的安全层。
本教程系列将指导你创建托管标识,并向其授予适当的 PostgreSQL 角色和权限,以便它可以访问和更新数据库。 在容器应用配置期间,本教程系列将指导你配置应用上的托管标识,并设置包含数据库的连接信息的环境变量。 还可以使用 Azure 服务连接器来完成相同的操作。
先决条件
若要完成本教程系列,需要:
一个 Azure 帐户,可在其中创建:
- Azure 容器注册表实例。
- Azure 容器应用环境。
- Azure Database for PostgreSQL 实例。
Visual Studio Code 或 Azure CLI,具体取决于使用的工具:
- 对于 Visual Studio Code,您需要容器应用扩展。
- 可以通过 Azure Cloud Shell使用 Azure CLI。
Python 包:
- 用于连接到 PostgreSQL 的 pyscopg2-binary。
- Flask 或 Django 作为 Web 框架。
示例应用
Python 示例应用是一个餐馆评审应用,用于在 PostgreSQL 中保存餐厅和查看数据。 在教程系列结束时,你将在 Azure 容器应用中部署并运行一个餐馆评审应用,其屏幕截图如下所示。
下一步
使用 Azure 容器应用和 PostgreSQL 生成和部署 Python Web 应用