在 Azure 容器应用上部署 Flask 或 FastAPI Web 应用
本教程介绍如何容器化 Python Flask 或 FastAPI Web 应用并将其部署到 Azure 容器应用。 Azure 容器应用使用 Docker 容器技术来托管内置映像和自定义映像。 有关在 Azure 中使用容器的详细信息,请参阅 比较 Azure 容器选项。
本教程使用 Docker CLI 和 Azure CLI 创建 Docker 映像并将其部署到 Azure 容器应用。 还可以使用 Visual Studio Code 和 Azure 工具扩展进行部署。
先决条件
要完成本教程,您需要:
可将 Web 应用部署到 Azure 容器应用的 Azure 帐户。 (An 在此过程中会为你创建Azure 容器注册表和 Log Analytics 工作区。
获取示例代码
在本地环境中,获取代码。
添加 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 容器中以本地方式运行映像。
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 build 和 az containerapp update 命令一起重新部署以更新容器应用。
清理
本教程中创建的所有 Azure 资源都位于同一资源组中。 删除资源组会删除资源组中的所有资源,这是删除用于应用的所有 Azure 资源的最快捷方法。
若要删除资源,请使用 az group delete 命令。
还可以删除Azure 门户或 Visual Studio Code 和 Azure 工具扩展中的组。
后续步骤
有关详细信息,请参阅以下资源: