概述:使用 MongoDB 在 Azure 上容器化 Python Web 应用
本教程介绍如何容器化 Python Web 应用并将其部署到 Azure。 单个容器 Web 应用托管在 Azure App 服务 中,并使用 MongoDB for Azure Cosmos DB 来存储数据。 App 服务用于容器的 Web 应用允许你专注于撰写容器,而无需担心管理和维护基础容器业务流程协调程序。 生成 Web 应用时,Azure App 服务是使用容器执行第一步的好选择。 有关在 Azure 中使用容器的详细信息,请参阅 比较 Azure 容器选项。
在本教程中,你会:
在本地生成并运行 Docker 容器。 此步骤是可选的。
直接在 Azure 中生成 Docker 容器映像。
配置App 服务以基于 Docker 容器映像创建 Web 应用。
在本教程之后,你将获得 Python Web 应用到 Azure 的持续集成(CI)和持续部署(CD)的基础。
服务概述
本教程支持的服务关系图显示了两个环境(开发人员环境和 Azure),以及本教程中使用的不同 Azure 服务。
支持本教程并显示在上图中的组件包括:
-
启用容器化的基础App 服务功能是用于容器的 Web 应用。 Azure App 服务使用用于托管内置映像和自定义映像的 Docker 容器技术。 在本教程中,你将从 Python 代码生成映像并将其部署到用于容器的 Web 应用。
用于容器的 Web 应用使用注册表中的 Webhook 来获取新映像的通知。 将新映像推送到存储库会触发App 服务拉取映像并重启。
-
Azure 容器注册表使你能够使用 Azure 中的 Docker 映像及其组件。 它提供一个靠近 Azure 中的部署的注册表,使你可以控制访问权限,使你能够使用 Microsoft Entra 组和权限。
在本教程中,注册表源Azure 容器注册表,但也可以使用 Docker 中心或专用注册表进行轻微修改。
-
Azure Cosmos DB for MongoDB 是本教程中用于存储数据的 NoSQL 数据库。
对 Azure Cosmos DB 资源的访问是通过连接字符串(作为环境变量传递给容器化应用)进行访问。
身份验证
在本教程中,你将生成 Docker 映像(本地或直接在 Azure 中),并将其部署到Azure App 服务。 App 服务从Azure 容器注册表存储库拉取容器映像。
App 服务使用托管标识从Azure 容器注册表拉取映像。 托管标识允许向 Web 应用授予权限,以便它可以访问其他 Azure 资源,而无需指定凭据。 具体而言,本教程使用系统分配的托管标识。 在设置App 服务期间配置托管标识以使用注册表容器映像。
本教程示例 Web 应用使用 MongoDB 来存储数据。 示例代码通过连接字符串连接到 Azure Cosmos DB。
先决条件
若要完成本教程,你需要:
一个 Azure 帐户,可在其中创建:
- Azure 容器注册表
- Azure 应用服务
- 用于 MongoDB 的 Azure Cosmos DB(或对等项的访问权限)。 若要创建 Azure Cosmos DB for MongoDB 数据库,建议按照本教程第 2 部分中的步骤进行操作。
Visual Studio Code 或 Azure CLI,具体取决于要使用的工具。
- 对于 Visual Studio Code,需要 Docker 扩展和Azure App 服务扩展。
Python 包:
- 用于连接到 MongoDB 的 PyMongo 。
- Flask 或 Django 作为 Web 框架。
示例应用
Python 示例应用是一个餐厅评审应用,用于保存餐厅并在 MongoDB 中查看数据。 有关使用 PostgreSQL 的 Web 应用的示例,请参阅 使用托管标识创建 Flask Web 应用并将其部署到 Azure。
本教程结束时,你将在 Azure 中部署并运行一个餐馆评审应用,其屏幕截图如下所示。