![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/d7d765a15fca8ef2cccc15d447d3eb09.png)
![640?wx_fmt=gif](https://img-blog.csdnimg.cn/img_convert/3771eb736e5db0e79d672018c02c295c.png)
当Linux内核具有操作系统级的虚拟化的功能以后,Linux VServer于2001年被推出,它使用了类似chroot的机制与“安全上下文”(“security context”)以及操作系统虚拟化(容器化)相结合来提供虚拟化解决方案。它比简单的chroot更先进,允许您在单个Linux发行版(VPS)上运行多个Linux发行版。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/fba64bdfb74ac6e0224eaaf8f8be6ae8.png)
2004年2月,Oracle发布了Oracle Solaris Containers,这是一个用于X86和SPARC处理器的Linux-Vserver版本。
SPARC是由Sun Microsystems开发的RISC(精简指令集计算)架构。
Solaris Container是由系统资源控制和“区域”(zone)提供的边界隔离组合而成。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/1597319f61b091198eb4d8d9cb579d72.png)
Oracle Solaris 11.3 与Solaris Containers类似,OpenVZ的第一个版本于2005年推出。OpenVZ与Linux-VServer一样,使用操作系统级虚拟化,许多托管公司采用它来隔离和销售VPS。操作系统级虚拟化有一些限制,因为容器共享相同的体系结构和内核版本,当客户需要不同于主机的内核版本的情况下这种缺点就会显现出来。
Linux-VServer和OpenVZ需要为内核打补丁以添加一些用于创建隔离容器的控制机制。 OpenVZ的补丁未集成到内核中。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/ef3da972728fe02717f851332761a197.png)
2007年,谷歌发布了CGroups,这是一种机制,这种机制能限制和隔离一系列进程的资源使用(CPU,内存,磁盘I / O,网络等)。与OpenVZ 内核相反,CGroups在2007年集成进了Linux内核。
2008年,LXC(Linux containers,Linux容器)的第一个版本发布。LXC与OpenVZ,Solaris Containers和Linux-VServer类似,但是它使用的是已经在Linux内核中实现的CGroup。然后,Cloud Foundry于2013年创建了Warden,这是一个管理隔离,短暂存在和被资源控制的环境的API。在其第一个版本中,Warden使用了LXC。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/071517036d38c47fc04a104db90ca692.png)
2013年,Docker推出了的第一个版本。它像OpenVZ和Solaris Containers一样,实现操作系统级虚拟化。
2014年,谷歌推出了LMCTFY(Let me contain that for you),谷歌容器栈的开源版本,提供Linux应用程序容器。谷歌工程师一直在与Docker合作libcontainer,并将核心概念和抽象移植到libcontainer。因此没有积极开发LMCTFY项目,未来LMCTFY项目的核心可能会被libcontainer取代。
LMCTFY在同一内核上的隔离环境中运行应用程序,并且无需补丁,因为它使用CGroup,命名空间和其他Linux内核功能。 谷歌是容器化行业的领导者。谷歌的一切都在容器上运行。每周有超过20亿个容器在Google基础架构上运行。 2014年12月,CoreOS发布并开始支持rkt(最初作为Rocket发布)作为Docker的替代品。
![640?wx_fmt=jpeg](https://img-blog.csdnimg.cn/img_convert/3c2d84910acc26ccdd202085d0ffe865.png)
Jails,虚拟专用服务器(VPS),区域(Zones),容器和VM
到目前为止,我们已经简要介绍了Jail如何工作,并介绍了Linux-VServer如何允许运行隔离的用户空间,其中计算机程序直接在主机操作系统的内核上运行,但程序只能访问其资源的受限子集。
Linux-VServer允许运行“虚拟专用服务器”(“Virtual Private Servers”),但必须为主机内核打补丁才能使用它。(将VPS视为商业名称。)
Solaris容器被称为区域(Zone)。
“虚拟机”是在“真实硬件机器”之上模拟虚拟机的通用术语。该术语最初由Popek和Goldberg定义为真实计算机的有效,孤立副本。
虚拟机可以是“系统虚拟机”或“过程虚拟机”。在我们日常使用VM这个词时,我们通常指的是“系统虚拟机”,它是模拟的是主机硬件来模拟整个操作系统。但是,“进程虚拟机”(“Process Virtual Machine”,有时称为应用虚拟机)是用于模拟执行单个进程的编程环境:Java Virtual Machine(JVM,Java虚拟机)就是一个例子。
操作系统级虚拟化也称为容器化。Linux-VServer和OpenVZ等技术可以运行多个操作系统,同时共享相同的体系架构和内核版本。
在guest需要的虚拟机于主机的内核版本的情况时,共享相同的体系结构和内核会有一些限制和缺点。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/16c08f05ef6bba68071484826175142f.png)
系统容器(例如LXC)提供的环境非常接近您从虚拟机获得的环境,与此同时又省去了运行单独内核和模拟所有硬件所带来的开销。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/899e4fa8ec514f16a1c56e76bfd471eb.png)
操作系统容器与应用容器
操作系统级虚拟化有助于我们创建容器。LXC和Docker等技术使用这种隔离方式。我们这里有两种类型的容器:
OS容器会打包整个应用程序栈的操作系统【示例LEMP技术栈,LEMP是指一组一起使用来运行动态网站或者服务器的开源软件,软件名称的首字母缩写:L代表Linux,E代表Nginx(Engine X),M代表MariaDB或MySQL,P代表PHP】。