在云中生成容器化的 Python Web 应用
本文是有关如何将 Python Web 应用容器化和部署到 Azure 应用服务的教程的一部分。 通过应用服务,可以使用 Docker 中心、Azure 容器注册表和 Visual Studio Team Services 运行容器化 Web 应用,并通过持续集成/持续部署(CI/CD)功能进行部署。 本教程的这一部分介绍如何在云中生成容器化 Python Web 应用。
在本教程的上一 可选 部分中,已在本地生成并运行容器映像。 相反,在本教程的这一部分中,你将在 Azure 容器注册表 上将 Python Web 应用容器化为 Docker 镜像。 在 Azure 中生成映像通常比在本地生成更快、更容易,然后将映像推送到注册表。 此外,在云端构建不需要 Docker 在开发环境中运行。
Docker 映像进入 Azure 容器注册表后,即可将其部署到 Azure 应用服务。
此服务关系图突出显示了本文中介绍的组件。
创建 Azure 容器注册表
如果已有可以使用的 Azure 容器注册表,请转到下一步。 如果没有,请创建一个。
可以在 Azure Cloud Shell 中或装有 Azure CLI 的工作站上运行 Azure CLI 命令。 在 Cloud Shell 中运行时,请跳过 步骤 3。
使用“az group create”命令创建资源组(如果需要)。 如果您已经在本教程的 2 部分为 MongoDB 设置了 Azure Cosmos DB 帐户,并在本地生成和测试了容器,请将 RESOURCE_GROUP_NAME 环境变量设置为您用于该帐户的资源组名称,然后继续执行下一步。
RESOURCE_GROUP_NAME='msdocs-web-app-rg' LOCATION='eastus' az group create -n $RESOURCE_GROUP_NAME -l $LOCATION
LOCATION 应为 Azure 位置值。 选择你附近的位置。 可以使用以下命令列出 Azure 位置值:
az account list-locations -o table
。使用 az acr create 命令创建容器注册表。
REGISTRY_NAME='<your Azure Container Registry name>' az acr create -g $RESOURCE_GROUP_NAME -n $REGISTRY_NAME --sku Basic
REGISTRY_NAME在 Azure 中必须是唯一的,并且包含 5-50 个字母数字字符。
在命令的 JSON 输出中,查找
loginServer
值,该值是完全限定的注册表名称(所有小写),应包括指定的注册表名称。如果在本地运行 Azure CLI,请使用 az acr login 命令登录到注册表。
az acr login -n $REGISTRY_NAME
该命令将“azurecr.io”添加到名称,以创建完全限定的注册表名称。 如果成功,你将看到消息“登录成功”。
注意
Cloud Shell 中不需要或不支持
az acr login
命令。
在 Azure 容器注册表中生成映像
可以通过多种方式直接在 Azure 中生成容器映像。 首先,可以使用 Azure Cloud Shell 来生成映像,而无需使用本地环境。 还可以使用 VS Code 或 Azure CLI 从本地环境生成 Azure 中的容器映像。 在云中生成映像不需要 Docker 在本地环境中运行。 如果需要,可以按照本教程第 2 部分中的克隆或下载示例应用中的说明获取示例 Flask 或 Django Web 应用。
可以在安装了
如果要在本地运行 Azure CLI,并且尚未使用 az acr login 命令登录到注册表,请使用该命令登录到注册表。
az acr login -n $REGISTRY_NAME
如果访问注册表的订阅不同于创建注册表的订阅,请使用
--suffix
开关。注意
不需要
az acr login
命令,并且 Cloud Shell 中不受支持。使用 az acr build 命令生成映像。
az acr build -r $REGISTRY_NAME -g $RESOURCE_GROUP_NAME -t msdocspythoncontainerwebapp:latest .
在此命令中:
命令末尾的点 (“.”) 指示要生成的源代码的位置。 如果未在示例应用根目录中运行此命令,请指定代码的路径。
您可以选择指定示例 GitHub 存储库的路径,而不是环境中的代码路径:https://github.com/Azure-Samples/msdocs-python-django-container-web-app 或 https://github.com/Azure-Samples/msdocs-python-flask-container-web-app。
如果不使用
-t
(与--image
相同)选项,则命令会将本地上下文生成排入队列,而不会将其推送到注册表。 在不推送的情况下生成映像可用于检查映像是否已生成。
使用 az acr repository list 命令确认已创建容器映像。
az acr repository list -n $REGISTRY_NAME