docker到底比LXC多了些什么
看似docker主要的OS级虚拟化操作是借助LXC, AUFS只是锦上添花。那么肯定会有人好奇docker到底比LXC多了些什么。无意中发现 stackoverflow 上正好有人问这个问题,
除了内核特性的底层基础之外,Docker还提供了一个具有以下强大功能的高级工具:
跨机器的便携式部署。 Docker定义了一种将应用程序及其所有依赖绑定到一个单独对象中的格式,该对象可以被传输到任何启用docker的机器上,并在那里执行,保证暴露给应用程序的执行环境是相同的。 Lxc实现了流程沙盒,这是便携式部署的重要先决条件,但单靠这一点对于便携式部署来说是不够的。如果您向我发送了一个安装在自定义lxc配置中的应用程序的副本,那么它几乎肯定不会像我们的机器那样在您的机器上运行,因为它与您计算机的特定配置有关:网络,存储,日志记录,发行版,等等。Docker为这些特定于机器的设置定义了一个抽象,以便完全相同的docker容器可以在许多不同的机器上运行 - 不变 - 具有许多不同的配置。
以应用为中心。 Docker针对应用程序的部署进行了优化,而不是机器。这反映在其API,用户界面,设计理念和文档。相比之下,lxc助手脚本将容器作为轻量级的机器 - 基本上是启动速度更快,内存更少的服务器。我们认为容器不止于此。
自动构建。 Docker包含一个工具,供开发人员自动从源代码中组装一个容器,完全控制应用程序的依赖关系,构建工具,打包等。他们可以自由使用make,maven,chef,puppet,salt,debian包,rpms,source tarballs,或上述的任何组合,而不管机器的配置如何。
版本。Docker包括用于跟踪容器的连续版本,检查版本之间的差异,提交新版本,回滚等类似git的功能。历史记录还包括如何组装一个容器以及由谁来完成,因此您可以从生产服务器一路回到上游开发商。 Docker也实现增量上传和下载,类似于“git pull”,所以新版本的容器只能通过发送差异来传输。
组件重用。任何容器都可以用作“基础图像”来创建更专业的组件。这可以手动完成或作为自动构建的一部分。例如,您可以准备理想的python环境,并将其用作10个不同应用程序的基础。您理想的postgresql设置可以重新用于您所有的未来项目。等等。
共享。 Docker可以访问一个公共注册表(http://index.docker.io),成千上万的用户上传了有用的容器:从redis,couchdb,postgres到irc保险箱到rails应用服务器,以便为各种发行版本创建基础映像。登记处还包括由码头工作组维护的有用容器的官方“标准库”。注册表本身是开源的,所以任何人都可以部署他们自己的注册表来存储和传输私有容器,例如用于内部服务器部署。
工具生态系统Docker定义了一个用于自动化和自定义容器的创建和部署的API。有大量的工具与docker集成来扩展其功能。 (Dokku,Deis,Flynn),多节点编排(maestro,salt,mesos,openstack nova),管理仪表板(docker-ui,OpenStack Horizon,造船厂),配置管理(厨师,puppet),持续集成(jenkins,strider,travis)等。Docker正在迅速将自己定位为基于容器的工具的标准。