分類
伺服器

Flask + Docker 開發環境建置教學

使用套件:

  1. Flask: 輕量級框架,python最流行的兩個框架之一(Django, Flask)
  2. Gunicorn: Web Server Gateway Interface,用來協助Flask等Web應用框架的介面,可以參考wiki (Web伺服器閘道器介面)Flask with Gunicorn
  3. gevent: 非同步,優點是更好處理高流量,可以參考淺談coroutine與geventFlask服务部署(Nginx Gunicorn Gevent)
  4. nginx: 反向代理、load balance,可以參考(整理) Flask + Nginx 詳細OpenSSL設定方法
  5. Docker: 管理環境,優點是可以為了特定專案做到客製化、自動化

設定參數:

  • /gunicorn.conf.py
    • gunicorn的設定參數
workers = 4               # 處理request的process數量
worker_class = "gevent"   # 選擇gevent, 讓process遇到IO時能先處理其他request
bind = "0.0.0.0:8000"     # ip:port
  • /requestments.txt
    • docker container想安裝哪些套件
gunicorn
gevent
flask
nginx
  • /Dockerfile
    • 基於/requestments.txt安裝套件
    • 基於/gunicorn.conf.py設定gunicorn參數
FROM python:3.6

# 指定容器內路徑, 若不存在會自動創造資料夾
WORKDIR ./             

# 將目前路徑的檔案(txt)複製到容器路徑(./)
COPY requirements.txt ./  

RUN pip install -r requirements.txt

COPY . .

# 容器創立後自動執行, 開啟瀏覽器輸入127.0.0.1:8000來打開網站
# 執行gunicorn, 後面為gunicorn參數
CMD ["gunicorn", "start:app", "-c", "./gunicorn.conf.py"]  

執行教學:

基於目前目錄下的Dockerfile建立docker image

sudo docker build -t '自訂image名稱' .

基於docker image創建docker container

sudo docker run -id --name=conatiner名稱 -p 0.0.0.0:8000:8000 -v /home/flask/:/home/flask 自訂image名稱:image版本 bash
  • -p 指定實體機的port(左)去對應container的port(右)
  • -v 指定實體機的路徑去(左)對應container內的路徑(右)

執行container

sudo docker exec -it conatiner名稱 bash

參考網站

Flask + Docker 无脑部署新手教程

淺談coroutine與gevent

wiki (Web伺服器閘道器介面)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *