插件窝 干货文章 如何使用Docker部署Nginx+Flask+Mongo的应用

如何使用Docker部署Nginx+Flask+Mongo的应用

Flask Dockerfile Nginx MONGO 369    来源:    2025-04-25

使用Docker部署Nginx+Flask+MongoDB应用指南

下面是一个完整的Docker部署方案,使用Docker Compose来编排Nginx、Flask和MongoDB服务。

项目结构

project/
├── app/
│   ├── app.py          # Flask应用主文件
│   ├── requirements.txt # Python依赖
│   └── Dockerfile      # Flask应用的Dockerfile
├── nginx/
│   ├── nginx.conf      # Nginx配置文件
│   └── Dockerfile      # Nginx的Dockerfile
└── docker-compose.yml  # Docker Compose配置文件

1. 创建Flask应用

app/app.py

from flask import Flask, jsonify
from flask_pymongo import PyMongo

app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://mongo:27017/myDatabase"
mongo = PyMongo(app)

@app.route('/')
def home():
    return jsonify({"status": "success", "message": "Welcome to Flask with MongoDB!"})

@app.route('/data')
def get_data():
    # 示例:插入并查询数据
    mongo.db.test.insert_one({"name": "sample"})
    data = list(mongo.db.test.find({}, {"_id": 0}))
    return jsonify(data)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

app/requirements.txt

flask==2.0.1
flask-pymongo==2.3.0
gunicorn==20.1.0

app/Dockerfile

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]

2. 配置Nginx

nginx/nginx.conf

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    upstream flask {
        server flask:5000;
    }

    server {
        listen 80;
        server_name localhost;

        location / {
            proxy_pass http://flask;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

nginx/Dockerfile

FROM nginx:alpine

COPY nginx.conf /etc/nginx/nginx.conf

3. Docker Compose配置

docker-compose.yml

version: '3.8'

services:
  mongo:
    image: mongo:5.0
    container_name: mongo
    ports:
      - "27017:27017"
    volumes:
      - mongo_data:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    restart: always

  flask:
    build:
      context: ./app
      dockerfile: Dockerfile
    container_name: flask
    depends_on:
      - mongo
    environment:
      - MONGO_URI=mongodb://root:example@mongo:27017/myDatabase?authSource=admin
    restart: always

  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    container_name: nginx
    ports:
      - "80:80"
    depends_on:
      - flask
    restart: always

volumes:
  mongo_data:

4. 部署与运行

  1. 确保已安装Docker和Docker Compose
  2. 在项目根目录下运行: bash docker-compose up -d --build
  3. 等待构建完成后,访问 http://localhost 即可看到应用

5. 常用命令

  • 查看运行状态:docker-compose ps
  • 查看日志:docker-compose logs
  • 停止服务:docker-compose down
  • 重新构建:docker-compose up -d --build

6. 扩展说明

  1. MongoDB持久化:通过volume mongo_data确保数据持久化
  2. Flask热重载:开发时可修改Flask的Dockerfile CMD为: dockerfile CMD ["flask", "run", "--host=0.0.0.0", "--port=5000", "--reload"]
  3. HTTPS支持:可在Nginx配置中添加SSL证书
  4. 环境变量管理:敏感信息可通过.env文件管理

这个配置提供了生产环境可用的基础架构,可根据实际需求进行调整。