如果您看一下Docker的功能,大多数功能已经由LXC提供。
那么Docker添加了什么呢?为什么要在普通LXC上使用Docker?
从Docker FAQ中:
Docker不能替代lxc。“ lxc”是指linux内核(特别是名称空间和控制组)的功能,这些功能允许彼此进行沙盒处理并控制其资源分配。
在此低级内核功能基础之上,Docker提供了具有多种强大功能的高级工具:
跨机器的可移植部署。 Docker定义了一种格式,用于将应用程序及其所有依赖项捆绑到一个对象中,该对象可以转移到任何启用了docker的计算机上,并在此处执行,并确保暴露给该应用程序的执行环境相同。Lxc实现了流程沙箱,这是便携式部署的重要先决条件,但仅此还不足以实现便携式部署。如果您将安装在自定义lxc配置中的应用程序的副本发送给我,几乎可以肯定它不会像在您的计算机上那样在我的计算机上运行,因为它与计算机的特定配置(网络,存储,日志记录,发行版,等等。Docker为这些机器特定的设置定义了一个抽象,以便完全相同的Docker容器可以在许多不同的机器上运行-不变-
以应用程序为中心。 相对于机器,Docker针对 应用程序 的部署进行了优化。这反映在其API,用户界面,设计理念和文档中。相比之下,lxc帮助程序脚本将容器作为轻量级机器集中在容器上-基本上是服务器启动速度更快,所需内存更少。我们认为容器不仅限于此。
自动构建 。Docker提供了一个工具,供开发人员从其源代码自动组装容器,完全控制应用程序依赖项,构建工具,打包等。他们可以免费使用make,maven,chef,puppet,salt,debian软件包,rpm,源代码tarball或以上各项的任意组合, 而与机器的配置无关 。
版本控制。 多克尔包括混帐样的能力来跟踪集装箱的后续版本,检查版本之间的差异,提交新版本,回滚等历史还包括 如何 容器组装以及由谁,让你获得从生产服务器的完全可追溯一直回到上游开发人员。Docker还实现了增量上传和下载,类似于“ git pull”,因此只能通过发送差异来传输容器的新版本。
组件重复使用。 任何容器都可以用作“基础映像”以创建更多专用组件。这可以手动完成,也可以作为自动构建的一部分来完成。例如,您可以准备理想的python环境,并将其用作10个不同应用程序的基础。您理想的postgresql设置可以在将来的所有项目中重复使用。等等。
分享。 Docker可以访问公共注册表(https://registry.hub.docker.com/),其中成千上万的人上载了有用的容器:从redis,couchdb,postgres到irc bouncers到rails app服务器再到hadoop到基础映像的任何内容各种发行版。该注册表还包括由Docker团队维护的有用容器的官方“标准库”。注册表本身是开源的,因此任何人都可以部署自己的注册表来存储和传输私有容器,例如用于内部服务器部署。
工具生态系统。 Docker定义了一个API,用于自动和自定义容器的创建和部署。有大量工具与docker集成以扩展其功能。类似于PaaS的部署(Dokku,Deis,Flynn),多节点编排(大师,盐,mesos,openstack nova),管理仪表板(docker-ui,openstack Horizon,造船厂),配置管理(chef,puppet),持续集成(jenkins,strider,travis)等。Docker正在迅速将自己确立为基于容器的工具的标准。
我希望这有帮助!