Docker 虛擬化的原理主要是基于 Linux 內核的 cgroups(控制組)和 namespaces(命名空間)技術實現的。
1. cgroups:cgroups 是 Linux 內核中用于限制、控制和監視進程組的資源消耗的一種機制,它可以將一組進程組織在一起,并為這組進程分配資源。Docker 使用 cgroups 來限制容器可以使用的 CPU、內存、磁盤等資源。
2. namespaces:namespaces 是 Linux 內核中用于隔離進程之間的不同資源的一種機制,它可以為每個進程提供一個獨立的視圖,使得進程之間看起來像運行在不同的系統中一樣。Docker 使用 namespaces 來實現容器之間的隔離,包括 PID 命名空間(進程隔離)、網絡命名空間(網絡隔離)、掛載命名空間(文件系統隔離)等。
通過使用 cgroups 和 namespaces 技術,Docker 實現了容器的隔離和資源管理,使得多個容器可以在同一臺主機上運行,互不干擾,并且可以更高效地利用主機的資源。