Linux容器LXC(Linux Container)

概述

LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与传统虚拟化技术相比,它的优势在于:

  • 与宿主机使用同一个内核,性能损耗小;
  • 不需要指令级模拟;
  • 不需要即时(Just-in-time)编译;
  • 容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
  • 避免了准虚拟化和系统调用替换中的复杂性;
  • 轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。

总结:Linux Container是一种轻量级的虚拟化的手段。Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为LXC是一种操作系统层次上的资源的虚拟化。

——摘自百度百科

容器和虚拟机的区别

从应用上看,容器和虚拟机都是为了给用于提供一个“独立的机器”,但是实际上用户是在同一台机器上运行操作的,只不过从一开始就进行了资源划分,各个用户之间互不干扰。两者的不同点在于实现方法的不同,虚拟机是在宿主机上面再跑一个操作系统,而最小系统就是我们说的内核,文件系统等等。而容器只是在主机内核就进行了资源的划分,如用户进程,网络,文件系统等。所有的容器都是跑在一个操作系统上。因此跟虚拟机相比,效率更高。
Linux容器LXC(Linux Container)

LXC的实现

LXC项目本身只是一个为用户提供一个用户空间的工具集,用来使用和管理LXC容器。LXC真正的实现则是靠Linux内核的相关特性,LXC项目只是对此做了整合。基于容器的虚拟化技术起源于所谓的资源容器和安全容器。

LXC在资源管理方面依赖于Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。

LXC和Docker的区别

Linux容器LXC(Linux Container)

  • Docker也是应用Linux内核底层的cgroups和namespace特性,从原理上跟LXC是一样的,但是两者的侧重点不一样。LXC偏向于通过Linux内核构造出一个虚拟机,在虚拟上实现跟宿主机的隔离,共享等。而Docker以应用为中心,侧重于通过容器实现应用的部署,和特殊的环境配置。Docker在上层构建了一个更高层次的具备多个强大功能的工具集:
  • 以应用为中心。相对于机器而言,Docker被用于优化应用的部署过程。这可以从它的API、UI、设计理念还有文档里得到体现。反之,lxc的辅助脚本专注在把容器作为一个轻量级的机器使用 —— 基本上就是一堆启动更快并且内存需求更小的服务器。我们认为容器技术的内容远远不止这些。
  • 自动构建。Docker为开发人员引入了一个可以用来把他们的源代码自动打包到容器里的工具,并且他们能够对于应用的依赖,构建工具,打包服务等有着完全的自主掌控能力。他们能够*的使用make、Maven、Chef、Puppet、salt、debian包、RPM包,源码包,或者任意以上的结合,而无需关心机器本身的配置。
    版本化。Docker引入了一个类似git的特性来完成一个容器的连续版本追踪,版本之间的差异diff,新的版本的提交,回滚等。历史记录信息里也包含了容器的用户信息以及他是如何构建它的,因此生产环境的服务器你都有充足的手段去一步步的定位到最上游的开发人员。Docker也实现了一个增量上传和下载功能,类似于git pull,所以更换到新版本的容器只需要传输增量部分就行。
  • 组件的重用。任意容器都能用作“基础镜像”来创建更特定的组件。这可以手工完成也可以做成自动构建的一部分。例如,你可以准备一个理想的Python环境,并且把它用作10个不同的应用的基础镜像。你所定义的标准PostgreSQL设置可以被将来你手上的所有项目重用。诸如此类。
  • 共享。Docker 有权访问一个公共的注册中心而这里有数以千计的业界人士上传各种各样有价值的容器:任一从Redis、Couchdb、Postgres到irc bouncers再到Rails应用服务器,Hadoop甚至是多个发行版本的基础镜像。该注册中心也包含了一个官方的“标准库”,这里提供了一些由Docker官方团队维护的实用容器。注册中心本身也是开源的,所以任何人都能部署他们自己的私有注册中心来存储和下发私有容器,例如用于内网服务器的部署。
  • 工具生态圈。Docker定义了一个API来自动化和个性化的创建和部署容器。也因此催生了众多的工具集成到Docker,为之提供一些扩展特性。类PaaS的部署(Dokku、Deis、Flynn),多节点编排(Maestro、Salt、Mesos、OpenStack Nova),管理看板(Docker-UI、OpenStack Horizon、Shipyard),配置管理(Chef、Puppet),持续集成(Jenkins、Strider、Travis)等等。Docker正在迅速的建立以它本身为标准的基于容器的工具生态圈。