docker_practice/underly/README.md

14 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 底層實現
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 來做資源分配。