容器化部署实战:Python Flask应用在Docker+Nginx环境中的全流程
【代码】容器化部署实战:Python Flask应用在Docker+Nginx环境中的全流程。
·
Python Flask应用在Docker+Nginx环境中的容器化部署全流程
1. 项目结构准备
flask-app/
├── app.py # Flask主程序
├── requirements.txt # 依赖列表
├── Dockerfile # Docker构建文件
├── nginx/
│ └── nginx.conf # Nginx配置文件
└── static/ # 静态资源目录
2. Flask应用示例 (app.py)
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def home():
return jsonify(status="running", message="Flask in Docker + Nginx")
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
3. 依赖文件 (requirements.txt)
Flask==2.2.3
gunicorn==20.1.0
4. Docker镜像构建
Dockerfile 内容:
# 基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令(使用Gunicorn)
CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app"]
构建镜像命令:
docker build -t flask-app:1.0 .
5. Nginx反向代理配置
nginx/nginx.conf 内容:
server {
listen 80;
server_name localhost;
# 静态文件代理
location /static {
alias /app/static;
}
# Flask应用代理
location / {
proxy_pass http://flask-app:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
6. Docker Compose集成部署
docker-compose.yml 内容:
version: '3.8'
services:
flask-app:
image: flask-app:1.0
volumes:
- ./static:/app/static
networks:
- app-network
nginx:
image: nginx:1.23-alpine
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./static:/app/static
depends_on:
- flask-app
networks:
- app-network
networks:
app-network:
driver: bridge
启动命令:
docker-compose up -d
7. 部署验证
- 访问应用:
浏览器打开http://localhost,返回JSON响应:
{"status":"running","message":"Flask in Docker + Nginx"}
-
静态文件测试:
在static/目录放置test.txt,访问http://localhost/static/test.txt应显示文件内容。 -
容器状态检查:
docker ps -a # 查看运行中的容器
docker logs <container_id> # 检查日志
8. 关键优化点
- Gunicorn参数调优:
在Dockerfile中调整Gunicorn工作进程数(根据CPU核心数):
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"]
- Nginx缓存配置:
在nginx.conf中添加静态文件缓存:
location /static {
expires 30d;
add_header Cache-Control "public";
}
- 多阶段构建(减少镜像体积):
# 第一阶段:构建依赖
FROM python:3.9-slim as builder
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# 第二阶段:复制依赖到轻量镜像
FROM python:3.9-slim
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
# ...后续步骤相同
9. 完整部署流程总结
| 步骤 | 操作 | 验证方式 |
|---|---|---|
| 1. 代码准备 | 编写Flask应用和依赖 | python app.py 本地运行 |
| 2. Docker化 | 构建镜像并测试 | docker run -p 5000:5000 flask-app:1.0 |
| 3. Nginx配置 | 设置反向代理和静态文件路由 | 检查配置文件语法 nginx -t |
| 4. 编排部署 | 通过Compose启动完整服务栈 | docker-compose up -d |
| 5. 生产调优 | 调整Gunicorn/Nginx参数 | 压力测试(如ab工具) |
通过此流程,可实现:
- 流量分发:Nginx处理静态请求,动态请求转发至Flask
- 资源隔离:Docker容器化保障环境一致性
- 弹性扩展:通过Compose快速扩展服务实例
更多推荐
所有评论(0)