使用 MongoDB 在本地生成并运行容器化 Python Web 应用

本文是有关如何容器化和部署容器化 Python Web 应用以Azure App 服务的教程的一部分。 App 服务使你能够使用 Docker 中心、Azure 容器注册表和 Visual Studio Team Services 运行容器化 Web 应用,并通过持续集成/持续部署(CI/CD)功能进行部署。 本教程的这一部分介绍如何在本地生成和运行容器化 Python Web 应用。 此步骤是可选的,不需要将示例应用部署到 Azure。

在开发环境中本地运行 Docker 映像需要在部署到 Azure 之外进行设置。 将其视为一项投资,可以简化未来的开发周期,尤其是在你超越示例应用并开始创建自己的 Web 应用时。 若要为 DjangoFlask 部署示例应用,可以跳过此步骤并转到本教程中的下一步。 部署到 Azure 后,始终可以返回并完成这些步骤。

以下服务关系图突出显示了本文中介绍的组件。

A screenshot of the Tutorial - Containerized Python App on Azure with local part highlighted.

1.克隆或下载示例应用

克隆存储库:

# Django
git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git

# Flask
git clone https://github.com/Azure-Samples/msdocs-python-flask-container-web-app.git

然后导航到该文件夹:

# Django
cd msdocs-python-django-container-web-app

# Flask
cd msdocs-python-flask-container-web-app

2.生成 Docker 映像

如果你使用的是适用于 DjangoFlask 的框架示例应用之一,则你将转到该应用。 如果使用的是自己的示例应用,请查看示例应用的设置方式,尤其是根目录中的 Dockerfile

这些说明需要 Visual Studio CodeDocker 扩展。 转到克隆或下载的示例文件夹,并使用命令 code .打开 VS Code。

注意

本部分中的步骤要求 Docker 守护程序正在运行。 在某些安装(例如在 Windows 上)中,需要打开 Docker Desktop(在继续之前启动守护程序)。

说明 屏幕快照
打开 Docker 扩展。

如果 Docker 扩展报告错误“无法连接”,请确保 已安装并运行 Docker 。 如果这是你第一次使用 Docker,则可能没有任何容器、映像或连接的注册表。
A screenshot showing how to open the Docker extension in Visual Studio Code.
生成映像。
  • 在显示项目文件的项目资源管理器中,右键单击 Dockerfile 并选择“ 生成映像...”

  • 或者,可以使用命令面板(F1Ctrl+Shift+P)并键入“Docker 映像:生成映像”来调用命令。

有关 Dockerfile 语法的详细信息,请参阅 Dockerfile 参考
A screenshot showing how to build the Docker image in Visual Studio Code.
确认映像已生成。
  • 转到 Docker 扩展的 IMAGES 部分。

  • 查找最近生成的映像。 容器映像的名称是“msdocspythoncontainerwebapp”,这是在 .vscode/tasks.json 文件中设置的

A screenshot showing how to confirm the built image in Visual Studio Code.

此时,你已在本地生成映像。 创建的映像的名称为“msdocspythoncontainerwebapp”,并标记“latest”。 标记是定义版本信息、预期用途、稳定性或其他信息的一种方法。 有关详细信息,请参阅有关对容器映像进行标记和版本控制的建议

也可以通过 Docker Desktop 应用程序直接使用 VS Code 或使用 Docker CLI 生成的映像。

3. 设置 MongoDB

在本教程中,需要一个名为 restaurants_reviews 的 MongoDB 数据库和一个名为restaurants_reviews集合。 本部分中的步骤说明如何使用 MongoDB 或 Azure Cosmos DB for MongoDB 的本地安装来创建和访问数据库和集合。

重要

请勿使用在生产环境中使用的 MongoDB 数据库。 在本教程中,你将在环境变量中存储 MongoDB 连接字符串。 这使得任何能够检查容器(例如,使用 docker inspect)的人都能观察到它。

步骤 1:安装 MongoDB(如果尚未安装)。

可以使用 MongoDB Shell (mongosh)为 MongoDB 安装检查。

  • 以下命令进入 shell,并提供系统上安装的 mongosh 和 mongoDB 服务器的版本:

    mongosh
    
  • 以下命令仅提供系统上安装的 MongoDB 服务器版本:

    mongosh --quiet --exec 'db.version()'
    

如果这些命令不起作用,可能需要显式安装 mongosh 或将 mongosh 连接到 MongoDB 服务器。

某些安装中的替代方法是直接调用 Mongo 守护程序。

mongod --version

步骤 2: 编辑 mongod.cfg 文件以添加计算机的 IP 地址。

mongod 配置文件 具有一个 bindIp 密钥,用于定义 MongoDB 侦听客户端连接的主机名和 IP 地址。 添加本地开发计算机的当前 IP。 在 Docker 容器中本地运行的示例应用将使用此地址与主机通信。

例如,配置文件的一部分应如下所示:

net:
  port: 27017
  bindIp: 127.0.0.1,<local-ip-address>

重启 MongoDB 以选取配置文件的更改。

步骤 3: 在本地 MongoDB 数据库中创建数据库和集合。

将数据库名称设置为“restaurants_reviews”,并将集合名称设置为“restaurants_reviews”。 可以使用 VS Code MongoDB 扩展MongoDB Shell(mongosh)或任何其他 MondoDB 感知工具创建数据库和集合。

对于 MongoDB shell,下面是用于创建数据库和集合的示例命令:

> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit

此时,本地 MongoDB 连接字符串为“mongodb://127.0.0.1:27017/”,数据库名称为“restaurants_reviews”,集合名称为“restaurants_reviews”。

4. 在本地容器中运行映像

有关如何连接到 MongoDB 的信息,可以在本地运行容器。 示例应用要求在环境变量中传递 MongoDB 连接信息。 可通过多种方式将环境变量传递到本地容器。 每一个在安全性方面都有优点和缺点。 应避免在任何敏感信息中检查或在容器中的代码中留下敏感信息。

注意

部署到 Azure 时,Web 应用将从设置为App 服务配置设置的环境值获取连接信息,并且不会对本地开发环境方案进行任何修改。

说明 屏幕快照
示例应用的 .vscode 文件夹中, settings.json 文件定义使用 Docker 扩展时会发生什么情况,并从标记的上下文菜单中选择“ 运行运行交互 ”。 settings.json 文件包含两个模板,每个模板用于(MongoDB local)(MongoDB Azure)方案。

如果使用本地 MongoDB 数据库:
  • 将这两个 <YOUR_IP_ADDRESS> 实例替换为你的 IP 地址。

  • 将这两个<CONNECTION_STRING>实例替换为 MongoDB 数据库的连接字符串。

如果使用 Azure Cosmos DB for MongoDB 数据库:
  • 将这两个<CONNECTION_STRING>实例替换为 Azure Cosmos DB for MongoDB 连接字符串。
docker.dockerPath设置模板使用的配置设置。 若要设置docker.dockerPath,请打开 VS Code 命令面板Ctrl+Shift+P),输入“首选项:打开工作区设置”,然后在“搜索设置”框中输入“docker.dockerPath”。 输入设置值的“docker”(不含引号)。

注意

假定数据库名称和集合名称为 restaurants_reviews.

A screenshot showing the settings.json file Visual Studio Code.
运行映像。
  • Docker 扩展的 IMAGES 部分中,找到生成的映像。

  • 展开图像以查找 最新 标记,右键单击并选择“ 运行交互”。

  • 系统将提示你选择适合你的方案的任务,“交互式运行配置(MongoDB 本地)”或“交互式运行配置(MongoDB Azure)”。

通过交互式运行,你将在代码中看到任何打印语句,这对于调试非常有用。 还可以选择“运行,这是非交互式的,不会使标准输入保持打开状态。

重要

如果默认终端配置文件设置为 (Windows) 命令提示符,此步骤将失败。 若要更改默认配置文件,请打开 VS Code 命令面板Ctrl+Shift+P),输入“终端:选择默认配置文件”,然后从下拉菜单中选择其他配置文件;例如 Git BashPowerShell

A screenshot showing how to run a Docker container in Visual Studio Code.
确认容器正在运行。
  • Docker 扩展的“容器 ”部分中,找到容器。

  • 展开“单个容器”节点并确认“msdocspythoncontainerwebapp”正在运行。 如果容器名称正在运行,应会看到一个绿色的三角形符号。

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
右键单击容器名称并选择“在浏览器中打开”,测试 Web 应用。

浏览器将打开到默认浏览器中,显示为“http://127.0.0.1:8000"对于 Django 或 “http://127.0.0.1:5000/"用于 Flask。
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
停止 容器。
  • Docker 扩展的“容器 ”部分中,找到正在运行的容器。

  • 右键单击容器,然后选择“ 停止”。

A screenshot showing how to stop a running Docker container in Visual Studio Code.

提示

还可以运行容器,选择运行或调试配置。 运行或调试时,将调用 tasks.json 中的 Docker 扩展任务。 调用的任务取决于所选的启动配置。 对于任务“Docker: Python(MongoDB local),请指定 <YOUR-IP-ADDRESS>。 对于任务“Docker: Python(MongoDB Azure),请指定 <CONNECTION-STRING>。

还可以从映像启动容器,并使用 Docker Desktop 应用程序停止该容器。

下一步