Kubernetes 與 Docker 的比較

2021 年 10 月 12 日

Kubernetes 與 Docker:概覽

瞭解 Kubernetes 與 Docker 的區別,這是雲端原生和 DevOps 中最重要的議題之一。Kubernetes 與 Docker 當中肯定屬於某個對話,然而事實上不應該互相比較。事實上,Kubernetes 與 Docker 不彼此競爭。因此,請將這些技術視為可以互補和相互搭配使用的兩個技術。


您知道有哪些可能面臨的狀況?要掌握這一點,首先需要瞭解 Kubernetes 和 Docker 有哪些相似和不同之處。

瞭解 Docker

Docker 是應用程式容器的開放原始碼平台。不過,如果這個概念是新的,一個容器就是獨立的封裝格式,將所有必要的程式碼與相依性都轉換成可執行檔格式。舉現實世界當作比喻,容器就像 IKEA 的包裝,裡面有桌子的所有組件、支架和螺絲 (當然還有六角扳手) - 但除了包含所有的組件外,當您執行容器時,它還為您建造了桌子。

應用程式開發者通常會使用 Docker,因為它輕量化且標準化的格式。這些特性讓開發者能夠彈性與擴充能力建置、測試及部署。

Docker 在 IT 產業中也有另一個意義 - 一個名為 Docker,Inc。的實際公司開發了平台內的工具。此差異非常重要,因為指定重疊的名稱。

瞭解 Kubernetes

如果 Docker 是單一容器,Kubernetes 是一次管理多個容器的工具。與 Docker (平台而非公司) 相同,Kubernetes 是開放原始碼平台,但由雲端原生運算基礎作為包含 2,300 個以上的參與者的專案管理。Kubernetes 的運作就像雲端作業系統一樣,不僅簡化了跨虛擬機器和雲端管理流程,還能讓 IT 部門大規模處理物。

什麼是 Kubernetes?Kubernetes 與本機系統上所找到的任何系統管理種類都類似,這只是容器的規模。在 Kubernetes 內進行佈建、更新、排程、刪除及一般狀況監控。回到 IKEA 的比喻,如果一個容器是一張桌子,那麼 Kubernetes 就像設施經理,在 IKEA 的倉庫裡實現訂購、分發和檢查桌椅和其他包裝傢俱的狀態。

還有哪些其他容器執行時期?

在討論 Docker 和 Kubernetes 時,缺少的一個關鍵概念是容器執行時期的定義。什麼是容器執行時期?簡單來說,容器執行時期是運行容器的引擎——回到 IKEA 的比喻,容器執行時期環境就像是盒子裡的組裝說明書。在某些情況下,這樣做很簡單,執行管理是由所謂的低階容器執行環境處理。對於更複雜的情境,高階容器執行環境則提供 API 整合、映像檔格式和映像檔管理的指導。在某些情況下,這個術語可能會與 Docker 互換使用,但實際上其含義略有不同。

Kubernetes 運行一個稱為容器執行時期環境介面 (Container Runtime Interface, CRI) 的 API。這個介面與每個容器執行時期環境互動,以執行容器包裝。再次以 IKEA 比喻來說,Kubernetes 的 CRI 就像是閱讀包裝內組裝說明書 (容器執行時期) 的人員。

除了 Docker,還有其他容器執行時期環境。其他兩個常見的容器執行時期環境包括:

Containerd:Containerd 最初是 Docker 專案的一部分。然而,開發人員的目標是讓 Docker 更加靈活和模組化,因此決定將 Containerd 分離成獨立的專案。Containerd 處理高階容器執行時期環境需求,例如從登錄提取映像檔、映像檔管理,並與低階執行時期環境整合,以執行容器處理過程。

CRI-O:CRI-O 是另一個開源的容器執行時期環境,作為 Docker 的替代方案。CRI-O 實現了 Kubernetes 容器執行時期環境介面 (Container Runtime Interface, CRI),使執行環境能夠與 Open Container Initiative 標準兼容。

CRI-O 和 Containerd 兩者都使用 CRI 提供的規格,使其完全與 Kubernetes 相容。

Docker 和 Kubernetes 有什麼不同?

與 Kubernetes 的比較常會討論 Docker 與 Kubernetes,不過事實是兩者不能彼此直接競爭。本文中使用的 IKEA 系列顯示它們的相關性和為何是執行現代化 IT 管理的關鍵,但沒有競爭對手。而是雲端原生生態系統的一部分。Docker 容器是 Kubernetes 所管理的內容中的一部分,而 Kubernetes 的優點是輕鬆擴充 Docker 容器的量

因此,問題不是「我選擇 Docker 或 Kubernetes?」因此,IT 主管的主要代價如何就管理和作業而言,他們會一起使用 Kubernetes 與 Docker。

Docker 和 Kubernetes 如何協同工作?

Kubernetes 與 Docker 都是一起運作的。雖然您不需要使用 Kubernetes 管理 Docker 部署,但萬一您必須管理多個部署執行處理,卻是有效的戰略。這特別適用於在使用相同應用程式的多個部署以及需要調整規模的情況。Kubernetes 協調流程系統的開放原始碼本質,確保可跨多部伺服器管理複雜性。

從 Kubernetes 中,許多 Docker 套裝程式都可以在處理隨選要求時,透過諸如修補程式與更新等功能進行批次處理,以及對問題進行規模的監控,進行部署和管理。藉助 Kubernetes,IT 部門便可:

  • 在整個基礎架構中分配 Docker 容器
  • 視需要縱向擴充 Docker 容器與相關資源
  • 視需要佈建、排定或刪除容器和更新
  • 監控 Docker 執行處理的狀況

適用於 Kubernetes 與 Docker 的 Oracle 工具

Oracle Cloud Infrastructure 提供多種服務來加速及打造現代化雲端原生應用程式。尤其是 Kubernetes Engine Container Registry,它們能夠管理和分析 Docker 映像檔,這些強大且免費的內含工具能夠簡化管理和提升效能。免費試用 Oracle Cloud,並親自體驗 Kubernetes。

Oracle Cloud Infrastructure (OCI) Kubernetes 引擎:客戶成功案例

龐貝考古公園
龐貝考古公園

繼 2020 年 3 月義大利龐貝考古公園關閉後,任何重開計畫都需要一定的管理與管控措施,以確保社交距離。形成計畫,允許遊客存取由數個選定 Oracle 產品提供技術支援的新 MyPompeii 應用程式,以加速雲端原生行動解決方案 (包括 OCI Kubernetes Engine 和 Oracle Container Registry)。

Snap Vision:

位於倫敦的 Snap Vision 提供人工智慧所提供的視覺化搜尋技術,協助購物者找出他們愛的衣物。隨著 COVID-19 強迫店內購物基本上關閉,Snap Vision 技術會提供給英國零售商,協助建立數位購物體驗。擴充是一項重大挑戰,然而 Snap Vision 可藉由與 Kubernetes 的「Oracle Cloud Infrastructure」以低成本代管新零售商環境。