本教程介绍如何容器化 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 工具扩展进行部署。
先决条件
若要完成本教程,需要:
一个Azure帐户,可在其中将 Web 应用部署到 Azure Container Apps。 (此过程为你创建 Azure Container Registry 和 Log Analytics 工作区。
Azure CLI、Docker,以及在本地环境中安装的 Docker CLI。
获取示例代码
在本地环境中,获取代码。
添加 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 容器中运行映像。
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 命令。
也可以在Azure 门户或Visual Studio Code中使用Azure 工具扩展删除组。
后续步骤
有关详细信息,请参阅以下资源:
- 使用 az containerapp up 命令部署 Azure 容器应用
- 快速入门:使用 Visual Studio Code 部署到 Azure 容器应用
- 使用托管标识拉取Azure容器应用镜像