购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 Docker和虚拟机

我们先来看一个简单的图,如图1-8所示,容器是一个应用层抽象,用于将代码和依赖资源打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行。与虚拟机相比,容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动。

图1-8

虚拟机(VM)则是一个物理硬件层抽象,用于将一台服务器变成多台服务器。管理程序允许多个VM在一台机器上运行。每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间,启动也十分缓慢。

其区别主要如图1-9所示。

图1-9

我们再来看一下对比图,如图1-10所示,由于容器所需的资源要少得多(例如,它们不需要一个完整的OS),因此它们易于部署且可快速启动。这使你能够具有更高的密度,也就是说,这允许你在同一硬件单元上运行更多服务,从而降低了成本。

图1-10

在同一内核上运行的副作用是,你获得的隔离比VM要少。

镜像的主要目标是使环境(依赖项)在不同的部署中保持不变。也就是说,可以在计算机上调试它,然后将其部署到保证具有相同环境的另一台计算机上。

借助容器镜像,可打包应用或服务并采用可靠且可重现的方式对其进行部署。可以说Docker不只是一种技术,还是一种原理和过程。

在使用Docker之前,我们经常会听到,“这个问题在开发环境是正常的”。而在使用Docker后,你不会听到开发人员说:“为什么它能在我的计算机上使用却不能用在生产中?”开发人员只需说“它在Docker上运行”,因为打包的Docker应用程序可在任何支持的Docker环境上执行,而且它在所有部署目标(例如,开发、QA、暂存和生产)上都能按预期运行。

刚才我们讲述了容器和虚拟机的区别,其实将容器和虚拟机配合使用,可以为应用的部署和管理提供极大的灵活性,架构如图1-11所示。

图1-11 9zdoYeWhHOBoyc8ZqHeDfhkE5M/NyNRcopusmqXtPfZGlfG6kByWmwjiK1dTAJeY

点击中间区域
呼出菜单
上一章
目录
下一章
×