热门推荐
立即入驻

Flask+Nginx:Docker容器化部署指南

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、设置资源限制等。这套方案适用于从开发到生产的全流程部署,是现代微服务架构的基础实践。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...