Python 部署指南:使用 Docker 容器化 FastAPI 應用 (第 40 章)

站主自己的課程,請大家支持
揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站? 揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站?
  • Post by
  • Jan 23, 2024
post-thumb

在以前,部署 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!


延伸閱讀

LATEST POST
TAG