在 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

配置 gunicorn

Gunicorn 可以使用 gunicorn.conf.py 文件进行配置。 当 gunicorn.conf.py 文件位于运行 gunicorn 的同一目录中时,无需在 DockerfileENTRYPOINTCMD 指令中指定其位置。 有关指定配置文件的详细信息,请参阅 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

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

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

在本地生成并运行映像

在本地生成映像。

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 应用映像的容器应用
  • 日志分析工作区

已部署应用的 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 CodeAzure 工具扩展中的组。

后续步骤

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