docker_practice/underly/README.md

1.6 KiB
Raw Blame History

底層實做

Docker 底層的核心技術包括 Linux 上的名字空間Namespaces、控制組Control groups、Union 文件系統Union file systems和容器格式Container format

我們知道,傳統的虛擬機透過在宿主主機中執行 hypervisor 來模擬一整套完整的硬件環境提供給虛擬機的作業系統。虛擬機系統看到的環境是可限制的,也是彼此隔離的。 這種直接的做法實做了對資源最完整的封裝,但很多時候往往意味著系統資源的浪費。 例如,以宿主機和虛擬機系統都為 Linux 系統為例,虛擬機中執行的應用其實可以利用宿主機系統中的執行環境。

我們知道在作業系統中包括內核、文件系統、網路、PID、UID、IPC、內存、硬盤、CPU 等等,所有的資源都是應用程式直接共享的。 要想實做虛擬化除了要實做對內存、CPU、網路IO、硬盤IO、存儲空間等的限制外還要實做文件系統、網路、PID、UID、IPC等等的相互隔離。 前者相對容易實做一些,後者則需要宿主機系統的深入支持。

隨著 Linux 系統對於名字空間功能的完善實做程式員已經可以實做上面的所有需求讓某些程式在彼此隔離的名字空間中執行。大家雖然都共用一個內核和某些執行時環境例如一些系統命令和系統庫但是彼此卻看不到都以為系統中只有自己的存在。這種機制就是容器Container利用名字空間來做權限的隔離控制利用 cgroups 來做資源分配。