Linux容器的发展及其未来趋势

Linux容器是操作系统级虚拟化在单个Linux主机上提供多个独立Linux环境的技术。与虚拟机(VM)不同,容器不运行专用客户操作系统。相反,他们共享主机操作系统内核,并利用客户操作系统库提供所需的操作系统功能。由于没有专用操作系统,容器的启动速度比VM快得多。

容器使用Linux内核特性,例如名称空间、Apparmor、SELinux概要文件、chroot和CGroups来提供类似VM的隔离环境。Linux安全模块保证从容器访问主机和内核的权限得到适当管理,以避免任何入侵活动。此外,如果容器可以在相同的CPU体系结构上运行,则容器可以从其主机操作系统运行不同的Linux发行版。

一般来说,容器提供了基于各种Linux发行版创建容器映像的方法、用于管理容器生命周期的API、用于与API交互的客户端工具、获取快照的特性、将容器实例从一个容器主机迁移到另一个容器主机等。

容器历史

以下是从维基百科和其他来源提取的容器历史的简短摘要:

1979年-chroot

容器的概念早在1979年就开始使用UNIX chroot。这是一个UNIX操作系统系统调用,用于更改进程的根目录,并将其作为子文件到文件系统中的新位置,该位置仅对给定进程可见。此功能的想法是为每个进程提供隔离的磁盘空间。 1982年晚些时候,这被添加到BSD。

2000年-FreeBSDJails

FreeBSD Jails是由Derrick T. Woolworth在2000年为R&D Associates for FreeBSD推出的早期容器技术之一。它是一个类似于chroot操作系统的系统调用,包括用于隔离文件系统、用户、网络的其他进程沙盒功能。因此,它可以为每个Jails、自定义软件安装和配置等提供分配IP地址的方法。

2001年-Linux VServer

Linux VServer是另一种jail机制,可用于安全地分区计算机系统上的资源(文件系统,CPU时间,网络地址和内存)。每个分区称为安全上下文,其中的虚拟化系统称为虚拟专用服务器。

2004年-Solaris容器

Solaris Containers是针对x86和SPARC系统推出的,首次于2004年2月在Solaris 10的build 51 beta版中公开发布,随后在Solaris 10,2005的第一个完整版本中发布。Solaris Container是系统资源控制和边界的组合区域提供的分离。区域在单个操作系统实例中充当完全隔离的虚拟服务器。

2005年-OpenVZ

OpenVZ与Solaris Containers类似,并使用修补的Linux内核来提供虚拟化,隔离,资源管理和检查点。每个OpenVZ容器都有一个独立的文件系统,用户和用户组,进程树,网络,设备和IPC对象。

2006年-流程容器

Process Containers于2006年在Google实施,用于限制、统计和隔离进程集合的资源使用(CPU、内存、磁盘I/O、网络等)。后来,它被重命名为控制组,以避免Linux内核上下文中“容器”一词的多重含义混淆,并合并到Linux内核2.6.24中。这显示了谷歌在集装箱技术上的早期参与,以及他们是如何做出贡献的。

2007年-控制组

如前所述,控制组AKA cgroup是由Google实现的,并于2007年添加到Linux内核中。

2008年-LXC

LXC代表Linux容器,它是Linux容器管理器的第一个、最完整的实现。它是使用cgroup和Linux名称空间实现的。LXC是在liblxc库中交付的,并为Python 3、Python 2、Lua、Go、Ruby和Haskell中的API提供了语言绑定。与其他容器技术不同,LXC在Vanila Linux内核上工作,不需要任何补丁。今天LXC项目由佳能有限公司赞助并在此托管。

2011年-守望者

Warden在2011年由CloudFoundry实施,在初始阶段使用LXC,后来又用自己的实现取而代之。与LXC不同,Warden并没有与Linux紧密结合。相反,它可以在任何可以提供隔离环境的操作系统上工作。它作为守护程序运行,并提供用于管理容器的API。

2013-lmctfy

lmctfy是Google容器堆栈的开源版本,提供Linux应用程序容器。谷歌启动了这个项目的目的是提供有保证的性能,高资源利用率,共享资源,过度承诺以及容器的近零开销。今天Kubernetes使用的cAdvisor工具是由lmctfy项目启动的。 lmctfy的最初版本于2013年10月发布,2015年,Google决定向libcontainer提供核心lmctfy概念和抽象。结果现在LMCTFY没有进行积极的开发。

libcontainer项目最初由Docker启动,现在已经转移到Open Container Foundation。

2013年-Docker

截至2016年1月,Docker是最受欢迎和最广泛使用的容器管理系统。它是作为一个名为dotCloud的平台即服务公司的内部项目开发的,后来改名为Docker。与Warden类似,Docker在初始阶段也使用了LXC,后来用它自己的libcontainer库替换了LXC。与任何其他容器平台不同,Docker引入了用于管理容器的整个生态系统。这包括一个高效的分层容器映像模型,一个全局和本地容器注册表,一个干净的REST API,一个CLI等。在稍后阶段,Docker还主动实现了一个名为Docker Swarm的容器集群管理解决方案。

2014-Rocket

Rocket是一个与Docker非常相似的项目,用于修复他们在Docker中发现的一些缺陷。CoreOS提到,他们的目标是提供比Docker更严格的安全和生产要求。更重要的是,它是在AppContainer规范上实现的,是一个更加开放的标准。除了Rocket,CoreOS还开发了Docker和Kubernetes使用的其他几种与集装箱有关的产品。

2016-Windows容器

微软还主动在2015年为基于Windows的应用程序(称为Windows容器)向Microsoft Windows Server操作系统添加容器支持。这将与Microsoft Windows Server 2016一起发布。通过这种实现,Docker可以在Windows上本地运行Docker容器,而无需运行虚拟机来运行Docker(早期的Docker使用Linux VM在Windows上运行)。

容器的未来

截至今天,业界有一个重要的趋势,即从VM迁移到容器以部署软件应用程序。其主要原因是与VM相比,容器提供的灵活性和低成本。谷歌多年来一直使用容器技术与Borg和Omega容器集群管理平台大规模运行Google应用程序。更重要的是,Google通过实施cgroup和参与libcontainer项目为容器空间做出了贡献。在过去几年中,Google可能已经在使用容器的性能,资源利用率和整体效率方面获得了巨大的收益。最近,微软没有在Windows平台上进行操作系统级虚拟化,立即采取措施在Windows Server上实现对容器的本机支持。

在生产环境中,Docker、Rocket和其他容器平台不能在单个主机上运行,原因是它们暴露于单个故障点。当一个容器集合在单个主机上运行时,如果主机失败,在该主机上运行的所有容器也将失败。为了避免这种情况,需要使用容器主机集群。解决这个问题的第一个最开放源码的容器集群管理平台之一是Apache Mesos。它最初是作为一个研究项目在加州大学伯克利分校开发的,后来在2012年左右转移到了阿帕奇(Apache)。Google采取了类似的步骤来实现一个先进的、开放源码的容器集群管理系统,名为Kubernetes。Docker还启动了一个名为Docker Swarm的解决方案。今天,这些解决方案还处于非常早期的阶段,可能需要几个月才能完成全部功能集,并在生产环境中广泛应用。

微型服务是另一项突破性的技术,而不是一种使用容器进行部署的软件体系结构。微服务是一个Web服务的轻量级实现,与标准Web服务相比,它的启动速度非常快。这是通过在一个服务中打包一个功能单元并将其嵌入到一个轻量级的Web服务器二进制文件中来实现的。

通过考虑上述事实,我们可以预测,在未来几年内,容器可能会占用虚拟机,有时可能会完全取代它们。去年,我与一些企业合作,在POC层面实施基于容器的解决方案。很少有人想接受挑战并将其投入生产。随着容器集群管理系统变得更加成熟,这可能会很快发生变化。

原文标题《The Evolution of Linux Containers and Their Future》

作者:Imesh Gunaratne

译者:lemon

不代表云加社区观点,更多详情请查看原文链接

原文链接:https://dzone.com/articles/evolution-of-linux-containers-future

原文作者:Imesh Gunaratne

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始的linux

初识docker

docker使用go语言开发,基于apache2.0协议 容器虚拟化 ? 传统虚拟化 ? Docker的优势 启动非常快,秒级实现 资源利用率很高,一台机器可以...

3725
来自专栏点点滴滴

关于Windows系统安装(一)

1146
来自专栏BestSDK

Kubernetes发布1.10版本:开发者可自己定义API

Container存储介面(Container Storage Interface,CSI)能让使用者像安装Pod一样,轻松安装Volume插件,而这使得第三方...

42111
来自专栏技术翻译

考虑将Docker引入您的数据科学工作流程

作为数据科学家的一个重要问题是正确配置数据科学环境。有时这意味着安装了很多软件包,等待软件包编译,处理模糊的错误,设置一切正常工作......大多数时候,这是一...

850
来自专栏北京马哥教育

高中生也能读懂的Docker入门教程

Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注。如果你关注最新的技术发展,那么你一定听说过 Docker。不管...

3847
来自专栏云计算爱好者

简单介绍Docker的架构特性与局限

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是...

2506
来自专栏大魏分享(微信公众号:david-share)

原生KVM虚拟化方案"管理平台"配置步骤(RHV-M Appliance)

浅谈2016年的虚拟化市场 本文正式开始之前,先阐述一个观点,即RHV/RHEV是基于KVM原生的虚拟化解决方案, 为什么这么说呢? 首先,KVM严格意义上讲不...

4064
来自专栏云计算与大数据

阅读:美团容器平台架构及容器技术实践

原文地址:https://note.youdao.com/share/?id=08d7c57b04dda159c53155b00cbbe5cb&type=not...

16711
来自专栏非著名程序员

Android NFC 技术解析,附 Demo 源码

近期由于项目需求,对 Android NFC 技术进行了一定的了解和深入,整合了一些网络、书籍资料,此文章仅作为自己的学习笔记。 NFC 是 Near Fiel...

3437
来自专栏SDNLAB

新型云基础设施项目Airship 介绍

AT&T正在与SK电信(SKT),Intel和OpenStack基金会合作推出一个名为Airship的新型云开放基础设施项目。Airship的宣传语是“声明式地...

1712

扫码关注云+社区