虚拟机:
- KVM
- vmware workstation
- exsi
- xen
容器:
- Docker
- podman
- containerd
- …
相同:
- 资源隔离
- 独立的操作系统,提供隔离的服务
不同:
-
底层的实现技术不一样,虚拟机的核心是模拟器,而容器的核心是namespace + cgroup(资源隔离、资源限制)
- 虚拟机不知道自己是台虚拟机,资源分配的多少,就是多少,但是容器不知道自己是个容器,宿主机多少资源他就以为自己有多少,这样就会出现资源抢占问题,所以容器使用了namespace欺骗容器他是独一无二的,从而实现资源隔离;使用cgroup实现了资源的限制,在容器上使用free -m,看到的是宿主机的资源,cgroup只是限制了他对资源的使用;
- 虚拟机的宿主机无需OS(exsi),但容器的宿主机必须得有OS
-
隔离性:
- 虚拟机拥有更好的隔离性
- 容器只能实现进程级隔离
-
资源限制:
- 虚拟机分配多少就用多少
- 容器使用cgroup限制
-
性能:
- 虚拟机在使用资源时,需要借助hypervisor,性能会有所衰减
- 容器运行在宿主机上
- 虚拟机包含完整的操作系统,容器只包含用户态,使用物理机内核
-
提供服务级别不同:
- 虚拟机提供的是操作系统级别的服务 (IaaS)
- 容器提供的是应用级别的服务 (PaaS) (需要什么应用就单独部署一个容器)
-
可移植性
- 虚拟机镜像,少则几百M,大则几个G
- 一个容器镜像少则几十K,正常来讲是几十上百M
版权声明:本文为qq_43603365原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。