这篇文章从两个部分来探讨LXC,LXC和Docker的容器托管,以及轻便的容器技术将取代虚拟技术的可能性。sql
LXC有可能会改变咱们如何运行和缩放应用程序。Dr.Rami Rosen 作过一个很棒的演示文稿,是关于LXC的前世此生,其中还不乏有趣的观点和内容。docker
容器技术独立运行而且从主机系统上封装应用程序工做量。把容器想象成能够安装和运行应用程序的主机操做系统里面的操做系统,从实用目的来说,它就像一个虚拟机。shell
LXC项目给不一样配置和用户空间应用提供最小的容器操做样原本管理容器生命周期, LXC项目的这个特性和Linux内核使模仿机制可以正常启用。数据库
容器技术将应用从主机操做系统上解耦下来,摘录该程序而且使之在任意支持LXC的系统上都实现轻便化。低调的说法就是:很是好用。用户在这样一个原始和最小库的Linux操做系统上能够在容器里运行任何程序(就像是在容器里运行LAMP堆栈)。安全
由于应用程序和工做量是相对独立的,因此用户能够运行多版本的语言,好比PHP,Python,Ruby,Apache,这些语言均可以共存,隐藏在容器里。实现云计算,就比如是这些例子和工做量均可以灵活的被移动到别的系统,复制,以及快速配置。bash
不不不,虚拟技术也能够作到,可是会有必定程度的性能损失,灵活度也会降低。容器技术不是模仿硬件层次,而是在Linux内核里使用cgroup和namespaces来打造轻便的、将近裸机速度的虚拟技术操做系统环境。由于不是虚拟化存储,因此容器技术不会管底层存储或者文件系统,而是你放哪里,它操做哪里。网络
这从根本上改变了咱们如何虚拟化工做负载和应用程序,由于容器速度比硬件虚拟化技术更快,更加便捷,弹性扩容的更加高效,只是它的工做负载要求操做系统,而不是Linux或特定的Linux内核版本。架构
没那么快!虚拟技术相对成熟,又有普遍的工具,还有生态系统来支持它在不一样环境下的配置。至于工做负载,它要求非Linux操做系统,或者只能使用特定的核心虚拟化技术。app
LXC起源于cgroup和namespaces在Linux内核方面的发展,它支持轻便的虚拟技术操做系统环境(容器技术),Daniel Lezcano和Serge Hallyn作了一些它的早期工做,这个能够追溯到2009年在IBM的时候。LXC系统提供工具来管理容器,先进的网络和存储支持,还有最小容器操做系统模板的普遍选择。它目前由一个两人的团队领导:来自Ubuntu的Stephane Graber和Serge Hallyn。LXC是由Ubuntu支持的。ssh
生产Docker的目的是为了尽量减小容器中运营的程序,减小到只运营单个程序,而且经过Docker来管理这个程序。有了Docker,能够从底层应用程序经过Docker来配置,网络,存储和编排。LXC用正常操做系统环境回避那个问题,而且所以能够快速兼容全部应用程序和工具,以及任意管理和编制层次,来替代虚拟机。除此以外,Docker使用层次,禁用存储持久性。LXC支持AUFS层次和覆盖,对COW克隆和用brtfs、ZFS、LVM Thin快照普遍支持,而且将选择留给用户。LXC容器技术里的分散存储是绑定安装的,来为用户达到主机或者另外一个容器。Docker和LXC都设置了一个默认的NAT网络。另外,Docker设置一个端口转发到主机上,就会有一个-p标记,好比“-p80:80”就是80从主机转发到容器。有NAT,本地主机就能够直接经过IP访问容器,外部服务须要的时候能够经过IPtable规则来简单完成,当外部服务被消耗的时候,只须要端口转发就能够。至于为何须要这么作,缘由目前还不是很明确。要把事项复合起来,Docker只给了不多的IP和主机文件控制权,因此不能给容器设置静态IP,这对于IP的分配任务来讲有点让人疑惑。咱们须要使用“--Links”标记来链接容器,这个容器中要在被链接的容器中加一个入口在/etc/主机上。有了LXC,分配静态IP,动态IP,使用多网络设备就简单多了,可使用/etc/hosts文件,基本上使用Linux网络全栈是没有限制的。您但愿在主机上链接容器吗?用户使用GRE,L2TPV3或者VXLAN来快速设置层次,或者是任意的在使用的网络技术。LXC容器技术能够无缝运行虚拟机运行的一切。
Docker是dotcloud也就是如今的Docker公司在2013年3月发布的,一开始是基于LXC项目来建立单个应用程序容器。Docker如今已经开发了他们本身的直接使用核心namespaces和cgroup的工具:lib container。
Docker最开始是基于LXC对Aufs的支持来创建分层容器,由于Aufs可能没法被合并到核心中,因此如今对Brtfs、设备映射和覆盖也添加支持,Docker容器技术是由基底镜像构成,当提交变成Docker镜像的时候会再加上一个分层面板。当运行一个镜像的时候,它的复本就做为容器被启动了,在提交以前,它的任何数据都只是暂时的。每个提交都是一个独立的镜像,因此能够从镜像开始。咱们在《如何用LXC覆盖》里有一个指导说明,它给用户描述了分层结构是如何工做的。有了像Aufs或者覆盖(他们在实施上、性能上有区别,并且支持必定数量的低一点的层次)这样的文件系统的联合,较低一点的层次是只读的,而较高一点的层次是在运行的时候是可读可写的。在容器内容中一般是基底操做系统,可是也不是很必要,而上层的图层面板则是由你来修改。虽然图层面板的想法听起来很不错,可是分层文件系统在技术上仍然是不成熟的,在使用图层面板的时候,还有有一个固有的复杂性和性能的损失。《陷入图层面板》是一个真实的冒险实例,你们不妨看看。
Docker将容器技术限制到只能运行单个进程。Docker的底层镜像操做系统模版不是为运行多个应用程序,进程设计,也不是为像init,cron,syslog,ssh等服务而设计。咱们来看早期的东西,它介绍了日复一日的用户场景有必定的复杂性。由于目前的架构,应用程序和服务是为正常的多程序操做系统环境设计的,因此须要去寻找一种以Docker的方式来工做或使用工具来支持Docker。拿一个简单的应用程序举个例子,好比WordPress。你可能须要创建3个容器来互相消耗服务。PHP容器,Nginx容器和MySQL容器加上2个分别用来放MysqlDB和WordPress文件持久性数据的容器。而后经过适当的权限将WordPress文件安装成PHP-FPM和Nginx两种语言均可用,而后为了把东西弄得更加让人兴奋,找出一种可以让容器在本地网络上能够互相交流的方法,不须要对网络不定时的控制,也不须要Docker后台程序设置IP!可是咱们尚未计算WordPress帐户管理的cron和Email。哎!为了在Docker里运行多个程序,你须要shell 脚本,或者是一个分开的程序管理,好比runit或者管理器。可是Docker生态系统会将之视为“反模式“,并且Docker的整个架构是创建在运行单个程序的容器上的。
Docker为用户提供公共或者我的push和pull镜像的数据库。这个跟Flockport app Store为用户使用容器作好准备有点类似。这样作,对用户来讲,分享和分布应用程序就很简单了。
Dockerfile是一个告诉Docker如何从镜像用特定的应用程序来建立容器的脚本。跟使用特定的安装好的应用程序经过bash脚原本建立一个LXC容器类似。
LXC的特色须要经过Docker团队来重载实现,使之在Docker中可用,好比LXC如今支持让非根用户建立和配置容器的未经受权容器,LXC如今还致力于实时迁移和多主机管理。这些对容器来讲都是很大的进步,也为更好的安全性,多租户工做量以及虚拟平价铺平了道路。Docker还不支持这些。随运行容器的方法没有对错之分,容器怎么用主要取决于用户,docker方法是独特的,并且还将在每一个阶段自定义途径成为必须途径,并以此来找到Docker的方法从安装和运行应用程序来完成任务,完成弹性扩容。
虚拟技术经过操做系统和应用程序被冻结在一个状态,使云计算成为可能,并将之转化为能够从硬件和操做系统上轻易转移。操做系统添加了不少:速度,灵活性以及可移动性,扩大了潜在价值。Docker擅长用dockerfile和提交将容器和覆盖文件系统包装到一个友好的开发者模型中。只有当你在一台单独的笔记本上操做的时候,像托管,监视,存储和网络这样的弹性扩容问题才会让这个模型复杂脆弱。另外一方面,操做系统容器在操做系统性能上跟虚拟机的类似,这使得运用目前的工具,来集成到正常和分布式系统更加简单,不须要开发任何单独的工具。Docker公司受到风投支持,积极投入市场。众多用户在Docker的内容中据说到容器技术,可是并不清楚操做系统容器技术以及本身所熟悉使用的。能够看到,用户单纯但愿运行容器,就好像运行一个轻量级的虚拟机同样,他们拼命的想作到运用单个应用程序的容器技术,分层结构和持久存储。若是将工做量从虚拟机转移须要额外的工程工做量,那么不少大规模用户和企业根本不会考虑,并且转移以后,将跟他们其余基础设施的网络,存储和托管都不兼容。LXC就是这样得到认可的,不是执拗己见,它有容器技术全部平行计算的优势——从虚拟机无缝过渡到LXC,而不须要架构师从新架构,这真是一个难以想象的价值主张。
(若是须要转载,请联系咱们哦,尊重知识产权人人有责)