前言
在了解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在共享主機作業系統核心的前提下,用虛擬化的方式實現應用,讓用戶有像是在實體主機裡面使用應用程式一樣的體驗。
讓我們來看看工作流程:

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

Docker Daemon是一個持續運行在系統上的後台程序。它是 Docker 的核心,負責管理所有容器。您可以將其視為 Docker 環境的「大腦」。我們不直接與 Docker Daemon交互,但與 Docker 相關的指令會向 Docker Daemon發送指令。這些指令包括:
- Container Management:守護程式負責建立、執行、停止和刪除容器。
- Image Management:它管理 Docker 映像,用於建置容器的範本。
- Networking:它處理容器的網路方面,使容器能夠相互通訊並與外界通訊。
- Storage:它管理容器使用的儲存。
- Resource Allocation:它控制如何將資源(CPU、記憶體等)分配給容器。