Python项目部署指南:Flask、Gradio与Docker实践
1. 引言
在机器学习和Web开发中,将模型或应用部署为在线服务是关键一步。本文将介绍如何使用 Flask 和 Gradio 快速构建前端界面,并通过 Docker 容器化实现高效部署,涵盖完整流程图与代码示例。
2. Flask:轻量级Web服务框架
2.1 Flask简介
- 特点:轻量、灵活,适合快速构建RESTful API和简单前端。
- 适用场景:需自定义界面逻辑或与后端深度集成的项目。
2.2 示例:Flask部署机器学习模型
# app.py
from flask import Flask, request, jsonify
import joblibapp = Flask(__name__)
model = joblib.load("model.pkl") # 加载预训练模型@app.route("/predict", methods=["POST"])
def predict():data = request.json["data"]prediction = model.predict([data])return jsonify({"prediction": prediction.tolist()})if __name__ == "__main__":app.run(host="0.0.0.0", port=5000)
2.3 本地运行步骤
# 安装依赖
pip install flask joblib# 启动服务
python app.py
# 访问 http://localhost:5000/predict
3. Gradio:零代码快速部署工具
3.1 Gradio简介
- 特点:无需编写前端代码,通过接口自动生成UI,支持一键分享。
- 适用场景:快速验证模型、共享演示链接(如Hugging Face Spaces)。
3.2 示例:Gradio部署模型
# gradio_app.py
import gradio as gr
import joblibmodel = joblib.load("model.pkl")def predict(text):return model.predict([text])[0]iface = gr.Interface(fn=predict,inputs=gr.inputs.Textbox(label="输入文本"),outputs=gr.outputs.Label(label="预测结果"),examples=[["示例输入1"], ["示例输入2"]]
)if __name__ == "__main__":iface.launch(server_name="0.0.0.0", server_port=7860)
3.3 本地运行步骤
# 安装依赖
pip install gradio joblib# 启动服务
python gradio_app.py
# 访问 http://localhost:7860
4. Docker基础
4.1 Docker核心概念
- 镜像(Image):打包应用及其依赖的轻量级文件。
- 容器(Container):镜像的运行实例,隔离环境。
- Dockerfile:定义镜像构建步骤的脚本。
4.2 Docker常用命令
# 构建镜像
docker build -t my-app .# 运行容器
docker run -p 5000:5000 my-app# 查看运行中的容器
docker ps
5. Docker+Flask部署全流程
5.1 目录结构
flask-project/
├── app.py
├── model.pkl
├── requirements.txt
└── Dockerfile
5.2 Dockerfile编写
# 基础镜像
FROM python:3.8-slim# 设置工作目录
WORKDIR /app# 复制依赖文件
COPY requirements.txt .# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt# 复制应用代码
COPY . .# 暴露端口
EXPOSE 5000# 启动命令
CMD ["python", "app.py"]
5.3 构建与运行
# 构建镜像
docker build -t flask-app .# 运行容器(映射端口)
docker run -p 5000:5000 flask-app# 访问 http://localhost:5000/predict
6. Docker+Gradio部署全流程
6.1 目录结构
gradio-project/
├── gradio_app.py
├── model.pkl
├── requirements.txt
└── Dockerfile
6.2 Dockerfile编写
FROM python:3.8-slimWORKDIR /appCOPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txtCOPY . .EXPOSE 7860CMD ["python", "gradio_app.py"]
6.3 构建与运行
docker build -t gradio-app .
docker run -p 7860:7860 gradio-app# 访问 http://localhost:7860
7. 流程图
8. 进阶:Docker Compose多容器部署
8.1 docker-compose.yml示例
version: '3'
services:flask-service:build: ./flask-projectports:- "5000:5000"volumes:- ./flask-project:/appgradio-service:build: ./gradio-projectports:- "7860:7860"
8.2 启动服务
docker-compose up -d
9. 总结
- Flask:适合需要定制化界面和复杂逻辑的项目。
- Gradio:适合快速验证和共享模型(如演示链接)。
- Docker:标准化环境,简化部署流程,确保跨平台一致性。
完整代码示例:GitHub仓库链接