docker_practice/underly/README.md

14 lines
1.6 KiB
Go
Raw Normal View History

# 底层实现
Docker 底层的核心技术包括 Linux 上的命名空间Namespaces控制组Control groupsUnion 文件系统Union file systems和容器格式Container format
我们知道传统的虚拟机通过在宿主主机中运行 hypervisor 来模拟一整套完整的硬件环境提供给虚拟机的操作系统虚拟机系统看到的环境是可限制的也是彼此隔离的
这种直接的做法实现了对资源最完整的封装但很多时候往往意味着系统资源的浪费
例如以宿主机和虚拟机系统都为 Linux 系统为例虚拟机中运行的应用其实可以利用宿主机系统中的运行环境
我们知道在操作系统中包括内核文件系统网络PIDUIDIPC内存硬盘CPU 等等所有的资源都是应用进程直接共享的
要想实现虚拟化除了要实现对内存CPU网络IO硬盘IO存储空间等的限制外还要实现文件系统网络PIDUIDIPC等等的相互隔离
前者相对容易实现一些后者则需要宿主机系统的深入支持
随着 Linux 系统对于命名空间功能的完善实现程序员已经可以实现上面的所有需求让某些进程在彼此隔离的命名空间中运行大家虽然都共用一个内核和某些运行时环境例如一些系统命令和系统库但是彼此却看不到都以为系统中只有自己的存在这种机制就是容器Container利用命名空间来做权限的隔离控制利用 cgroups 来做资源分配