Docker 不是 虚拟机

📅 2026/7/8 15:49:46 👁️ 阅读次数 📝 编程学习
Docker 不是 虚拟机

Docker 不是 Linux 虚拟机,二者底层原理完全不同

一、核心本质区别

1. 虚拟机(VM,如VMware、VirtualBox、KVM)

  • 完整独立内核:每台虚拟机都安装一套完整操作系统内核(Windows/Linux)
  • 硬件级隔离:通过虚拟化层模拟CPU、内存、磁盘、网卡硬件
  • 资源开销大:自带完整系统、驱动、系统服务,占用GB级内存/磁盘
  • 启动慢:开机要初始化整个操作系统,耗时几十秒到分钟级

2. Docker(容器)

  • 共享宿主机Linux内核:容器不自带内核,直接复用你本机Linux的内核
  • 内核级隔离(Namespace + Cgroups):只隔离进程、网络、文件系统、用户权限,不虚拟硬件
  • 轻量:只打包应用、依赖、库,无完整系统,镜像通常几十MB
  • 秒级启动:无需启动操作系统,创建进程即运行

二、一张对比表看懂差异

对比项传统虚拟机Docker容器
内核独立内核,每个VM一套共享宿主机Linux内核
隔离方式硬件虚拟化隔离Linux内核Namespace+Cgroups进程隔离
大小数GB(完整系统)几十~几百MB
启动速度分钟/几十秒毫秒~1秒
资源损耗高,多套系统占用大量内存极低,仅应用本身占用资源
运行数量一台机器最多十几台一台机器可跑上百个容器

三、通俗举例

  • 虚拟机 = 一栋独立房子,自带水电、墙体、完整配套(独立系统)
  • Docker容器 = 公寓单间,共用大楼承重墙、水电总闸(共享宿主机内核),只隔出独立房间

四、补充关键点

  1. Docker只能跑在Linux内核上
    Windows/macOS本地使用Docker时,底层会自动起一个轻量Linux虚拟机(Docker Desktop内置WSL2/Hyper-V虚拟机),上层容器依然是容器,不是虚拟机。
  2. 容器≠虚拟机,二者可以组合使用
    比如:KVM虚拟机里再运行Docker容器,是常见云服务器架构。
  3. 隔离强度不同
    虚拟机隔离更强(完全独立内核,崩溃互不影响);Docker隔离较弱,宿主机内核出问题所有容器都会挂掉。