通过


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

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

本教程使用 Docker CLIAzure CLI 创建 Docker 映像并将其部署到Azure Container Apps。 也可以使用 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", "--config", "gunicorn.conf.py", "app:app"]

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

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

Flask==3.1.0
gunicorn

配置 gunicorn

可以使用 gunicorn.conf.py 文件配置 Gunicorn。 当 gunicorn.conf.py 文件位于运行 gunicorn 所在的同一目录中时,无需在 ENTRYPOINTCMD 指令中指定其在 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 buildaz containerapp update 命令来更新容器应用来重新部署。

清理

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

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

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

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

后续步骤

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