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年-FreeBSD Jails

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。

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

通过考虑上述事实,我们可以预测,在未来几年内,容器可能会完全取代虚拟机!

作者:云事,爱好唱歌和看电影的90后女码农一枚!个人微信公众号:云平台从0到1 。本文为作者投稿!

长按二维码 ▲

订阅「架构师小秘圈」公众号

如有启发,帮我点个在看,谢谢↓

Linux容器的发展历史及其未来趋势相关推荐

  1. Linux shedule 的发展历史.

    慢慢来吧~~ Linux V0.11 支持定时器和信号 流程图: 源码: void schedule(void) {int i,next,c;struct task_struct ** p;/* ch ...

  2. Linux的发展历史及版本简介

    Linux发展历史及常用版本介绍 由于最近一段时间的学习要基于Linux操作系统.之前在各个版本的Linux之间看的眼花缭乱,那么经过自己查阅和总结之后,对Linux的发展历史和现在目前比较流行的Li ...

  3. 容器服kubernetes_Kubernetes,标准化和安全性主导2017年Linux容器新闻

    容器服kubernetes 在2017年,无论是在Opensource.com上还是在整个IT基础架构社区中,容器都是大新闻. 在过去的一年中,以下三个主要故事情节主导了集装箱新闻: 首先是Kuber ...

  4. linux 容器_Linux容器如何演变

    linux 容器 在过去的几年中,容器不仅成为开发人员,而且也成为企业的热门话题. 这种日益增长的兴趣引起了对安全性改进和强化以及为可伸缩性和互操作性做准备的需求. 这需要大量的工程,这是在Red H ...

  5. java的发展历史 现状

    java是什么 面向对象设计的语言 特别适用于internet应用程序开发 一次编译,到处运行 可以在各种操作系统上使用 windows linux都可以 发展历史 Java 的历史要追溯到 1991 ...

  6. 兄弟连Linux在线课堂:第1讲 Linux应用与发展

    大家好,我是李明,Linux爱好者,我计划推出一套Linux学习的在线课及视频教程,课程内容主要针对Linux初学者,大概每周一讲,差不多在春节前完成Linux基础入门与系统管理部分,总计分为十讲,内 ...

  7. Linux和unix发行版本,UNIX发展历史和发行版本

    [TOC] >[success] # UNIX发展历史和发行版本 **UNIX**跟**Linux**之间的关系,用**父子**比喻更为恰当,因为学习了**Linux**以后更有助于以后学习** ...

  8. linux是发展历史,linux发展历史.doc.doc

    linux发展历史.doc Linux发展历史 "Hello everybody out there using minix--I'm doing a (free) operating sy ...

  9. 常用Linux操作系统的发展历史

    文件目录 文件权限 特权文件suid,sgid,sbit Linux操作系统 Linux发展史及简介 Linux简单介绍 Linux发展史 Linux族谱 Linux重要人物 Linux与Unix的渊 ...

最新文章

  1. php session存入redis
  2. Python_基础_5
  3. 【Linux】 Kill 批量杀死进程
  4. 大话数据结构 java源代码_大话数据结构(八)Java程序——双向链表的实现
  5. G6 图可视化引擎——核心概念——节点/边/Combo——内置节点——内置节点总览
  6. linux mysql 分区_Linux :linux磁盘分区(普通分区2T以内),安装免安装版mysql(tar.gz)...
  7. Spring Boot配置跨域访问策略
  8. 使用Python打造一款间谍程序
  9. C语言字符串处理函数
  10. AdrenoProfiler对opengles的性能分析
  11. 【易实战】Spring Cloud微服务架构12要素应用 Twelve‑Factor App
  12. 图形化VS201x工程中的项目依赖关系
  13. Python中格式化操作漂亮打印文件的读取和写入
  14. mpvue 搭配 minui
  15. 配置Oracle到MySQL透明网关
  16. Balsamiq-Mockups-Introduction.html
  17. 第七章 本源时空(补充)
  18. 博客之星2018 ,请为我投上您宝贵的一票!
  19. 【高数】高数第六章节——平面图形的面积旋转体体积平面截面体体积平面曲线的弧长定积分在物理学中的应用
  20. Can't connect to host : 由于目标计算机积极拒绝,无法连接。

热门文章

  1. 网络工程师计算机类吗,机房网络工程师 | 网络工程专业的你知道吗?
  2. 灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样!(一番分析后找到原因!)
  3. 【网络流24题】D、魔术球问题(有向无环图的最小路径覆盖、思维)
  4. 模板 - AC自动机
  5. 蓝桥杯国赛知识点汇总
  6. 修正r s分析法matlab程序,关于R/S分析程序用法
  7. 2014.09线上课堂报名帖:敏捷个人手机应用使用
  8. Android基础之Java接口
  9. 云栖大会看技术人成长之路
  10. MyEclipse内安装与使用SVN