专栏首页技术翻译Linux容器的发展及其未来趋势

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 条评论
登录 后参与评论

相关文章

  • 【推荐】50+有用的Docker工具

    容器生态系统比以往任何时候都增长和扩展得更快,而且有了这么多的Docker工具和服务,只要了解可用的选项,就会觉得这是一项艰巨的任务。无论你是初学者还是专家、开...

    liuxuewen
  • Scikit-Learn: 机器学习的灵丹妙药

    Scikit-Learn是python的核心机器学习包,它拥有支持基本机器学习项目所需的大部分模块。该库为从业者提供了一个统一的API(ApplicationP...

    liuxuewen
  • 人工智能将如何改变企业的决策?

    近年来,人工智能(AI)在科技领域取得了长足的进步。从挑选人们想去的餐厅开始,他们让Siri、谷歌助理、微软Cortana、AmazonAlexa等人工智能来控...

    liuxuewen
  • 使用Docker容器

    Docker是一种流行的容器化工具,用于为软件应用程序提供包含运行所需内容的文件系统。使用Docker容器可确保软件的行为方式相同,无论其部署位置如何,因为其运...

    风研雨墨
  • 久等了!Docker容器常用命令

    启动交互式容器:docker run -it --name 别名 镜像ID 来运行一个容器,取别名,交互模式运行,以及分配一个伪终端

    程序员的时光001
  • 关于容器和容器运行时的那些事

    容器,容器编排,微服务,云原生,这些无疑都是当下软件开发领域里面最热门的术语。容器技术的出现并迅速的广泛应用于软件开发的各个领域里,主要的原因是容器技术革命性的...

    yuanyi928
  • Docker入门

    我们了解到了Docker 的一些基本知识点,它的一些核心概念,Docker的使用安装等。此篇文章我们对 Docker 进行入门讲解

    用户6070864
  • docker--docker介绍

    在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化 (hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中...

    eadela
  • k8s pod无限重启 报错Back-off restarting failed container

    K8S POD无限重启 报错Back-off restarting failed container

    路过君
  • Docker入门

    上一节中,我们了解到了Docker 的一些基本知识点,它的一些核心概念,Docker的使用安装等。此篇文章我们对 Docker 进行入门讲解

    Criss@陈磊

扫码关注云+社区

领取腾讯云代金券