iT邦幫忙

0

伸縮自如的Flask [day 18] Docker image化--運行篇

首先,我們可以先拉一下底層的image,再把我們的app內容疊上去,從終端機(cmd)打上:

docker pull python

成功的話,可以在介面上看到新的image
https://ithelp.ithome.com.tw/upload/images/20210531/20122678lJHdPo4C9i.png

再來,我們可以開始寫dockerfile(可以放在主程式的旁邊)https://ithelp.ithome.com.tw/upload/images/20210531/20122678MPst4llzTw.png:

FROM python:3.9-buster

WORKDIR /app

COPY . /app

RUN apt-get update

RUN apt-get install nano

RUN pip install -r requirements.txt

CMD python3 main.py 

可以看到python:3.9-buster為我們剛剛拉到的image名稱,再來將目前路徑的程式都放到未來container中/app的地方。更新套件及裝上nano,未來如果有小地方要修改的話,可以方便我們使用

docker exec -it <container ID> bash

來進行小幅度的修改(注意,小心不要引起git版本的衝突)。
再來藉由requirements.txt來安裝想使用的python套件。

在測試階段可以先使用CMD python3 main.py ,
但是在未來需要正式營運時可以開始使用gunicorn(如果你比較喜歡uwsgi,也可以用這個套件,但是我比較喜歡綠色獨角獸)。

CMD  nohup gunicorn -w 4 main:app --access-logfile gunicorn_access.txt --error-logfile gunicorn_error.txt -b :5000

nohup可以幫助我們避免關閉session時產生input/output Error,當然你如果都不print東西,也可以避免這個錯誤。

我們可以將那些路由被接觸了,寫在gunicorn_access.txt,
錯誤訊息寫在gunicorn_error.txt,
而對外port設定為5000。

進行build image的程序,. 代表現在的路徑,代表我們在dockerfile的路徑上執行:

docker image build -t <喜歡的image name> .

最後將image run成container,以提供我們的服務:

docker run -p 3000:5000  <喜歡的image name>

https://ithelp.ithome.com.tw/upload/images/20210531/20122678Axo3GS7aJE.png
對內port為3000,對外為5000,我們可以從localhost:3000來看到我們的服務。


尚未有邦友留言

立即登入留言