虚拟机和容器的区别(一)Docker + Kubernetes学习

  • Post author:
  • Post category:其他




虚拟机:
  • KVM
  • vmware workstation
  • exsi
  • xen



容器:
  • Docker
  • podman
  • containerd



相同:
  1. 资源隔离
  2. 独立的操作系统,提供隔离的服务



不同:
  1. 底层的实现技术不一样,虚拟机的核心是模拟器,而容器的核心是namespace + cgroup(资源隔离、资源限制)

    1. 虚拟机不知道自己是台虚拟机,资源分配的多少,就是多少,但是容器不知道自己是个容器,宿主机多少资源他就以为自己有多少,这样就会出现资源抢占问题,所以容器使用了namespace欺骗容器他是独一无二的,从而实现资源隔离;使用cgroup实现了资源的限制,在容器上使用free -m,看到的是宿主机的资源,cgroup只是限制了他对资源的使用;
  2. 虚拟机的宿主机无需OS(exsi),但容器的宿主机必须得有OS
  3. 隔离性:

    1. 虚拟机拥有更好的隔离性
    2. 容器只能实现进程级隔离
  4. 资源限制:

    1. 虚拟机分配多少就用多少
    2. 容器使用cgroup限制
  5. 性能:

    1. 虚拟机在使用资源时,需要借助hypervisor,性能会有所衰减
    2. 容器运行在宿主机上
  6. 虚拟机包含完整的操作系统,容器只包含用户态,使用物理机内核
  7. 提供服务级别不同:

    1. 虚拟机提供的是操作系统级别的服务 (IaaS)
    2. 容器提供的是应用级别的服务 (PaaS) (需要什么应用就单独部署一个容器)
  8. 可移植性

    1. 虚拟机镜像,少则几百M,大则几个G
    2. 一个容器镜像少则几十K,正常来讲是几十上百M



版权声明:本文为qq_43603365原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。