Docker 系列(三十七):Docker 的底层实现

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

系列导航


   转载规则


《Docker 系列(三十七):Docker 的底层实现》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Docker 系列(三十八):命名空间(Namespaces) Docker 系列(三十八):命名空间(Namespaces)
命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。 PID 命名空间不同用户的进程就是通过 pid 命名空间隔离开的,且不同命名
2023-05-02
下一篇 
Docker 系列(三十六):Docker 架构详解 Docker 系列(三十六):Docker 架构详解
本文先从 Docker 的前身 LXC 说起,介绍 Docker 的基本概念、与 OpenStack 的对比,然后深入剖析 Docker 架构中各个模块的职责,最后附上一组常用的容器操作命令演示。 Docker 的前身:LXCLXC 为 L
2023-04-18
  目录