概述:在 Azure 容器应用上部署 Python Web 应用
本教程介绍如何容器化 Python Web 应用并将其部署到 Azure 容器应用。 将容器化一个示例 Web 应用,并将 Docker 映像存储在Azure 容器注册表中。 Azure 容器应用配置为从容器注册表拉取 Docker 映像并创建容器。 示例应用连接到 Azure Database for PostgreSQL ,以演示容器应用与其他 Azure 资源之间的通信。
有多种选项可用于在 Azure 上生成和部署云本机和容器化的 Python Web 应用。 本教程介绍 Azure 容器应用。 容器应用适用于运行常规用途容器,尤其是适用于跨容器中部署的许多微服务的应用程序。 在本教程中,你将创建一个容器。 若要将 Python Web 应用部署为容器以Azure App 服务,请参阅App 服务上的容器化 Python Web 应用。
在本教程中,你将:
- 从 Python Web 应用生成 Docker 映像,并将映像存储在Azure 容器注册表中。
- 配置 Azure 容器应用 以托管 Docker 映像。
- 设置 GitHub 操作,该操作 使用对 GitHub 存储库的更改触发的新 Docker 映像更新容器。 最后一步是可选的。
在本教程之后,你将为 Python Web 应用的持续集成(CI)和持续部署(CD)设置到 Azure。
服务概述
本教程支持的服务关系图演示了本教程中如何使用本地环境、GitHub 存储库和 Azure 服务。
支持本教程并显示在上图中的组件包括:
-
- Azure 容器应用使你能够在无服务器平台上运行微服务和容器化应用程序。 无服务器平台意味着你可以享受运行容器的好处,只需最少的配置。 借助 Azure 容器应用,应用程序可以根据 HTTP 流量、事件驱动处理或 CPU 或内存负载等特征动态缩放。
- 容器应用从Azure 容器注册表拉取 Docker 映像。 对容器映像的更改会触发对已部署容器的更新。 还可以将 GitHub Actions 配置为触发更新。
-
- Azure 容器注册表使你能够使用 Azure 中的 Docker 映像。 由于容器注册表靠近 Azure 中的部署,因此你可以控制访问权限,因此可以使用 Microsoft Entra 组和权限来控制对 Docker 映像的访问。
- 在本教程中,注册表源Azure 容器注册表,但也可以使用 Docker 中心或专用注册表进行轻微修改。
-
- 示例代码将应用程序数据存储在 PostgreSQL 数据库中。
- 容器应用通过显式配置的环境变量或 Azure 服务连接or 连接到 PostgreSQL。
-
- 本教程的示例代码位于 GitHub 存储库中,你将在本地创建分支和克隆。 若要使用 GitHub Actions 设置 CI/CD 工作流,需要一个 GitHub 帐户。
- 仍可以遵循本教程,而无需 GitHub 帐户,在本地或 Azure Cloud Shell 中工作,以便从示例代码存储库生成容器映像。
修订和 CI/CD
若要进行代码更改并将其推送到容器,请使用更改创建新的 Docker 映像。 然后,将映像推送到容器注册表,并创建新的 容器应用的修订版 。
若要自动执行此过程,本教程中的可选步骤介绍如何使用 GitHub Actions 构建持续集成和持续交付(CI/CD)管道。 每当将新提交推送到 GitHub 存储库时,管道都会自动生成代码并将其部署到容器应用。
身份验证和安全性
在本教程中,你将直接在 Azure 中生成 Docker 容器映像并将其部署到 Azure 容器应用。 容器应用在 Azure 虚拟网络s(VNet)支持的环境的上下文中运行。 VNet 是 Azure 中专用网络的基本构建基块。 容器应用允许通过启用入口向公共 Web 公开容器应用。
若要设置持续集成和持续交付(CI/CD),你将授权 Azure 容器应用作为 GitHub 帐户的 OAuth 应用 。 作为 OAuth 应用,容器应用将 GitHub Actions 工作流文件写入存储库,其中包含有关 Azure 资源和作业的信息来更新它们。 工作流使用 Microsoft Entra 服务主体(或现有项)的凭据更新 Azure 资源,并具有对容器应用的基于角色的访问,以及用于Azure 容器注册表的用户名和密码。 凭据安全地存储在 GitHub 存储库中。
最后,本教程示例 Web 应用将数据存储在 PostgreSQL 数据库中。 示例代码通过连接字符串连接到 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 容器应用中部署并运行一个餐馆评审应用,其屏幕截图如下所示。