在 Azure Container Apps 上部署 Flask 或 FastAPI Web 应用

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

本教程使用 Docker CLI 和 Azure CLI 创建 Docker 映像并将其部署到Azure Container Apps。 也可以使用 Visual Studio Code 和 Azure 工具扩展进行部署。

先决条件

若要完成本教程,需要:

获取示例代码

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

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", "--config", "gunicorn.conf.py", "app:app"]

此示例用于 50505 容器端口(内部),但可以使用任何免费端口。

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

Flask==3.1.0
gunicorn

配置 gunicorn

可以使用 gunicorn.conf.py 文件配置 Gunicorn。 当 gunicorn.conf.py 文件位于运行 gunicorn 所在的同一目录中时,无需在 ENTRYPOINT 或 CMD 指令中指定其在 Dockerfile 中的位置。 有关指定配置文件的详细信息,请参阅 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 以查看在本地运行的 Web 应用。

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

将 Web 应用部署到Azure

若要将 Docker 映像部署到 Azure Container Apps,请使用 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工作区

命令的 az containerapp up 输出包括已部署应用的 URL。 在浏览器中打开 URL,查看在Azure中运行的 Web 应用。 URL 如下所示 https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io,其中 <generated-text> 和 <location-info> 是您部署所特有的元素。

进行更新和重新部署

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

在更复杂的更新方案中,可以通过结合使用 az acr build 和 az containerapp update 命令来更新容器应用来重新部署。

清理

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

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

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

也可以在Azure 门户或Visual Studio Code中使用Azure 工具扩展删除组。

后续步骤

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