虛擬機與容器(VMs & Containers)

★★★★Draft

FromHow Linux WorksContinuous Delivery

📚 From the Books

虛擬機與容器(VMs & Containers)Infrastructure

兩種都在做隔離,但層次不同:VM 虛擬化整台機器的硬體、跑自己的 kernel;container 是作業系統層級的虛擬化,所有 container 共用同一個 host kernel。VM 隔離更徹底但笨重,container 輕量但共享 kernel——選哪個,取決於你要多強的隔離、能付多少開銷。

🧠 Intuition

TIP

Container 說穿了是受限的 process:靠 kernel 的 namespaces(自己的 PID、網路介面)、cgroups(資源限制)與類 chroot 的檔案系統,把一組 process 圈起來,讓它以為自己獨佔一台機器——但底下是同一個 kernel。

⚖️ Tradeoffs

每個服務一台 VM — 隔離強但笨重
  • 隔離最徹底(各自完整 OS 與 kernel),適合需要不同 OS、或安全邊界要很硬的場景。
  • 但每台 VM 都要單獨維護、開機慢、按實例計費時成本高;小規模看不出、規模一大就痛。
容器化 — 輕量但共享 kernel、有陷阱
  • 啟動快、密度高、image 可版控分發;但共用 host kernel,隔離弱於 VM。
  • 常見陷阱:overlay 變更在 process 結束後消失(資料要外接 DB/volume);用 latest tag 會因底層悄悄改變而壞掉,要釘明確版本;用他人 image 等於多一層信任風險;多數工具偏向 web server,其他服務未必合適。
  • 「container 不解決所有問題」:應用本來啟動就慢,裝進 container 一樣慢。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading

🔗 Dive Deeper