1.轻便
首先,docker映像通常比VM映像小,因此易于构建、复制和共享。
其次,Docker容器可以在几毫秒内启动,而VM可以在几秒钟内启动。
2.分层文件系统
这是Docker的另一个关键特性。图像有层,不同的图像可以共享层,使其更节省空间,构建速度更快。
如果所有容器都使用Ubuntu作为基础图像,那么不是每个图像都有自己的文件系统,而是共享相同的Ubuntu下划线文件,只是在各自的应用程序数据中有所不同。
3.共享操作系统内核
把容器想象成过程!
主机上运行的所有容器实际上是一组具有不同文件系统的进程。它们共享相同的操作系统内核,只封装了系统库和依赖项。
这在大多数情况下都很好(没有额外的OS内核维护),但如果容器之间需要严格隔离,则可能会出现问题。
为什么重要?
所有这些似乎都是进步,而不是革命。好
量的积累导致质的转变
.
考虑一下应用程序部署。如果我们想要部署一个新的软件(服务)或升级一个,最好是更改配置文件和进程,而不是创建一个新的VM。因为使用更新的服务创建虚拟机、测试它(开发人员和质量保证人员共享),部署到生产环境需要数小时甚至数天。如果出了什么问题,你必须重新开始,浪费更多的时间。因此,使用配置管理工具(puppet、saltstack、chef等)安装新软件,下载新文件是首选。
对于docker,不可能使用新创建的docker容器替换旧容器。维护更容易!构建一个新映像,与QA共享,测试它,部署它只需要几分钟(如果一切都是自动化的),在最坏的情况下需要几个小时。这叫做
不变的基础设施
:不要维护(升级)软件,而是创建一个新的。
它改变了服务的交付方式。我们需要应用程序,但必须维护虚拟机(这是一件痛苦的事情,与我们的应用程序几乎没有关系)。Docker让你专注于应用程序并平滑一切。