想在Docker架設 Flask app 環境嗎?
按著步驟走,一定可以快速學會如何透過Docker架設Flask app 開發環境!
內容目錄
Dockerfile 建立 Docker image
dockerfile算是一個docker的腳本,透過指令建立一個新的image,接著docker run 就可以快速執行Flask app環境
首先建立一個主資料夾名稱為 docker-flask,接著裡面放置需要的檔案
資料夾結構
.
├── Dockerfile
├── app.py
├── requirements.txt
└── templates
└── index.html
第一次看可能覺得很複雜,分開看就會比較好理解,一個慢慢介紹說明
Dockerfile
剛前面有說這是一個docker的腳本指令,我們腳本指令內容如下,可以直接複製貼上操作,註解都有簡單的介紹
# 建置最基礎的image也就是python3.9
FROM python:3.9
# 定義當前的目錄位置
WORKDIR /docker-flask
# 將內容複製到工作目錄中
ADD . /docker-flask
# 運行pip3來安裝Flask應用程序的依賴套件
RUN pip3 install -r requirements.txt
# 執行python的指令語法
CMD ["python3","app.py"]
app.py
簡單的flask app,主要是取得templates內的index.html顯示在網頁上,注意的是host=’0.0.0.0′ 需要加上,如果沒加上,會找到執行docker時,會找不到對應的網址連結
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
requirements.txt
針對你要安裝的套件都可以寫入在requirements.txt內,除了針對依賴套件外,也可以針對版本進行安裝
Flask
templates/index.html
顯示在web上的基本樣式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Docker Flask web App</title>
</head>
<body>
<h1>Hello test</h1>
</body>
</html>
上面都建立完了之後,接著來build image吧!
Build docker image
終端機請到docker-flask 資料夾的位置上
執行 ”docker image build -t docker-flask . “,程式碼就會開始自動去build docker image,第一次可能需要花一點時間,請耐心等候
$ docker image build -t docker-flask .
[+] Building 3.5s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 37B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/python:3.9 3.3s
=> [internal] load build context 0.0s
=> => transferring context: 249B 0.0s
=> [1/4] FROM docker.io/library/python:3.9@sha256:8771691756bbf5beff80d64fca8f5b12e018352ddd9e30d8cdfef8cc3717b0e6 0.0s
=> CACHED [2/4] WORKDIR /docker-flask 0.0s
=> CACHED [3/4] ADD . /docker-flask 0.0s
=> CACHED [4/4] RUN pip3 install -r requirements.txt 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:c289626b707be01f64f7349661659bca33c2cf1f7849e7183f8aa7e453c6cd50 0.0s
=> => naming to docker.io/library/docker-flask 0.0s
結束後請輸入下方程式碼,就會順利看到產生出來的image,接著前往執行 docker image
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-flask latest c289626b707b 42 minutes ago 922MB
Docker run image
終端機一樣在docker-flask 資料夾的位置上,執行下方程式碼,會產生一段字串,這個字串就是容器(Containers),我們架設的flask就是放在容器內
$ docker run -p 5000:5000 -d docker-flask
773c403004a5c6636f1149b2d1c0e0e66b8aaf7bb147a184338cc21cbf0a1bc4
那我們要怎麼查看是否有跑起來呢?可以直接打開網址 http://localhost:5000/ 就會順利看到我們的index.html的網頁樣式
或是可以透過下方指令查看log狀態,logs後面的是容器id
$ docker logs 773c403004a5c6636f1149b2d1c0e0e66b8aaf7bb147a184338cc21cbf0a1bc4
* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 176-610-677
172.17.0.1 - - [02/Nov/2021 14:47:43] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [02/Nov/2021 14:49:30] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [02/Nov/2021 15:30:42] "GET / HTTP/1.1" 200 -
接著我們不想跑了,想把Flask app關閉該怎麼做呢?
Docker Stop containers
只需要在終端機上輸入下方指令,就可以將正在執行的flask app關閉,這時打開應網址是找不到任何東西。
$ docker stop 773c403004a5c6636f1149b2d1c0e0e66b8aaf7bb147a184338cc21cbf0a1bc4
773c403004a5c6636f1149b2d1c0e0e66b8aaf7bb147a184338cc21cbf0a1bc4
最後我們把一些docker 不必要的內容物進行清除,以免浪費電腦空間。
Docker System prune
終端機輸入 docker system prune 搭配 y 就可以將不需要的資源進行刪除的動作。
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
773c403004a5c6636f1149b2d1c0e0e66b8aaf7bb147a184338cc21cbf0a1bc4
Deleted build cache objects:
f8q5l7xmspcwgaw6tzf2f1dec
80nz0p6n18nbeaul1z9t2rtfk
or1eybwv5hajdpkc12p90zkhs
owj895e4r2kgx1vpw5fq8j1kz
usz1sbnqd3zyi83cdzal4pn2n
Total reclaimed space: 10.77MB
以上就是Docker 架設 Flask app 環境的簡單方法。
文章內的程式碼都可以直接複製下來練習操作,或是直接套用到自己的專案都行!
多練習,對自已會有很大的幫助!
一回生二回熟,將所學習到內容變成自己的知識。
人就是要學習自己不會的事情,這樣才會不斷的成長、進步!
更多技術文章
透過下方按鈕找尋到相關的技術文章,希望可以幫助到正在學習的你
加入到我的粉絲專頁,不定期發布最新文章資訊!
有任何文章問題都可以詢問喔!