iT邦幫忙

2025 iThome 鐵人賽

DAY 9
1
DevOps

DevOps 進化論:從全能型戰士到安全守門員系列 第 9

Day 9:Docker 容器化與映像檔建立(打包專案)

  • 分享至 

  • xImage
  •  

●前言

▪在前一篇,我們將 效能測試整合至 CI Pipeline(GitHub Actions),並利用 Locust 產出壓測報表。到目前為止,已經涵蓋了 單元測試、整合測試、效能測試 三個層面,確保程式碼的正確性與效能品質。

▪接下來要邁向 CD(Continuous Deployment),第一步就是要讓專案可以被 容器化(Containerization)。容器化的好處是環境一致,開發環境、測試環境、正式環境都能共用同一套基礎映像檔,減少「我本機沒問題」的窘境。

今天的目標,就是帶大家完成專案的 Docker 映像檔建立。

●目標

1.撰寫一份 Dockerfile
2.建立對應的 requirements.txt
3.使用 Docker 指令將專案打包成映像檔
4.啟動容器並檢視 API 成果

●實作步驟

1.建立虛擬環境

python -m venv .venv(建立虛擬環境)
source .venv/bin/activate(進入虛擬環境)

https://ithelp.ithome.com.tw/upload/images/20250822/20178156TZYppcYKae.png

2.安裝套件

pip install -r requirements.txt

https://ithelp.ithome.com.tw/upload/images/20250822/201781568uJ3rXADms.png

3.建立必要檔案

▪main.py

from fastapi import FastAPI

app = FastAPI(
    openapi_url="/api/v1/openapi.json",
    docs_url="/api/v1/docs",
    redoc_url="/api/v1/redoc",
)

@app.get("/")
def root():
    return {"message": "Hello from Docker!"}

▪requirements.txt

fastapi
uvicorn[standard]

▪Dockerfile

# 使用官方 Python 3.12 輕量版基底映像
FROM python:3.12-slim

# 設定容器內的工作目錄為 /app
WORKDIR /app

# 先複製 requirements.txt 進去,方便利用快取分層
COPY requirements.txt .

# 安裝 Python 套件,--no-cache-dir 避免快取佔空間
RUN pip install --no-cache-dir -r requirements.txt

# 再把專案程式碼複製進去(避免每次修改程式都重裝套件)
COPY . .

# 對外開放 8000 port(FastAPI 預設使用)
EXPOSE 8000

# 容器啟動後要執行的指令:用 uvicorn 啟動 FastAPI 應用
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

▪.dockerignore

# Python 編譯後快取檔案
__pycache__/
*.pyc
*.pyo
*.pyd

# 虛擬環境(本機使用,不需要打包進容器)
.venv/

# 環境變數檔(通常含敏感資訊,不應放進 image)
.env

# Git 相關檔案(.git 資料夾通常很大,只在版本控制需要,容器內沒必要)
.git

4.建立映像檔

docker build -t fastapi-app .

https://ithelp.ithome.com.tw/upload/images/20250822/20178156UkeQCy4Cbe.png

5.啟動容器

docker run --rm -p 8000:8000 fastapi-app

▪ 啟動容器,退出後自動刪除(--rm:開發及測試階段適用)
https://ithelp.ithome.com.tw/upload/images/20250822/20178156nmFUImoUoP.png

6.開啟 URL 檢視成果

▪ URL : http://localhost:8000/
https://ithelp.ithome.com.tw/upload/images/20250822/20178156mqWGq3ZCsx.png
▪ URL(Swagger UI) : http://localhost:8000/api/v1/docs
https://ithelp.ithome.com.tw/upload/images/20250822/20178156Vrvt98i0Jd.png

●總結

今天我們學會了如何:

▪撰寫 Dockerfile
▪使用 docker build 建立映像檔
▪使用 docker run 啟動容器並測試 API

這是邁向 CD 的第一步,讓專案能夠被「打包」成獨立的環境。

下一篇👉我們會把映像檔帶到 Kubernetes,並介紹如何進行部署與擴展,讓應用程式真正能跑在雲端叢集上。


上一篇
Day 8:效能測試實作與 CI/CD 整合(實務範例 + Locust 報表)
下一篇
Day 10 : 單體架構到微服務架構 ─ 為Kubernetes打下基礎
系列文
DevOps 進化論:從全能型戰士到安全守門員18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言