01

Docker 與 Kubernetes,各是什麼?

兩個名字常被綁在一起講,好像要二選一——但它們其實不在同一層做事

「該用 Docker 還是 Kubernetes?」這個問題有點怪

你大概聽過這句話:要跑現代的雲端應用,得會 Docker,還要會 Kubernetes。於是很自然會冒出一個問題——那我到底該用哪一個?這正是這篇 ByteByteGo 圖解丟出的開場問句。

但先別急著選邊。這篇短文其實想讓你發現一件事:這兩個工具解決的不是同一個問題,也不站在同一個高度。搞懂它們各自在幹嘛,「該用哪個」這題往往就自己解開了。

🚚
先給你一個畫面

把一支應用程式想成一批貨。容器就像海運貨櫃——不管裡面裝什麼,尺寸規格一致,可以疊、可以搬、可以上船。Docker 是把貨裝進貨櫃、再在單一港口把它卸下來跑的那套工具;Kubernetes 則是排程整支貨櫃船隊的港務局:哪個貨櫃該放哪台機器、某台當機了誰來頂上、貨量暴增時要不要多開幾台。一個管單一貨櫃,一個管整個船隊。

直接讀原文:兩句定義

與其聽轉述,不如逐字核對 ByteByteGo 對這兩個工具下的定義。留意兩個關鍵字:Docker 說的是 containerization(容器化),Kubernetes 說的是 container orchestration(容器編排)。

原文 · ByteByteGo Docker is an open-source platform that allows you to package, distribute, and run applications in isolated containers. It focuses on containerization, providing lightweight environments that encapsulate applications and their dependencies. Kubernetes, often referred to as K8s, is an open-source container orchestration platform. It provides a framework for automating the deployment, scaling, and management of containerized applications across a cluster of nodes.
白話翻譯

Docker 是一個開源平台,讓你能把應用程式打包、散布,並在隔離的容器裡執行。

它專注在容器化——提供輕量的環境,把應用程式和它的依賴一起包起來。

Kubernetes(常被簡稱為 K8s)是一個開源的容器編排平台。

它提供一套框架,用來自動化容器化應用的部署、擴縮與管理,而且是跨越一整群節點來做。

💡
一句話抓住差別

Docker 的關鍵字是「打包 + 跑起來」(單一容器);Kubernetes 的關鍵字是「跨一群機器自動管理」(一大堆容器)。前者處理「一個」,後者處理「一群」——這條線,貫穿整篇文章。

兩張卡片,兩種角色

把定義攤成兩張並排的卡片,你會更清楚它們各自負責什麼、又刻意不管什麼。

📦
Docker

一個開源平台,負責把應用程式打包、散布、並在隔離的容器裡執行。它專注在依賴的封裝,給你一個輕量、一致的執行環境——但它管的,就是「這一個容器怎麼跑起來」。

☸️
Kubernetes(K8s)

一個開源的容器編排平台。它提供一套框架,自動化容器化應用的部署、擴縮與管理,而且是跨越一整群節點來做。它不在乎某一個容器內部怎麼跑,它在乎的是「這一大群容器整體是不是照你要的狀態在運作」。

🔆
K8s 這個縮寫是怎麼來的

Kubernetes 太長了,工程師習慣寫成 K8s——取開頭的 K、結尾的 s,中間 8 個字母就用數字 8 代替。之後看到 K8s,你就知道講的是同一個東西。

小試身手

先確認你抓到了兩個定義的重點,再往下看它們到底差在哪一層。

根據原文,Docker 和 Kubernetes 各自的核心定位是什麼?
原文說 Docker 的容器「encapsulate applications and their dependencies」,這句話的重點是什麼?
🧭
下一站:它們差在哪一層?

知道了各自的定義,接下來把兩者放在同一張圖上比。你會看到 Docker 待在「單一主機」的高度,而 Kubernetes 站在「跨叢集」的高度自動幫你排兵佈陣。往下捲。

02

它們差在哪一層?

Docker 待在單一主機的容器層級;Kubernetes 站上跨叢集的編排層級——差別不是好壞,是高度

關鍵在「層級」:單一主機 vs. 整個叢集

原文用一句話點破兩者最根本的差異——它們在不同的層級做事。先讀原文,再拆開來看。

原文 · ByteByteGo Docker operates at the individual container level on a single operating system host. You must manually manage each host and setting up networks, security policies, and storage for multiple related containers can be complex. Kubernetes operates at the cluster level. It manages multiple containerized applications across multiple hosts, providing automation for tasks like load balancing, scaling, and ensuring the desired state of applications.
白話翻譯

Docker 運作在「單一作業系統主機上的個別容器層級」。

你必須手動管理每一台主機;一旦要替多個相關容器設定網路、安全政策和儲存,事情會變得很複雜。

Kubernetes 運作在「叢集層級」。它跨越多台主機管理多個容器化應用,為負載平衡、擴縮、確保應用的期望狀態這些工作提供自動化。

⚠️
Docker 的天花板:一切都要你自己來

原文點出關鍵痛點:用 Docker 時,每一台主機你都得手動管。機器少的時候還好;一旦是幾十、幾百個容器散在許多台機器上,光是把網路、安全政策、儲存串好就足以讓人崩潰。這正是「該換 Kubernetes」的訊號。

Kubernetes 幫你自動化的三件事

原文明確列出 Kubernetes 在叢集層級自動幫你打理的工作。這三個詞,是理解 K8s 為什麼存在的核心:

1
Load balancing(負載平衡)

把湧進來的流量平均分散到多個容器上,不讓某一台被打爆、其他台卻閒著。

2
Scaling(擴縮)

流量變大就自動多開幾個容器撐住,流量變小就縮回去省資源——不用你半夜爬起來手動加機器。

3
Desired state(期望狀態)

你只要宣告「我要跑 5 個容器」,K8s 會持續盯著,掛了一個就自動補一個,永遠維持在你要的樣子。

🩹
「期望狀態」是 K8s 最迷人的心法

傳統做法是你「一步步下命令」讓系統變成某個樣子;Kubernetes 反過來,你只「宣告最終想要的樣子」,剩下的差異由它自己補齊。某台機器當掉、某個容器崩潰,它會自動重開、重新調度——這種「你說要什麼、它負責維持」的模式,正是原文所說的 ensuring the desired state。

點點看:一個 Kubernetes 叢集長什麼樣

下面是一個簡化的 K8s 叢集。上面是負責決策的控制層,下面是實際跑容器的一群節點(node)。點任何一塊,看它在整個編排裡扮演什麼角色。

🧠 控制層 Control Plane(叢集大腦)
⚖️ 負載平衡 Load Balancing
📈 自動擴縮 Scaling
🖥️ 節點 Node 1(跑容器的機器)
🖥️ 節點 Node 2(跑容器的機器)
控制層是叢集的大腦,負責做所有編排決策:新容器該放到哪個節點、流量怎麼分、某台掛了要在哪裡補回來。你對叢集下的「期望狀態」宣告,就是交給它去持續維持的。
🔆
Docker 只會看到其中一個小方塊

如果把 Docker 放進這張圖,它大概只負責「在某一個節點上,把某一個容器跑起來」——也就是圖裡的一個小格子。整張圖怎麼協調、誰放哪、掛了誰補,那是 Kubernetes 站在叢集高度做的事。這就是「層級不同」最直觀的樣子。

動手分分看:這件事該找誰?

下面是幾個實際情境或職責。依照原文對兩者的定位,把每一張拖到負責它的工具——「Docker(單一主機、容器層級)」還是「Kubernetes(跨叢集、編排層級)」。拖完按「對答案」。

把一支應用程式和它的依賴打包成一個隔離容器
在單一主機上,把某個容器實際啟動跑起來
流量暴增時,自動多開幾個容器分擔負載
把請求做負載平衡,分散到多台主機上的容器
某個容器掛掉後,自動重新調度回到期望狀態
替一個容器封裝好它需要的函式庫與執行環境
Docker ——單一主機、個別容器層級
拖到這裡
Kubernetes ——跨叢集、編排層級
拖到這裡
🔑
分類的訣竅

看到「打包、封裝、在一台機器上跑起來」——那是 Docker 的容器層級;看到「跨多台、自動、負載平衡、擴縮、維持狀態」——那是 Kubernetes 的編排層級。這也對應原文那句總結:Docker 專注容器化與在個別主機上跑容器,Kubernetes 專精於大規模跨叢集地管理與編排容器。

所以,該用哪一個?

原文用一句 In short 收攏了整篇。讀完這句,開場那個「二選一」的問題就會鬆開。

原文 · ByteByteGo In short, Docker focuses on containerization and running containers on individual hosts, while Kubernetes specializes in managing and orchestrating containers at scale across a cluster of hosts.
白話翻譯

簡而言之:Docker 專注在容器化、以及在個別主機上把容器跑起來;而 Kubernetes 專精於大規模地跨一群主機管理與編排容器。

🤝
通常不是二選一,而是「先 Docker,再 Kubernetes」

依原文的定位,這兩者處在不同層級、解決不同層級的問題:先用 Docker 把應用打包成容器,規模變大、要跨多台機器自動管理時,再讓 Kubernetes 來編排這些容器。原文結尾的提問也呼應這件事——它問的是「什麼樣的挑戰,促使你從 Docker 轉向 Kubernetes」,暗示的正是一條隨規模成長的路徑,而非對立的取捨。

小試身手

抓住「層級不同」這條主線,這章就通了。來兩題收尾:

原文說 Docker 和 Kubernetes 最根本的差別,在於它們運作的「層級」不同。這是什麼意思?
原文列出 Kubernetes 在叢集層級「自動化」了哪些工作?
🎯
帶走這一句

下次有人問你「Docker 還是 Kubernetes」,你可以反問:你的問題是「怎麼把一支應用打包跑起來」,還是「怎麼跨一大群機器自動管理一堆容器」?前者用 Docker,後者才輪到 Kubernetes——它們是不同層級的隊友,不是對手。