在 Azure 应用服务 中将 Flask 或 FastAPI Web 应用部署为容器

您所在的位置:网站首页 python中testcase 在 Azure 应用服务 中将 Flask 或 FastAPI Web 应用部署为容器

在 Azure 应用服务 中将 Flask 或 FastAPI Web 应用部署为容器

2023-04-27 09:38| 来源: 网络整理| 查看: 265

在 Azure 应用服务 上部署 Flask 或 FastPI Web 应用 项目 04/20/2023

本教程介绍如何使用用于容器的 Web 应用功能将 Python Flask 或 FastAPIWeb 应用部署到Azure 应用服务。 用于容器的 Web 应用为开发人员提供了一个简单的平台,让开发人员能够利用完全托管的 Azure 应用服务 平台,但开发人员还需要一个包含应用及其所有依赖项的可部署项目。 有关在 Azure 中使用容器的详细信息,请参阅 比较 Azure 容器选项。

在本教程中,你将使用 Docker CLI 和 Docker (可选)创建 Docker 映像并在本地对其进行测试。 使用 Azure CLI 在 Azure 中创建 Docker 映像并将其部署到 Azure 应用服务。 还可以通过安装 Azure 工具扩展的 Visual Studio Code 进行部署。 有关生成和创建 Docker 映像以在 Azure 容器应用上运行的示例,请参阅 在 Azure 容器应用上部署 Flask 或 FastPI Web 应用。

注意

本教程介绍如何创建可在 App 服务 上运行的 Docker 映像。 使用 App 服务 不需要这样做。 可以直接从本地工作区将代码部署到App 服务,而无需创建 Docker 映像。 有关示例,请参阅快速入门:将 Python (Django 或 Flask) Web 应用部署到Azure 应用服务。

先决条件

要完成本教程,需要:

一个 Azure 帐户,可在其中将 Web 应用部署到Azure 应用服务和Azure 容器注册表。

Azure CLI 创建 Docker 映像并将其部署到 App 服务。 还可以选择 Docker和 Docker CLI 来创建 Docker,并在本地环境中对其进行测试。

获取示例代码

在本地环境中,获取代码。

Flask FastAPI git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git git clone https://github.com/Azure-Samples/msdocs-python-fastapi-webapp-quickstart.git 添加 Dockerfile 和 .dockerignore 文件

添加 Dockerfile 以指示 Docker 如何生成映像。 Dockerfile 指定使用 Gunicorn,这是将 Web 请求转发到 Flask 和 FastAPI 框架的生产级 Web 服务器。 ENTRYPOINT 和 CMD 命令指示 Gunicorn 处理应用对象的请求。

Flask FastAPI # syntax=docker/dockerfile:1 FROM python:3.11 WORKDIR /code COPY requirements.txt . RUN pip3 install -r requirements.txt COPY . . EXPOSE 50505 ENTRYPOINT ["gunicorn", "app:app"]

50505 在本示例中,用于容器端口 (内部) ,但你可以使用任何可用端口。

检查 requirements.txt 文件,确保它包含 gunicorn。

Flask==2.0.2 gunicorn # syntax=docker/dockerfile:1 FROM python:3.11 WORKDIR /code COPY requirements.txt . RUN pip install --no-cache-dir --upgrade -r requirements.txt COPY . . EXPOSE 3100 CMD ["gunicorn", "main:app"]

3100 在本示例中,用于容器端口 (内部) ,但你可以使用任何可用端口。

检查 requirements.txt 文件,确保它包含 gunicorn 和 uvicorn。

fastapi uvicorn gunicorn jinja2 python-multipart

添加 .dockerignore 文件以从映像中排除不必要的文件。

.git* **/*.pyc .venv/ 配置 gunicorn

可以使用 gunicorn.conf.py 文件配置 Gunicorn。 当 gunicorn.conf.py 文件位于运行 gunicorn 的同一目录中时,无需在 Dockerfile 中指定其位置。 有关指定配置文件的详细信息,请参阅 Gunicorn 设置。

在本教程中,建议的配置文件配置 gunicorn,以根据可用的 CPU 核心数增加其工作器数。 有关 gunicorn.conf.py 文件设置的详细信息,请参阅 Gunicorn 配置。

Flask FastAPI # Gunicorn configuration file import multiprocessing max_requests = 1000 max_requests_jitter = 50 log_file = "-" bind = "0.0.0.0:50505" workers = (multiprocessing.cpu_count() * 2) + 1 threads = workers timeout = 120 # Gunicorn configuration file import multiprocessing max_requests = 1000 max_requests_jitter = 50 log_file = "-" bind = "0.0.0.0:3100" worker_class = "uvicorn.workers.UvicornWorker" workers = (multiprocessing.cpu_count() * 2) + 1

使用 uvicorn.workers.UvicornWorker 辅助角色类,可以使用 gunicorn 运行 FastAPI 应用。 有关详细信息,请参阅 使用 gunicorn 运行 uvicorn。

在本地生成并运行映像

在本地生成映像。

Flask FastAPI docker build --tag flask-demo . docker build --tag fastapi-demo .

在 Docker 容器中以本地方式运行映像。

Flask FastAPI docker run --detach --publish 5000:50505 flask-demo

在 http://localhost:5000 浏览器中打开 URL,查看在本地运行的 Web 应用。

docker run --detach --publish 3100:3100 fastapi-demo

在 http://localhost:3100 浏览器中打开 URL,查看在本地运行的 Web 应用。

选项 --detach 在后台运行容器。 选项 --publish 将容器端口映射到主机上的端口。 主机端口 (外部) 在对中是第一个,容器端口 (内部) 是第二个。 有关详细信息,请查看 Docker 运行参考。

创建资源组并Azure 容器注册表

使用 az group create 命令创建 组。

az group create --name web-app-simple-rg --location eastus

Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。 创建资源组时,请指定一个位置,例如 eastus。

使用 az acr create 命令创建Azure 容器注册表。

az acr create --resource-group web-app-simple-rg \ --name webappacr123 --sku Basic --admin-enabled true ACR_PASSWORD=$(az acr credential show \ --resource-group web-app-simple-rg \ --name webappacr123 \ --query "passwords[?name == 'password'].value" \ --output tsv)

Azure 容器注册表是专用 Docker 注册表,用于存储Azure 容器实例、Azure 应用服务、Azure Kubernetes 服务和其他服务中使用的映像。 创建注册表时,请指定名称、SKU 和资源组。 第二个命令使用 az credential show 命令将密码保存到变量。 密码用于在后面的步骤中向注册表进行身份验证。

Bash shell 显示了用于创建注册表的命令和后续命令。 根据需要更改其他 shell (\) 的延续字符。

还可以通过转到注册表,选择“访问密钥”并ACR_PASSWORD复制密码,从Azure 门户获取密码 () 。

在 Azure 容器注册表 中生成映像

使用 az acr build 命令在 Azure 中生成 Docker 映像。 命令使用当前目录中的 Dockerfile,并将映像推送到注册表。

az acr build \ --resource-group web-app-simple-rg \ --registry webappacr123 \ --image webappsimple:latest .

--registry选项指定注册表名称,选项--image指定映像名称。 映像名称的格式 registry.azurecr.io/repository:tag为 。

部署到 Azure 的 Web 应用

使用 az appservice plan 命令创建App 服务计划。

az appservice plan create \ --name webplan \ --resource-group web-app-simple-rg \ --sku B1 \ --is-linux

使用 az webapp create 命令创建 Web 应用 。

az webapp create \ --resource-group web-app-simple-rg \ --plan webplan --name webappsimple123 \ --docker-registry-server-password $ACR_PASSWORD \ --docker-registry-server-user webappacr123 \ --role acrpull \ --deployment-container-image-name webappacr123.azurecr.io/webappsimple:latest

注意:

Web 应用程序名称在 Azure 中必须唯一。 如果遇到错误,请尝试其他名称。

创建 Web 应用可能需要几分钟时间。 可以使用 az webapp log tail 命令检查部署日志。 例如,az webapp log tail --resource-group web-app-simple-rg --name webappsimple123。 如果看到条目中包含“预热”,则容器正在部署中。

Web 应用的 URL 为 .azurewebsites.net,例如 https://webappsimple123.azurewebsites.net。

进行更新并重新部署

更改代码后,可以使用 az acr build 和 az webapp update 命令重新部署到 App 服务。

清理

本教程中创建的所有 Azure 资源都位于同一资源组中。 删除资源组会删除资源组中的所有资源,这是删除用于应用的所有 Azure 资源的最快方法。

若要删除资源,请使用 az group delete 命令。

az group delete --name web-app-simple-rg

还可以删除Azure 门户或 Visual Studio Code 和 Azure 工具扩展中的组。

后续步骤

有关详细信息,请参阅以下资源:

在 Azure 容器应用上部署 Python Web 应用 快速入门:将 Python(Django 或 Flask)Web 应用部署到 Azure应用服务


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3