6月3日 00:04
Docker 和虚拟机有什么区别?该用哪个?
Docker 和虚拟机都是隔离运行环境的技术,但原理完全不同:虚拟机虚拟整套硬件(含操作系统),Docker 共享宿主机内核只隔离进程。结果:Docker 启动快 10 倍、内存省 5 倍,但隔离性不如虚拟机。
核心区别
| 维度 | Docker 容器 | 虚拟机 |
|---|---|---|
| 虚拟层级 | 进程级隔离(共享内核) | 硬件级虚拟化(独立内核) |
| 启动时间 | 秒级 | 分钟级 |
| 内存占用 | MB 级 | GB 级 |
| 镜像大小 | MB-Tens of MB | GB 级 |
| 性能损耗 | 接近原生 | 5-15% |
| 隔离性 | 弱(共享内核) | 强(独立内核) |
| 密度 | 单机跑几十个 | 单机跑几个 |
为什么 Docker 这么轻
虚拟机需要给每个实例装一套完整的操作系统(Linux 内核 + 用户空间),至少 1GB 内存。Docker 容器只是宿主机上的一个进程——用 Linux namespace 隔离进程、网络、文件系统,用 cgroup 限制资源。所有容器共享同一个内核,不需要重复运行操作系统。
打个比方:虚拟机是每家自建一栋房子(独立地基、管道),Docker 是同一栋楼里的不同公寓(共享地基和管道,各自有门锁)。
Docker 做不到什么
因为共享内核,容器不能:
- 运行不同内核版本的系统(Linux 容器不能跑在 Windows 上,反之亦然)
- 完全隔离内核漏洞(一个容器的内核漏洞可能影响宿主机)
- 运行需要特定硬件驱动的应用
虚拟机可以——它有独立的内核,可以跑 Windows on Linux、Linux on macOS。
什么时候用虚拟机
- 需要运行不同操作系统(Windows + Linux 混合环境)
- 安全要求极高(金融、政务),需要内核级隔离
- 需要直接访问硬件(GPU 直通、特定网卡)
- 合规要求规定必须用虚拟机
什么时候用 Docker
- 微服务部署、CI/CD 流水线
- 开发环境统一(所有人跑相同的容器)
- 快速扩缩容
- 90% 的后端应用场景
混合使用
Docker 跑在虚拟机里是常见架构——云厂商的虚拟机(EC2/ECS)上跑 Docker 容器。虚拟机提供硬件级隔离(多租户安全),Docker 提供应用级隔离(部署灵活性)。