容器技术和平台虚拟化技术都属于虚拟化技术,目的都是:将应用程序所需的执行环境打包,建立孤立的环境,使之能在不同的硬件之间移动

平台虚拟化技术以操作系统为中心。它通过某种方式,隐藏底层物理硬件,从而让多个操作系统可以透明地使用和共享它。提供平台虚拟化的层,叫 hypervisor,也叫虚拟机监视器或 VMM(Virutal Machine Monitor)。hypervisor 上运行的来宾操作系统,被称为虚拟机或 VM(Virtual Machine)。

hypervisor 有两种类型:

hypervisor.png

因此,在平台虚拟化技术中,一个宿主机上运行多个 GuestOS,每个 GuestOS 运行在一个沙盒环境中。

在使用虚拟机时,打包的是虚拟机镜像(包括 GuestOS 及其上的应用程序)。启动时,需要先启动 GuestOS,再启动应用程序。

而容器技术以应用程序为中心。只直接打包应用程序相关的程序、库、配置文件。它在 OS 内打造虚拟执行环境,一个宿主机上的多个容器共享 HostOS,而不是在每个容器内运行 GuestOS,因此,它是轻量级的虚拟化技术,也被称为 OS 级的虚拟化技术。

在使用容器技术时,只需要在宿主机的操作系统上安装诸如 LXC、libcontainer 等容器层软件(其底层是 namespace 等技术),它们负责容器的管理,容器资源的限制和隔离。

当前最火的容器技术是 Docker,但不是只有 Docker 一种容器,比如,还有 CoreOS 公司主导的 rkt 容器引擎。

容器因为比虚拟机减少了 GuestOS 这一层,因此更加轻量、高效。

vm-vs-docker.png