容器与虚拟机很容易混淆。两者均定义了可移植的隔离执行环境,而且无论是看起来是用起来都像是拥有根文件系统和运行进程的完整操作系统。但它们的实现去完全不同。
一个真正的虚拟机拥有操作系统内核、init 进程、与硬件交互的驱动程序,以及能够完全陷入 UNIX 操作系统。而容器只是徒有操作系统之表。以下给出了一些实际的差异:
虚拟机 | 容器 |
---|---|
通过 hypervisor 共享底层硬件的完整操作系统 | 由共享内核管理的隔离进程组 |
需要完整的引导过程来初始化,启动时间在 1~2 分钟 | 进程直接由内核运行;不需要引导;启动时间小于 1s |
长期存活 | 频繁替换 |
拥有一个或多个通过 hypervisor 挂接的专用虚拟磁盘 | 文件系统视图是由容器引擎所定义的分层结构 |
镜像大小以 GB 计算 | 镜像大小以 MB 计算 |
每个物理主机数十个或更少 | 每个虚拟或物理主机数量众多 |
guest 之间完全隔离 | 操作系统内核和服务是共享的 |
多个独立的操作系统一起运行 | 必须使用和宿主一样的内核(操作系统发行版也许会有不同) |
容易与虚拟机结合使用是一种常见的用法。虚拟机是将物理服务器细分为可管理组块(chunk)的最佳方式。然后,你可以在虚拟机之上的容器中运行应用程序,以此实现最佳系统密度(这个过程有时称为“bin packing”)。这种虚拟机上的容器(containers-on-VMs)架构是要在公有云上运行的容器化应用程序的标准。
网友评论