在 Azure 容器应用上部署 Flask 或 FastAPI Web 应用

本教程介绍如何容器化 Python FlaskFastAPI Web 应用并将其部署到 Azure 容器应用。 Azure 容器应用使用 Docker 容器技术来托管内置映像和自定义映像。 有关在 Azure 中使用容器的详细信息,请参阅 比较 Azure 容器选项

本教程使用 Docker CLIAzure CLI 创建 Docker 映像并将其部署到 Azure 容器应用。 还可以使用 Visual Studio CodeAzure 工具扩展进行部署。

先决条件

要完成本教程,您需要:

获取示例代码

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

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git

添加 Dockerfile 和 .dockerignore 文件

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

# 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.2.2
gunicorn
Werkzeug==2.2.2

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

.git*
**/*.pyc
.venv/

配置 gunicorn

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

在本教程中,建议的配置文件将 GUnicorn 配置为根据可用的 CPU 核心数增加其辅助角色数。 有关 gunicorn.conf.py 文件设置的详细信息,请参阅 Gunicorn 配置

# 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

在本地生成并运行映像

在本地生成映像。

docker build --tag flask-demo .

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

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

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

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

将 Web 应用部署到 Azure

若要将 Docker 映像部署到 Azure 容器应用,请使用 az containerapp up 命令。 (Bash shell 显示以下命令。 根据其他 shell 更改延续字符(\)。

az containerapp up \
  --resource-group web-flask-aca-rg --name web-aca-app \
  --ingress external --target-port 50505 --source .

部署完成后,其中包含以下资源的资源组:

  • Azure 容器注册表
  • 容器应用环境
  • 运行 Web 应用映像的容器应用
  • Log Analytics 工作区

已部署应用的 URL 位于命令的输出中 az containerapp up 。 在浏览器中打开 URL,查看在 Azure 中运行的 Web 应用。 URL 的形式如下所示 https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io,其中 <generated-text> 部署 <location-info> 是唯一的。

进行更新和重新部署

进行代码更新后,可以再次运行上 az containerapp up 一个命令,这会重新生成映像并将其重新部署到 Azure 容器应用。 再次运行该命令会考虑到资源组和应用已存在,并仅更新容器应用。

在更复杂的更新方案中,可以使用 az acr buildaz containerapp update 命令一起重新部署以更新容器应用。

清理

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

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

az group delete --name web-flask-aca-rg

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

后续步骤

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