下面是一个完整的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配置文件
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)
flask==2.0.1
flask-pymongo==2.3.0
gunicorn==20.1.0
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"]
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;
}
}
}
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
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:
bash
docker-compose up -d --build
docker-compose ps
docker-compose logs
docker-compose down
docker-compose up -d --build
mongo_data
确保数据持久化dockerfile
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000", "--reload"]
这个配置提供了生产环境可用的基础架构,可根据实际需求进行调整。