希望你對flask,uwsgi/gunicorn,docker有一定的知識基礎
1 創建flask應用
目錄下/data/www/test/testflask
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'hello docker' if __name__ == '__main__': app.run(host='0.0.0.0',port=5000,debug=True)
python app.py 自己運行一遍確認沒問題
2 使用Gunicorn+Gevent運行Flask應用
pip install gunicorn gevent
編寫testflask/gunicorn.conf
workers = 5 # 定義同時開啟的處理請求的進程數量,根據網站流量適當調整 worker_class = "gevent" # 采用gevent庫,支持異步處理請求,提高吞吐量 bind = "0.0.0.0:5000" # 監聽IP放寬,以便於Docker之間、Docker和宿主機之間的通信
利用gunicorn 啟動flask程序,確保你的程序運行正常:
下面的app:app意思是說腳本名稱是app,腳本里面的應用服務也是app
gunicorn -c gunicorn.conf app:app
3 使用Docker運行Flask應用
testflask/requirements.txt 內容有:
flask
gunicorn
gevent
編寫testflask/Dockerfile
FROM python:2.7 WORKDIR /usr/src/app COPY requirements.txt ./ COPY gunicorn.conf ./ RUN pip install --no-cache-dir -r requirements.txt CMD ["gunicorn", "app:app", "-c", "gunicorn.conf"]
sudo docker build -t 'testflask'
docker run -it --rm -p 5000:5000 testflask
4 實際情況非常復雜,要使用docker-compose 編排多純鏡像組成一組服務
下面是簡單的compose yaml腳本,位於testflask/docker-compose.yaml
web: build: . ports: - 5000:5000 links: - redis - mongo working_dir: /app volumes: - .:/app command: python app.py redis: image: redis:latest mongo: image: mongo
執行腳本 docker-compose up -d 同樣的能達到一樣的效果