
在以前,部署 Python 應用是一場惡夢:你要在伺服器上安裝 Python、處理版本衝突、設定環境變數…
Docker 的出現拯救了世界。它讓我們把「程式碼」連同「環境」一起打包成一個 Image (映像檔)。只要伺服器有裝 Docker,你的程式保證能跑。
1. 專案結構
假設你的專案結構如下:
my-fastapi-app/
├── main.py
├── requirements.txt
└── Dockerfile <-- 我們要新增這個
main.py 就是前幾章寫的 FastAPI 程式。
requirements.txt 透過 pip freeze > requirements.txt 產生。
2. 編寫 Dockerfile
這是一個製作 Image 的食譜。
# 1. 選擇基礎 Image (使用官方輕量版 Python 3.10)
FROM python:3.10-slim
# 2. 設定工作目錄
WORKDIR /app
# 3. 複製依賴清單並安裝
# (先複製 requirements.txt 是為了利用 Docker Layer Cache 加速)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 4. 複製所有程式碼
COPY . .
# 5. 開放 Port
EXPOSE 8000
# 6. 啟動指令 (使用 uvicorn)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
3. Build & Run
在終端機執行:
# 1. 建置 Image (命名為 my-fastapi-app)
docker build -t my-fastapi-app .
# 2. 執行 Container
# -d: 背景執行
# -p 80:8000: 將本機的 Port 80 對應到容器的 8000
docker run -d -p 80:8000 my-fastapi-app
現在打開瀏覽器 http://localhost (不用加埠號),你就會看到你的 API 了!
4. 進階:生產環境設定 (Gunicorn + Uvicorn)
Uvicorn 是一個很快的 ASGI Server,但它主要是用來處理連線,管理 Process 的能力較弱。在生產環境 (Production),我們通常會用 Gunicorn 作為 Process Manager 來管理 Uvicorn Workers。
只需修改 CMD 指令:
CMD ["gunicorn", "main:app", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000"]
-w 4: 啟動 4 個 Workers (通常設為 CPU 核心數 * 2 + 1)。-k: 指定 Worker 類別為 Uvicorn。
5. Batch 8 總結
本批次我們掌握了 Python 在 Web 開發領域的最新兵器:
- Ch 36: FastAPI 入門 (快、現代、自動文件)。
- Ch 37: Pydantic 資料驗證。
- Ch 38: RESTful CRUD 實作。
- Ch 39: SQLModel 資料庫整合。
- Ch 40: Docker 容器化部署。
你現在已經是一個能獨立開發並部署 Web 服務的 Backend API Engineer 了!
Batch 9 預告: 最後一批次,我們將不設限制,探討 Python 的無限可能:自動化與工具開發 (Automation & Tools)。 我們會寫一些實用的腳本,例如自動發 Email、操作 Excel 報表,甚至寫一個 Discord/Line Bot!
延伸閱讀: