前言


在了解Kubernetes之前一定要先了解Container是什麼,因為Kubernetes 依靠容器蓬勃發展。容器提供了 Kubernetes 高效編排和管理應用程式所需的隔離、可移植環境。

歡迎來到 40 天 Kubernetes學習的第一天!今天,我們將探討一個根本的差異:虛擬機器 (VM) 與容器 (Container) 。理解這一區別對於有效地建置和部署應用程式至關重要,尤其是在 Kubernetes 中。

Day01這一部分基本上是在講一些Docker的基本觀念,還有Container和VM之間的差異,並沒有實作的部分。


什麼是Container

容器是一種革命性的打包和運行應用程式的方式。容器不像虛擬機器那樣將應用程式封裝在完整的作業系統中,而是共享主機作業系統內核,這使得容器極其輕量且高效。

虛擬機器 (VM)

可以將虛擬機器視為電腦中一台完整的電腦。每個虛擬機器都有自己的作業系統、函式庫和應用程式。

它們的工作原理:使用Hypervisor(例如 VMware ESXi 或 Hyper-V)位於實體硬體和虛擬機器之間,用於管理資源。

Hypervisor虛擬機器管理程式的類型

  • Type 1 Hypervisors:它們直接在硬體上執行(例如 VMware ESXi、Hyper-V、KVM)。它們性能卓越。
  • Type 2 Hypervisors:它們在現有作業系統(例如 Windows 或 macOS)之上運行。它們的性能通常較低。
  • 整理

    特性 Type 1 Hypervisor Type 2 Hypervisor
    位置 直接在裸機硬體上 作為應用程式在主機作業系統上
    對硬體存取 直接存取硬體 透過主機作業系統存取硬體
    效能 較低
    安全性 較低
    典型用途 企業伺服器、資料中心 個人電腦、開發測試
    常見例子 VMware ESXi, Hyper-V, KVM VirtualBox, VMware Workstation

VM的優點:隔離,完全控製作業系統。

VM的缺點:佔用大量資源,啟動時間較慢。

容器 (Container)

它們的工作原理:Container更加精簡,共享主機作業系統核心。Container僅打包應用程式及其相依性。

Docker:Docker 是最受歡迎的容器化平台。它允許建置、發布和運行Container。

大家常常把Docker跟Container混在一起講,很像是中壢跟桃園會被外地人混在一起講😂😂。大家講的Docker通常是指一個平台,他的工具與服務可以讓Container跑起來,也是一個允許你管理眾多Container的地方。Docker這個平台也可以使用各種插件,例如Docker Compose或是Kubernetes,讓你一次部署以及監控數個Container。另一方面,Container是一個虛擬化的服務,但和傳統 VM 不一樣,它不是模擬整個硬體,而是共享 OS Kernel,並用 Namespaces 和 Cgroups 來做隔離與資源控制。Container在共享主機作業系統核心的前提下,用虛擬化的方式實現應用,讓用戶有像是在實體主機裡面使用應用程式一樣的體驗。

讓我們來看看工作流程:

  1. 建置:使用 Dockerfile 在本機上建置 Docker image。
  2. 推送:將image推送到線上或是自架的鏡像倉庫(image registry)。
  3. 運行:在測試、開發或生產環境中,從鏡像倉庫拉取image並運行。

Docker的架構

Docker Daemon是一個持續運行在系統上的後台程序。它是 Docker 的核心,負責管理所有容器。您可以將其視為 Docker 環境的「大腦」。我們不直接與 Docker Daemon交互,但與 Docker 相關的指令會向 Docker Daemon發送指令。這些指令包括:

  • Container Management:守護程式負責建立、執行、停止和刪除容器。
  • Image Management:它管理 Docker 映像,用於建置容器的範本。
  • Networking:它處理容器的網路方面,使容器能夠相互通訊並與外界通訊。
  • Storage:它管理容器使用的儲存。
  • Resource Allocation:它控制如何將資源(CPU、記憶體等)分配給容器。

Widget is loading comments...