本教程系列介绍如何容器化 Python Web 应用,然后将其在本地运行或部署到 Azure 应用服务。 使用 适用于容器的应用服务 Web 应用 可以专注于生成容器,而无需担心管理和维护基础容器业务流程协调程序。 生成 Web 应用时,Azure 应用服务是使用容器执行第一步的好选择。 此容器 Web 应用可以使用本地 MongoDB 实例或 Azure DocumentDB(与 MongoDB 兼容性) 来存储数据。 有关在 Azure 中使用容器的更多信息,请参阅比较 Azure 容器选项。
在本教程中,你将了解:
在本地生成并运行 Docker 容器。 请参阅 在本地生成并运行容器化的 Python Web 应用。
直接在 Azure 中生成 Docker 容器映像。 请参阅 在 Azure 中生成容器化的 Python Web 应用。
配置应用服务以基于 Docker 容器映像创建 Web 应用。 请参阅 将容器化的 Python 应用部署到应用服务。
学完本教程系列中的文章后,你就具备了将 Python Web 应用持续集成(CI)和持续部署(CD)到 Azure 的基础。
服务概述
本教程支持的服务关系图显示了两个环境:开发人员环境和 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 DocumentDB (与 MongoDB 兼容性)
Azure DocumentDB 是本教程中用于数据存储的 MongoDB 兼容数据库。
容器化应用程序使用连接字符串连接并访问 Azure DocumentDB 资源,您可将该连接字符串存储为环境变量并提供给应用程序。
认证
在本教程中,你将在本地或 Azure 中生成 Docker 映像,然后将其部署到 Azure 应用服务。 应用服务从 Azure 容器注册表存储库拉取容器映像。
若要从存储库中安全拉取映像,应用服务使用系统分配的托管标识。 此托管标识授予 Web 应用与其他Azure资源交互的权限,因此不需要显式凭据。 在本教程中,在设置应用服务期间配置托管标识以使用注册表容器映像。
本教程示例 Web 应用使用 MongoDB 来存储数据。 示例代码通过连接字符串连接到 Azure DocumentDB。
先决条件
若要完成本教程,需要:
一个 Azure 帐户,可在其中创建:
- Azure 容器注册表
- Azure 应用服务
- Azure DocumentDB(兼容 MongoDB) (或等效项的访问权限)。 若要创建 Azure DocumentDB 数据库,请按照 本教程第 2 部分的步骤进行作。
Visual Studio Code 或 Azure CLI,具体取决于所选工具。 如果使用 Visual Studio Code,则需要 Docker 扩展,Azure 应用服务扩展。
以下 Python 包:
在本地安装 Docker。
示例应用
本教程的最终结果是在 Azure 中部署和运行的餐馆评审应用,如下所示。
在本教程中,你将构建一个 Python 餐厅评审应用,该应用利用 MongoDB 进行数据存储。 有关使用 PostgreSQL 的示例应用,请参阅 使用托管标识创建 Flask Web 应用并将其部署到 Azure。