Docker 的最後一篇 (((o(゚▽゚)o)))
官方文件:Install Docker Desktop on Windows
下載 & 安裝
重新啟動(對,又要重啟)
完成安裝後,會看到一個可可愛愛的安裝詢問畫面
就跟每一次的安裝執行一樣。如果他問你 policy,accept 就是了。
接下來會要求登入,我個人是比較懶... 就直接綁 Google 帳號。
出現畫面,安裝就完成啦!
在建立 image
之前,總要先有要執行的程式碼。
先附上 GIT路徑
內容很單純,就是一個會印出招呼語的 main.py
檔,要使用專案中的 Dockerfile
把它打包起來。
程式碼就只有這樣:
if __name__ == '__main__':
print('Hi, This is your new application.')
非常的樸實無華(且無聊),但沒關係,重點是打包!
在專案路徑下執行指令:
docker build -t docker-demo:0.0.1 -f Dockerfile .
(對,就是 README.md 裡面那行。)
-t
:指定 image 名稱,就是範例中的 docker-demo
-f
:執行 file 指令執行內容如下:
從記錄可以看出在 Dockerfile
內的指令被逐步執行。
完成後透過指令或直接從 Docker Desktop 確認結果:
docker image list
包好了 image
,立刻就來執行看看!
執行指令:
docker run docker-demo:0.0.1
剛才打包起來的程式碼順利地執行成功了~
有沒有注意到...
實作到目前為止,都。沒。有。安。裝。過。 python 。環。境 ( ´▽`)
不是因為已經本來就已經安裝好了!(詳見下圖)
在成功執行container
後執行python --version
的指令,卻看到執行結果空空的,什麼都沒有。
但container
確實是正常運行的,這是因為執行需要的依賴已經全部都被打包進image
之中了,即容器化最讚的特性之一:遷移性(或說移植性)非常高!
只要打包好到哪運行都可以,而不必擔心要做各種環境設置。
... 對了,因為安裝的是 Docker Desktop,所以所有的指令其實都可以用列表最右邊的 Actions 執行,依個人習慣操作即可。 但是下指令就是比較帥(並沒有)
相關的說明都直接壓在註解上了。
# 使用 Python 3.11 作為 base image
FROM python:3.11-slim
# 設置工作目錄
WORKDIR /app
# 複製當前目錄的內容到容器中的 /app 目錄
COPY . .
# 安裝 Python 依賴項
# 如果有 requirements.txt 文件,使用它安裝依賴
RUN pip install --no-cache-dir --upgrade pip && \
if [ -f requirements.txt ]; then pip install --no-cache-dir -r requirements.txt; fi
# 指定要執行的命令
CMD ["python", "main.py"]
開發都是寫 API 的啊!!!
這不就來了嗎~
一樣,上 GIT路徑
用 FastAPI
來試一下:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def hi_fastapi():
return "Hi, it's your FastAPI Service!"
打包 image
的指令一模一樣,就是改個名稱而已:
docker build -t docker-demo-api:0.0.1 -f Dockerfile .
執行結果如下:
如果不改名也不改版號會怎麼樣?
其實也不會怎麼樣,名字和版號都會變成新的
image
在使用。
原本舊版的image
不會被覆蓋或刪除,但是 REPOSITORY 和 TAG 都會變成<none>
,時間久了就會變得難以識別。
執行剛打包好的 image
:
docker run -dp 8080:8080 docker-demo-api:0.0.1
-d
:參數,使應用程式背景執行-p
:即 port
,-p 8080:8080
是設定把主機收到的 8080 流量都轉到 container
EXPOSE 的 8080 port 上。主機 port:container port
。最後來測試看看結果:
內容大同小異,只是需要把 CMD 調整為執行該程式碼的指令。
# 使用 Python 3.11 作為 base image
FROM python:3.11-slim
# 設置工作目錄
WORKDIR /app
# 複製當前目錄的內容到容器中的 /app 目錄
COPY . .
# 安裝 Python 依賴項
# 如果有 requirements.txt 文件,使用它安裝依賴
RUN pip install --no-cache-dir --upgrade pip && \
if [ -f requirements.txt ]; then pip install --no-cache-dir -r requirements.txt; fi
# 指定要執行的命令
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
補充一點指令設定的小知識。
跨平台開發或是運行的時候,可能會遇到平台相容性問題,這時候可以使用 buildx
處理。
依需求把 docker build
調整成
docker buildx build --platform linux/arm64
或是
docker buildx build --platform linux/amd64
就能夠正常運行囉!