K8s · 入門基礎 · 第 02 課 · · 7min read

Docker 和 Kubernetes 差在哪?一張圖看懂兩者關係

Docker 是打包工具、K8s 是管理工具,兩個不是替代關係,是搭配關係。這篇用最簡單的比喻講清楚:Docker 把應用裝箱、K8s 是貨運公司,兩個一起用才完整。

#Docker #Kubernetes #比較 #差別
章節目錄 · 10

最常被問的問題: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 把「應用程式」變成可以重複部署的標準化貨櫃。K8s 是管理一堆貨櫃的物流系統。沒有貨櫃就沒有東西可以運,沒有物流就只有一堆貨櫃堆在角落

功能對照表

直接列給你看,差別在哪一目了然:

能力Docker / ComposeKubernetes
跑一個容器docker run✅ Pod
多容器組合✅ docker-compose.yml(單機)✅ Deployment + Service(跨機)
跨多台機器
自動擴縮容✅(HPA)
自動故障恢復✅(Controller Manager)
滾動更新❌(要自己寫腳本)✅ 內建
服務發現❌(IP 寫死)✅ DNS
設定管理環境變數✅ ConfigMap / Secret
持久化儲存volume✅ PV / PVC
Docker Compose 在「單機跑多容器」這件事上很強,但生產環境一定是跨機器——這時候 Compose 就力不從心,K8s 的全部功能才開始發揮。

那 K8s 底層用什麼跑容器?

這個是進階問題,但很多人會搞混所以先講:

K8s 不直接用 Docker Engine,而是用 containerdCRI-O 這類「Container Runtime」。有趣的是,Docker Engine 底下也是用 containerd——containerd 才是真正做事的那個。

你寫 Dockerfile → docker build → image
                                   ↓
                  K8s 拿 image → containerd → 跑成容器

Docker 在 K8s 世界的角色是「製造 image 的工具 + 開發階段的測試環境」,生產環境跑的不是 Docker,是 containerd。但你寫的 Dockerfile、build 出來的 image,K8s 100% 都吃。

工作流程:開發到上線

實際工作中你會這樣用兩者:

  • 本地開發:用 Docker

  • - 寫 Dockerfile
    - docker build 出 image
    - docker run 在本機測試
  • 推到 Registry

  • - docker push 把 image 傳上去
  • K8s 拉去跑

  • - 寫 YAML 告訴 K8s 怎麼跑(要幾份、開哪個 port、用什麼設定)
    - kubectl apply 部署到叢集
    - K8s 自動處理排程、健康檢查、滾動更新

    Docker 跟 K8s 的銜接點就在 image 這個東西

    學習順序:先 Docker、再 K8s

    我給新手最常見的建議:

    • 沒碰過 Docker 直接學 K8s → 你會卡在 Pod。Pod 是「容器的延伸」,沒有容器概念看 Pod 會一頭霧水。
    • Docker 已經 OK 了 → 直接學 K8s,會發現很多概念其實 Docker 已經教過你了,只是規模放大。
    最低門檻:你要會寫 Dockerfile、會 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 課,按學習路徑順序排)