Docker 与虚拟机对比

虚拟机和 Docker 容器都能解决「打包运行环境」的问题,但原理截然不同:虚拟机用 Hypervisor 虚拟出整台「假电脑」并安装独立操作系统,容器则共享宿主机内核、只对进程做隔离。理解差异,才知道什么场景该用谁。

结构差异:共享内核 vs 独立内核

虚拟机与容器对比 从下往上看,虚拟机在宿主机与业务程序之间多出「客户机操作系统」整一层,容器则直接复用宿主内核:

层次虚拟机Docker 容器
操作系统内核每个虚拟机一个独立内核全部容器共享宿主机内核
底层支撑Hypervisor(KVM、VMware、Hyper-V 等)宿主 Linux 内核的容器特性
打包单位整个虚拟机镜像(含完整系统)只含应用层的分层镜像

隔离机制:namespace 与 cgroup

容器的隔离来自 Linux 内核的两个机制(K8s、LXC 等底层同样依赖它们):

  • namespace:给容器独立的进程、网络、挂载点视图,让容器「看不到」别人的进程;
  • cgroup:限制并统计容器可用的 CPU、内存等资源。

一句话:namespace 负责「隔开」,cgroup 负责「限量」。

核心指标对比

对比项虚拟机Docker 容器
启动速度分钟级(需引导完整系统)秒级甚至毫秒级
资源占用每台数百 MB 起步,含完整系统开销只算进程本身,通常几十 MB
隔离强度强(内核级硬隔离)较弱(共享内核,边界在 namespace)
迁移性镜像大、跨平台难镜像分层、体积小,随处可跑

镜像分层一句话

Docker 镜像是「一层层只读文件系统」叠加出来的,公共的基础层能被多个镜像复用:拉取新镜像往往只需下载差异层。这就是容器镜像小、迁移快的原因,也是迁移性胜过虚拟机的基础。

各自适合的场景

场景推荐
微服务、CI/CD、快速扩容Docker 容器
需要异种内核(如跑 Windows)或强安全边界虚拟机
合规要求硬隔离、多租户承载虚拟机
生产环境常见折中在虚拟机里再跑 Docker

小结

两者本质区别在于是否共享宿主机内核:容器轻快、秒级启动、迁移方便,适合应用部署;虚拟机隔离强、自成体系,适合内核差异与强安全场景。实践中常以虚拟机承载 Docker,兼取两者之长。

笔记加载中…