我喜欢
Ken Cochrane's answer
.
但我想补充一点,这里没有详细介绍。在我看来,Docker在整个过程中也有所不同。与VMs相比,Docker不仅(仅)关注硬件的最佳资源共享,而且还提供了一个打包应用程序的“系统”(作为一组微服务更好,但不是必须的)。
对我来说,这正好符合rpm等面向开发人员的工具之间的差距,
Debian
包装,
Maven
,一边是npm+Git,一边是ops工具,比如
Puppet
,VMware,Xen,随便你怎么说。。。
为什么将软件部署到docker映像(如果这是正确的术语)比简单地部署到一致的生产环境更容易?
你的问题假设生产环境是一致的。
但如何保持一致性呢?
考虑一些数量((10))的服务器和应用程序,流水线中的阶段。
为了保持同步,你可以开始使用木偶之类的东西,
Chef
或者您自己的配置脚本、未发布的规则和/或大量文档。。。理论上,服务器可以无限期地运行,并保持完全一致和最新。Practice无法完全管理服务器的配置,因此存在很大的配置漂移和对正在运行的服务器进行意外更改的空间。
因此,有一种已知的模式可以避免这种情况,即所谓的
immutable server
.但不可变的服务器模式并不受欢迎。主要是因为Docker之前使用的虚拟机的局限性。处理几GB的大图像,移动这些大图像,只是为了改变应用程序中的一些字段,这是非常费力的。可以理解。。。
有了Docker生态系统,你将永远不需要在“小变化”(感谢aufs和Registry)上移动大约千兆字节,也不需要担心在运行时将应用程序打包到Docker容器中会损失性能。你不必担心图像的版本。
最后,您甚至可以在Linux笔记本电脑上重现复杂的生产环境(如果在您的情况下不起作用,请不要打电话给我;)
当然,您可以在VMs中启动Docker容器(这是个好主意)。减少虚拟机级别的服务器资源调配。所有这些都可以由Docker管理。
与此同时,Docker使用自己的实现“libcontainer”而不是LXC。但LXC仍然可用。