看似docker主要的OS级虚拟化操做是借助LXC, AUFS只是锦上添花。那么确定会有人好奇docker到底比LXC多了些什么。无心中发现 stackoverflow 上正好有人问这个问题,python
除了内核特性的底层基础以外,Docker还提供了一个具备如下强大功能的高级工具:git
跨机器的便携式部署。 Docker定义了一种将应用程序及其全部依赖绑定到一个单独对象中的格式,该对象能够被传输到任何启用docker的机器上,并在那里执行,保证暴露给应用程序的执行环境是相同的。 Lxc实现了流程沙盒,这是便携式部署的重要先决条件,但单靠这一点对于便携式部署来讲是不够的。若是您向我发送了一个安装在自定义lxc配置中的应用程序的副本,那么它几乎确定不会像咱们的机器那样在您的机器上运行,由于它与您计算机的特定配置有关:网络,存储,日志记录,发行版,等等。Docker为这些特定于机器的设置定义了一个抽象,以便彻底相同的docker容器能够在许多不一样的机器上运行 - 不变 - 具备许多不一样的配置。redis
以应用为中心。 Docker针对应用程序的部署进行了优化,而不是机器。这反映在其API,用户界面,设计理念和文档。相比之下,lxc助手脚本将容器做为轻量级的机器 - 基本上是启动速度更快,内存更少的服务器。咱们认为容器不止于此。
自动构建。 Docker包含一个工具,供开发人员自动从源代码中组装一个容器,彻底控制应用程序的依赖关系,构建工具,打包等。他们能够自由使用make,maven,chef,puppet,salt,debian包,rpms,source tarballs,或上述的任何组合,而无论机器的配置如何。sql
版本。Docker包括用于跟踪容器的连续版本,检查版本之间的差别,提交新版本,回滚等相似git的功能。历史记录还包括如何组装一个容器以及由谁来完成,所以您能够从生产服务器一路回到上游开发商。 Docker也实现增量上传和下载,相似于“git pull”,因此新版本的容器只能经过发送差别来传输。docker
组件重用。任何容器均可以用做“基础图像”来建立更专业的组件。这能够手动完成或做为自动构建的一部分。例如,您能够准备理想的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正在迅速将本身定位为基于容器的工具的标准。maven