最常被問的問題:Docker 跟 K8s 是不是二選一?
不是。這個誤解害很多人學 K8s 學得很痛。
一句話講清楚:
Docker 是「打包工具」,K8s 是「管理工具」。Docker 把應用變成容器,K8s 負責把這些容器跑在叢集上。
兩個是上下游,全部都要會。
一張圖看懂兩者關係
[ 開發階段 ] [ 部署階段 ]
寫 Dockerfile ─────► 寫 K8s YAML
docker build kubectl apply
docker push ↓
↓ K8s 把容器跑在叢集上
產出 image ↓
自動處理:調度 / 擴縮 / 故障恢復 / 滾動更新
Docker Kubernetes
做的事 做的事
開發人員寫 Dockerfile 把程式打包成 image,然後把 image 推到 registry(Docker Hub、ECR 等)。K8s 從 registry 拉 image,把它跑成容器——這就是兩者的銜接點。
比喻:Docker 是裝箱、K8s 是貨運公司
| 角色 | 對應到 Docker | 對應到 K8s |
|---|---|---|
| 工廠 | 寫程式(你的 source code) | — |
| 裝箱 | Dockerfile + docker build | — |
| 貨櫃 | image | — |
| 運送 | docker run(一個一個運) | K8s(一次運一整批) |
| 倉儲管理 | — | K8s(哪個貨櫃放哪、壞了換哪個) |
| 配送調度 | — | K8s(流量大就多派幾台) |
功能對照表
直接列給你看,差別在哪一目了然:
| 能力 | Docker / Compose | Kubernetes |
|---|---|---|
| 跑一個容器 | ✅ docker run | ✅ Pod |
| 多容器組合 | ✅ docker-compose.yml(單機) | ✅ Deployment + Service(跨機) |
| 跨多台機器 | ❌ | ✅ |
| 自動擴縮容 | ❌ | ✅(HPA) |
| 自動故障恢復 | ❌ | ✅(Controller Manager) |
| 滾動更新 | ❌(要自己寫腳本) | ✅ 內建 |
| 服務發現 | ❌(IP 寫死) | ✅ DNS |
| 設定管理 | 環境變數 | ✅ ConfigMap / Secret |
| 持久化儲存 | volume | ✅ PV / PVC |
那 K8s 底層用什麼跑容器?
這個是進階問題,但很多人會搞混所以先講:
K8s 不直接用 Docker Engine,而是用 containerd 或 CRI-O 這類「Container Runtime」。有趣的是,Docker Engine 底下也是用 containerd——containerd 才是真正做事的那個。
你寫 Dockerfile → docker build → image
↓
K8s 拿 image → containerd → 跑成容器
Docker 在 K8s 世界的角色是「製造 image 的工具 + 開發階段的測試環境」,生產環境跑的不是 Docker,是 containerd。但你寫的 Dockerfile、build 出來的 image,K8s 100% 都吃。
工作流程:開發到上線
實際工作中你會這樣用兩者:
- 寫 Dockerfile
-
docker build 出 image-
docker run 在本機測試-
docker push 把 image 傳上去- 寫 YAML 告訴 K8s 怎麼跑(要幾份、開哪個 port、用什麼設定)
-
kubectl apply 部署到叢集- K8s 自動處理排程、健康檢查、滾動更新
Docker 跟 K8s 的銜接點就在 image 這個東西。
學習順序:先 Docker、再 K8s
我給新手最常見的建議:
- 沒碰過 Docker 直接學 K8s → 你會卡在 Pod。Pod 是「容器的延伸」,沒有容器概念看 Pod 會一頭霧水。
- Docker 已經 OK 了 → 直接學 K8s,會發現很多概念其實 Docker 已經教過你了,只是規模放大。
docker run、知道什麼是 image、什麼是 container、什麼是 volume。這四件事 OK 就可以開始學 K8s。
30 秒跟同事解釋的版本
如果同事問你 Docker 跟 K8s 差在哪,你可以這樣講:
「Docker 是把應用程式打包成容器的工具,每個容器就像一個迷你的 Linux。K8s 是管理一大堆容器的平台,負責把容器跑在好幾台機器上、流量大了自動加機器、機器掛了自動搬。Docker 是基礎,K8s 是放大版的管理者,兩個都要會。」
重點整理
- Docker 解決「怎麼把應用變成容器」,K8s 解決「怎麼管一堆容器」
- 不是替代關係,是上下游關係——image 是兩者的銜接
- 單機用 Docker Compose、跨機用 K8s——這是最簡單的判斷標準
- K8s 底層的 Container Runtime 通常是 containerd,但你寫的 Dockerfile 完全相容
- 學 K8s 之前 Docker 一定要會,不然會卡在 Pod 概念
下一步
知道兩者關係後,下一篇我們把 K8s 的 8 個核心概念一次搞懂——Pod、Service、Ingress、ConfigMap、Secret、Volume、Deployment、StatefulSet 全部用因果鏈串起來,看完一張表就記住。
📅 下一篇(2026-04-30 已上線):K8s 八大核心概念總覽
一次看懂 8 個 K8s 名詞,每個都是因為「上一個解決不了」才出現,用因果鏈串起來最好記。
📚 完整系列總覽:K8s 系列教學首頁(共 40 課,按學習路徑順序排)