本篇文章介紹使用 Docker 建立 python image,參考官方文件

一個 image 包含所有運行程式的資源,例如: 程式碼或執行檔、運行環境、運行依賴套件、運行的需要檔案。

應用程式範例

建立一個 python-docker 資料夾並使用以下指令運行程式

1
2
3
4
5
6
7
cd /path/to/python-docker
python3 -m venv .venv
source .venv/bin/activate

python3 -m pip install Flask
python3 -m pip freeze > requirements.txt
touch app.py

app.py 加入程式碼

1
2
3
4
5
6
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello, Docker!'

測試應用程式範例

使用以下指令運行程式

1
2
3
cd /path/to/python-docker
source .venv/bin/activate
python3 -m flask run

開啟瀏覽器,進入 http://localhost:5000,下列內容將會出現在你的 terminal

1
127.0.0.1 - - [22/Sep/2020 11:07:41] "GET / HTTP/1.1" 200 -

建立 Python 的 Dockerfile

通常 image 都是基於現有 image 建立

WORKDIR 使用預設路徑給所有指令

COPY requestment.txt 到 Container 並使用 RUN 安裝

COPY . . 複製所有檔案到 Container

CMD 執行 Python flask

1
2
3
4
5
6
7
8
9
10
11
12
# syntax=docker/dockerfile:1

FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]

路徑結構

1
2
3
4
python-docker
|____ app.py
|____ requirements.txt
|____ Dockerfile

建立 image

使用 --tag 設定 image 的名稱和標籤,由於沒有給標籤,預設 latest

1
docker build --tag python-docker .

檢視本機 images

檢視方法有兩種,一種是使用 Docker CLI,以下使用該方法,另一種是使用 Docker Desktop

1
docker images

為 image 設定標籤

image 的名稱包含小寫字母、數字、分割符號。分割符號像是 dash 或 underscores。名稱開頭不能是分割符號
相同的名稱可以有多個 tag,為 python-docker 設定不同 tag

1
docker tag python-docker:latest python-docker:v1.0.0

docker tag 指令建立為 image 新的標籤,tag 不是建立新的 image,是使用另一種方式參考 image

刪除 image 標籤

到目前為止,image 有包含兩個 python-docker,使用 docker images 查詢。

可以使用 rmi 刪除 image,代表著 remove image

1
docker rmi python-docker:v1.0.0

Docker 會告訴我們,image 沒有刪除,是 untagged 這個標籤