Docker 不是 虚拟机
📅 2026/7/8 15:49:46
👁️ 阅读次数
📝 编程学习
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容器 = 公寓单间,共用大楼承重墙、水电总闸(共享宿主机内核),只隔出独立房间
四、补充关键点
- Docker只能跑在Linux内核上
Windows/macOS本地使用Docker时,底层会自动起一个轻量Linux虚拟机(Docker Desktop内置WSL2/Hyper-V虚拟机),上层容器依然是容器,不是虚拟机。 - 容器≠虚拟机,二者可以组合使用
比如:KVM虚拟机里再运行Docker容器,是常见云服务器架构。 - 隔离强度不同
虚拟机隔离更强(完全独立内核,崩溃互不影响);Docker隔离较弱,宿主机内核出问题所有容器都会挂掉。
编程学习
技术分享
实战经验