用Docker容器化部署Python Flask应用并实现Nginx反向代理
引言
在现代Web应用开发中,容器化技术已经成为部署标准。Docker通过将应用及其依赖打包到轻量级容器中,解决了\”在我机器上能运行\”的经典问题。本文将详细介绍如何将Python Flask应用容器化,并通过Nginx反向代理实现高效部署。
1. 准备Flask应用
首先创建一个简单的Flask应用。项目结构应包含app.py、requirements.txt和Dockerfile。
- app.py:包含Flask应用的核心代码,示例代码如下:
from flask import Flask
app = Flask(__name__)
@app.route(\'/\')
def hello():
return \"Hello from Dockerized Flask!\"
if __name__ == \'__main__\':
app.run(host=\'0.0.0.0\', port=5000)
- requirements.txt:列出依赖包,内容为:
Flask==2.0.1
2. 编写Flask应用的Dockerfile
Dockerfile定义了构建Flask应用镜像的步骤。以下是优化后的Dockerfile:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 5000 CMD [\"python\", \"app.py\"]
关键点说明:
- 使用slim镜像减少体积
- 分阶段复制利用Docker缓存机制
- 显式指定Python版本避免不兼容
3. 构建Flask应用镜像
在项目根目录执行构建命令:
docker build -t flask-app .
构建完成后可通过docker run -p 5000:5000 flask-app测试应用是否正常运行。
4. 配置Nginx反向代理
创建nginx.conf文件配置反向代理:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://flask-app:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
关键配置说明:
proxy_pass:将请求转发到Flask应用- 代理头设置确保客户端信息正确传递
5. 创建Docker Compose编排
使用docker-compose.yml统一管理服务:
version: \'3.8\'
services:
flask-app:
build: .
expose:
- \"5000\"
nginx:
image: nginx:alpine
ports:
- \"80:80\"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- flask-app
优势说明:
- 自动处理服务依赖关系
- 简化网络配置,服务间通过服务名通信
- volumes挂载实现配置热更新
6. 部署与测试
执行以下命令启动完整环境:
docker-compose up -d
验证部署:
- 访问http://localhost应看到Flask应用响应
- 检查容器状态:
docker-compose ps - 查看日志:
docker-compose logs -f
总结
通过Docker容器化Flask应用并结合Nginx反向代理,我们实现了以下目标:
- 环境一致性开发与部署
- 服务解耦与独立扩展
- 简化运维流程
- 提升系统安全性(容器隔离)
进一步优化方向包括添加多阶段构建减小镜像体积、配置HTTPS、设置资源限制等。这套方案适用于从开发到生产的全流程部署,是现代微服务架构的基础实践。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...




