本教程系列介绍如何容器化 Python Web 应用,然后将其在本地运行或部署到 Azure 应用服务。 使用 适用于容器的应用服务 Web 应用 可以专注于生成容器,而无需担心管理和维护基础容器业务流程协调程序。 生成 Web 应用时,Azure 应用服务是使用容器执行第一步的好选择。 此容器 Web 应用可以使用本地 MongoDB 实例或用于 Azure Cosmos DB 的 MongoDB 来存储数据。 有关在 Azure 中使用容器的更多信息,请参阅比较 Azure 容器选项。
在本教程中,你将:
在本地生成并运行 Docker 容器。 请参阅 在本地生成并运行容器化的 Python Web 应用。
直接在 Azure 中生成 Docker 容器映像。 请参阅 在 Azure 中生成容器化的 Python Web 应用。
配置应用服务以基于 Docker 容器映像创建 Web 应用。 请参阅 将容器化的 Python 应用部署到应用服务。
完成本教程系列文章后,你将获得 Python Web 应用到 Azure 的持续集成(CI)和持续部署(CD)的基础。
服务概述
本教程支持的服务关系图显示了两个环境:开发人员环境和 Azure 环境。 它突出显示了开发过程中使用的关键 Azure 服务。
开发人员环境
本教程中支持开发人员环境的组件包括:
本地开发系统:用于编码、生成和测试 Docker 容器的个人电脑。
Docker 容器化:Docker 用于将应用及其依赖项打包到可移植容器中。
开发工具:包括代码编辑器和其他用于软件开发的必要工具。
本地 MongoDB 实例:开发期间用于数据存储的本地 MongoDB 数据库。
MongoDB 连接:访问通过连接字符串提供的本地 MongoDB 数据库。
Azure 环境
本教程中支持 Azure 环境的组件包括:
-
- 在 Azure 应用服务中,用于容器的 Web 应用使用 Docker 容器技术来使用 Docker 提供内置映像和自定义映像的容器托管。
- 用于容器的 Web 应用使用 Azure 容器注册表 (ACR) 中的 Webhook 来获取新映像的通知。 将新映像推送到注册表时,Webhook 通知会触发应用服务拉取更新并重启应用。
-
Azure 容器注册表允许在 Azure 中存储和管理 Docker 映像及其组件。 它提供位于 Azure 中部署附近的注册表,使你能够使用 Microsoft Entra 组和权限来控制访问。
在本教程中,Azure 容器注册表是注册表源,但也可以使用 Docker 中心或专用注册表进行轻微修改。
-
Azure Cosmos DB for MongoDB 是本教程中用于数据存储的 NoSQL 数据库。
容器化应用程序使用连接字符串连接到 Azure Cosmos DB 资源并将其访问,该连接字符串存储为环境变量,并提供给应用。
认证
在本教程中,你将在本地或 Azure 中生成 Docker 映像,然后将其部署到 Azure 应用服务。 应用服务从 Azure 容器注册表存储库拉取容器映像。
为了从存储库中安全拉取映像,应用服务使用系统分配的托管标识。 此托管标识授予 Web 应用与其他 Azure 资源交互的权限,无需显式凭据。 在本教程中,托管标识会在安装应用程序服务期间进行配置以使用注册表容器映像。
本教程示例 Web 应用使用 MongoDB 来存储数据。 示例代码通过连接字符串连接到 Azure Cosmos DB。
先决条件
若要完成本教程,需要:
一个 Azure 帐户,可在其中创建:
- Azure 容器注册表
- Azure 应用服务
- Azure Cosmos DB for MongoDB(或访问等效服务)。 若要创建 Azure Cosmos DB for MongoDB 数据库,请按照 本教程第 2 部分中的步骤作。
Visual Studio Code 或 Azure CLI,具体取决于所选工具。 如果使用 Visual Studio Code,则需要 Docker 扩展,Azure 应用服务扩展。
以下 Python 包:
在本地安装 Docker。
示例应用
本教程的最终结果是在 Azure 中部署和运行的餐馆评审应用,如下所示。
在本教程中,你将构建一个 Python 餐厅评审应用,该应用利用 MongoDB 进行数据存储。 有关使用 PostgreSQL 的示例应用,请参阅 使用托管标识创建 Flask Web 应用并将其部署到 Azure。