容器发展简史

640?wx_fmt=jpeg

在过去四年中(2015-2019),云以及分布式计算成为最受欢迎的技术之一,它们从小众技能逐渐变成更被雇主看重的突出技能。容器化技术是云经济和IT生态系统中最新潮的技术之一。这篇文章可能会帮助您理解有关Docker和容器的一些令人困惑的概念。我们还将看到容器化生态系统在2019年的现状以及演变方向。“不是我们造就了历史,而是历史造就了我们。” ——马丁·路德·金Docker是当今最知名的容器平台之一,它于2013年发布。但是在此之前,隔离和容器化已经被使用。让我们回到1979年,当时我们刚开始使用Chroot Jail,之后便出现了最著名的容器化技术。了解这段历史不但有助于我们理解相关的新概念,也有利于我们理解这项技术。  640?wx_fmt=png 时间退回到1979年,Unix版本7在开发过程中引入Chroot Jail以及Chroot系统调用。Chroot jail被用于“Change Root”,它被认为是最早的容器化技术之一。它允许您将进程及其子进程与操作系统的其余部分隔离开来。这种隔离的唯一问题是根进程(root process)可以轻松地退出chroot。它从未考虑实现安全机制。FreeBSD Jail于2000年在FreeBSD OS中引入,旨在为简单的Chroot文件隔离带来更多安全性。与Chroot不同,FreeBSD还实现了将进程及其活动隔离到文件系统的特定视图中。 
640?wx_fmt=gif A Chroot Jail. 来源:https://linuxhill.wordpress.com/2014/08/09/014-setting-up-a-chroot-jail-in-crunchbang-11debian-wheezy
当Linux内核具有操作系统级的虚拟化的功能以后,Linux VServer于2001年被推出,它使用了类似chroot的机制与“安全上下文”(“security context”)以及操作系统虚拟化(容器化)相结合来提供虚拟化解决方案。它比简单的chroot更先进,允许您在单个Linux发行版(VPS)上运行多个Linux发行版。 
640?wx_fmt=png
2004年2月,Oracle发布了Oracle Solaris Containers,这是一个用于X86和SPARC处理器的Linux-Vserver版本。
SPARC是由Sun Microsystems开发的RISC(精简指令集计算)架构。
Solaris Container是由系统资源控制和“区域”(zone)提供的边界隔离组合而成。 
640?wx_fmt=png
Oracle Solaris 11.3 与Solaris Containers类似,OpenVZ的第一个版本于2005年推出。OpenVZ与Linux-VServer一样,使用操作系统级虚拟化,许多托管公司采用它来隔离和销售VPS。操作系统级虚拟化有一些限制,因为容器共享相同的体系结构和内核版本,当客户需要不同于主机的内核版本的情况下这种缺点就会显现出来。
Linux-VServer和OpenVZ需要为内核打补丁以添加一些用于创建隔离容器的控制机制。 OpenVZ的补丁未集成到内核中。 
640?wx_fmt=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
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
Jails,虚拟专用服务器(VPS),区域(Zones),容器和VM

640?wx_fmt=png


使用Jails,Zones,VPS,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://fntlnz.wtf/post/why-containers
系统容器(例如LXC)提供的环境非常接近您从虚拟机获得的环境,与此同时又省去了运行单独内核和模拟所有硬件所带来的开销。 
640?wx_fmt=png VM与容器。来源:Docker博客
操作系统容器与应用容器
操作系统级虚拟化有助于我们创建容器。LXC和Docker等技术使用这种隔离方式。我们这里有两种类型的容器:
  • OS容器会打包整个应用程序栈的操作系统【示例LEMP技术栈,LEMP是指一组一起使用来运行动态网站或者服务器的开源软件,软件名称的首字母缩写:L代表Linux,E代表Nginx(Engine X),M代表MariaDB或MySQL,P代表PHP】。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值