
在近幾年的技術社群中,「容器」與「Kubernetes」幾乎是同時被提及的關鍵字。許多人誤以為兩者是相同的概念,甚至會將「Kubernetes」等同於「Docker」。然而,事實上這是兩個不同層次的技術:
要真正理解這兩者之間的關係,需要從它們的定義、適用情境、技術演進,以及 Kubernetes 為什麼現在偏好 containerd 而非 Docker 開始探討。
容器是一種輕量級的虛擬化技術,基於 Linux 的 Namespace 與 Cgroups 機制,實現進程級別的隔離。簡單來說,容器讓應用程式可以在一個封閉的執行環境中運行,而這個環境包含應用所需的程式碼、函式庫、設定檔與依賴。
與傳統的 VM(虛擬機)不同,容器不需要模擬整個 OS,而是共用主機的 Kernel,因此啟動快、資源利用率高。
Kubernetes 是由 Google 開發、後來捐贈給 CNCF 的開源專案,是目前最流行的容器編排平臺。
它的核心能力是:
容器解決的是「如何封裝與運行應用程式」,而 Kubernetes 解決的是「如何在大規模環境中自動化管理這些容器」。
容器提供一致的應用執行環境,Kubernetes 則提供統一的調度、擴展與治理。
在容器剛興起時,Docker 幾乎是唯一的選擇,開發者也習慣用 Docker CLI 來建立與管理容器。早期的 Kubernetes 透過 Docker Shim 與 Docker 整合。
自 Kubernetes 1.20 開始,官方宣布 棄用 Dockershim,原因包括:
| 項目 | Docker | Containerd |
|---|---|---|
| 定位 | 完整的容器平臺,包含 CLI、Build、Registry | 輕量級容器執行時 |
| 是否符合 | CRI 不完全(需 Dockershim) | 原生支援 CRI |
| 功能範圍 | Build、Run、Push、API、CLI | Run、Pull、管理生命週期 |
| 與 K8s 整合 | 透過 Dockershim(已棄用) | 原生支援,官方推薦 |
| 適用情境 | 開發環境、單機操作 Kubernetes | 生產叢集 |