虚拟机与容器
1.虚拟机:虚拟化硬件 虚拟机 Virtual Machine 指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。
在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的 CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。在容器技术之前,业界的网红是虚拟机。
虚拟机技术的代表,是 VMWare 和 OpenStack。更多请参看百科虚拟机[2]。
2.容器:将操作系统层虚拟化,是一个标准的软件单元
· 随处运行:容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的。
· 高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置 CPU 和内存的使用率,进而更好地利用服务器的计算资源。
· 快速扩展:每个容器都可作为单独的进程予以运行,并且可以共享底层操作系统的系统资源,这样一来可以加快容器的启动和停止效率。
3.区别与联系
· 虚拟机虽然可以隔离出很多「子电脑」,但占用空间更大,启动更慢。虚拟机软件可能还要花钱,例如VMWare;
· 容器技术不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境,类似「沙箱」;
· 运行空间,虚拟机一般要几 GB 到 几十 GB 的空间,而容器只需要 MB 级甚至 KB 级;
我们来看一下对比数据:
特性 |
虚拟机 |
容器 |
隔离级别 |
操作系统级 |
进程 |
隔离策略 |
Hypervisor[3](虚拟机监控器) |
Cgroups[4](控制组群) |
系统资源 |
5 ~ 15% |
0 ~ 5% |
启动时间 |
分钟级 |
秒级 |
镜像存储 |
GB - TB |
KB - MB |
集群规模 |
上百 |
上万 |
高可用策略 |
备份、容灾、迁移 |
弹性、负载、动态 |
与虚拟机相比,容器更轻量且速度更快,因为它利用了 Linux 底层操作系统在隔离的环境中运行。虚拟机的 Hypervisor 创建了一个非常牢固的边界,以防止应用程序突破它,而容器的边界不那么强大。
物理机部署不能充分利用资源,造成资源浪费。虚拟机方式部署,虚拟机本身会占用大量资源,导致资源浪费,另外虚拟机性能也很差。而容器化部署比较灵活,且轻量级,性能较好。
虚拟机属于虚拟化技术,而 Docker 容器技术,属于轻量级的虚拟化。