1. 容器技术的历史
2000 年,随着 FreeBSD 4.0 的发布,容器技术正式对外公开,这种技术可将 FreeBSD 系统分区为多个子系统,称为 Jail。Jail 是作为安全环境而开发的,Jail 的目的是让进程在经过修改的 chroot 环境中创建,而不会脱离和影响整个系统,在 chroot 环境中,已经对文件系统、网络和用户的访问都实现了虚拟化。2001 年,借助 VServer 项目,容器技术进入了 Linux。这项工作的目的是在高度独立且安全的单一环境中运行多个 Linux 服务器,之后 Linux 容器技术开始逐渐成形。
2. 容器技术与虚拟化
容器技术其实是一种基于虚拟化的沙盒技术。
在计算机中,虚拟化是一种资源管理的技术,它将计算机的各种实体资源,如CPU、网络、内存及存储等,进行抽象后展示出来,使用户更方便地使用这些资源。
我们举一些常见的例子:
- 平台虚拟化
平台虚拟化是针对计算机和操作系统的虚拟化,也就是最常见的一种虚拟化技术,Hyper-V,Virtualbox,VMware 等产品都是应用这类虚拟化技术。
- 资源虚拟化
资源虚拟化是指对特定的计算机系统资源的虚拟化,例如对内存、网络资源等等。
- 应用程序虚拟化
应用程序虚拟化的一个最典型的应用就是 JAVA,生成的程序在指定的 JVM 虚拟机中运行。
那么容器技术属于哪一种虚拟化呢?
现在的容器技术,运行在操作系统之上,使用操作系统自身支持的机制(Namespace,CGroup,下面的章节会详细讲解),提供了相对独立的应用程序运行的环境,能够让应用程序间可以互不干扰地独立运行,也提供了资源控制的功能,能对其在运行中所使用的资源进行干预,可以理解为操作系统虚拟化的范畴。
3. 容器技术的实质
假定我们编写了一个批量运算加法的程序,这个程序的输入需要从一个文件 A 中读取,处理结果保存到另一个文件 B 中。当操作系统执行这个加法程序时,操作系统会根据程序的指引,从文件 A 中读取数据,保存到内存里,然后执行加法指令,CPU 与内存协作,完成了运算,将结果保存到 B 中。
在程序的运行过程中,计算机内存的数据,CPU 寄存器里的数据,内存堆栈中的指令,读取写入的文件,以及运行过程中计算机的状态,这些信息的集合,就是进程。
对于进程来说,它的静止态就是一个二进制可执行文件,它的运行态就是与它相关的计算机数据和状态的总和。而子进程的所有资源都继承父进程,只要控制住父进程的资源,通过父进程衍生的子进程也会被控制。
所以,简单来说容器技术的实质就是:通过各种手段,修改、约束一个"容器”进程的运行状态,按照用户的意图“误导”它能看到的资源,控制它的边界,从而达到环境隔离,或者说虚拟化的目的。
4. 小结
本节的内容可能有些抽象,别担心,到这里还不需要大家理解容器具体内容,本节最大的意义在于告诉大家以下两点:
- 不要把 Docker 的概念与容器技术概念混淆,他们并不是等价的;
- 容器的本质是一个进程。