iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
Kubernetes

探討k8s部署方式系列 第 18 篇

把 FastAPI 做成 Docker Image(續)[Day18]

  • 分享至 

  • xImage
  •  

三十一、現在部署單位發生了什麼改變?

systemd 時:

部署單位
=
Source Code

流程:

Git
↓
Server
↓
pip install
↓
restart

Docker 後:

部署單位
=
Docker Image

流程:

Source Code
↓
Docker Build
↓
Image
↓
Server
↓
Container

這是一個非常重要的轉變。


三十二、systemd 與 Docker 實際比較

項目 systemd 直接部署 Docker 部署
Python Host 安裝 Image 內
Dependencies Host virtualenv Image 內
Application Code Host File System Image 內
啟動方式 systemd Unit Docker CMD / ENTRYPOINT
Process 管理 systemd Docker Runtime
環境一致性 靠人工維護 由 Image 固定
版本單位 Git Commit / Server Code Image Tag
Rollback 切 Code + 重裝環境 換舊 Image
多台 Server 每台維護環境 Run 同一 Image
隔離性 virtualenv 為主 Container
Kubernetes 不直接適用 天然以 Container 為部署基礎

三十三、Docker 並不是永遠比較好

如果只有:

一台 Server

一個 FastAPI

流量很小

部署頻率很低

那:

Nginx
+
systemd
+
virtualenv

其實可以非常簡單穩定。

不一定需要:

Docker
Kubernetes

否則反而增加:

學習成本
維運成本
系統複雜度

所以 Docker 的價值會隨著:

環境數量增加
Server 數量增加
服務數量增加
部署頻率增加
CI/CD 自動化需求增加

越來越明顯。


三十四、Docker 真正替我們解決了什麼?

從剛才實作來看,Docker 最重要的改變是:

以前:

我需要把 Server
準備成可以跑 Application 的樣子

現在:

我先把 Application
做成可以直接執行的 Image

所以從:

Configure Server

逐漸轉向:

Build Artifact

Server 的責任開始變小。

它不需要知道:

這個專案用哪個 Python?

FastAPI 是哪一版?

要裝哪些 pip package?

Application 要怎麼啟動?

這些都被放進:

Docker Image

三十五、但目前還有一個問題

現在只有:

FastAPI Container

非常簡單。

但是實際 Backend 通常還需要:

FastAPI
Redis
MariaDB

如果全部用 Docker:

FastAPI Container

Redis Container

MariaDB Container

我們就開始需要處理:

Container 之間怎麼連?

啟動順序怎麼管理?

環境變數怎麼設定?

Database 資料怎麼保存?

每次要打三個 docker run 嗎?

如果再加入:

Elasticsearch
Worker
Scheduler

手動 docker run 很快就會變得麻煩。

因此下一個實作會開始導入:

Docker Compose。

讓我們用一份設定描述:

FastAPI
+
Redis
+
MariaDB

並實際建立第一個多 Container Backend Environment。


上一篇
把 FastAPI 做成 Docker Image(續)[Day17]
系列文
探討k8s部署方式 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
fuu
iT邦新手 5 級 ‧ 2026-10-03 00:51:28

哭哭 中斷鐵人賽了 跟朋友講電話忘記時間了啦!
/images/emoticon/emoticon02.gif

我要留言

立即登入留言