你的理解一部分是对的。
首先确定一点,进程运行要依赖操作系统。如果你用虚拟机隔离进程的话,不同虚拟机之间操作系统这部分资源是没法共享的。所以你运行多个虚拟机的话,实际上相当于多个被虚拟的操作系统同时在运行。按照虚拟机类型的不同,这部分虚拟化的操作系统有可能直接运行在硬件上(比如于 Hyper V 或者 KVM ),也有可能下面还有一层宿主机的操作系统(很多虚拟机可以切换到这种模式)。
而对于 Docker 来说,在多个 Docker 中的操作系统这部分资源是复用操作系统的。多个 Docker 之间是通过虚拟化逻辑进行隔离而不是像虚拟机那样更类似于物理隔离的。
另外 @
Nitroethane 说的不对,Windows 支持两种类型的 Docker 运行方式。一种是开个虚拟机运行的 Hyper-V-isolated container,另一种是和 Linux 一样直接进行内核共享的 Process-isolated container 。在 Windows 上使用 Linux Docker 只能用第一种方式,使用 Windows docker 镜像的话内核是可以共享的。
但不管是 Docker 还是虚拟机,如果你一台机器只虚拟化一个程序的话,实际上效率差不了多少,都是你的程序下面是层操作系统,再下面就是硬件资源。Docker 不过是在你的宿主操作系统上运行了这个进程,而 Type 1 的虚拟机也是一样的,虚拟化的操作系统是直接访问硬件资源的,宿主系统如果没啥功能或者压根就没装的话其实差不了多少。