docker_practice/underly
Baohua Yang 5a642809d9 Minor changes on content 2014-10-10 09:37:15 +08:00
..
README.md Finish the basic content for the underly chapter 2014-09-18 10:45:17 +08:00
arch.md Finish the basic content for the underly chapter 2014-09-18 10:45:17 +08:00
cgroups.md Minor changes on content 2014-10-10 09:37:15 +08:00
container_format.md Finish the basic content for the underly chapter 2014-09-18 10:45:17 +08:00
namespace.md Minor changes on content 2014-10-10 09:37:15 +08:00
network.md Write the underly/network chapter 2014-09-21 13:40:10 +08:00
ufs.md Minor changes on content 2014-10-10 09:37:15 +08:00

README.md

#底层实现

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来做资源分配。