容器不运行独立操作系统,而是复用宿主机内核,通过命名空间隔离和cgroups限制实现轻量级进程组;启动仅需秒级,内存占用mb级,但依赖宿主机内核兼容性。

因为容器不运行独立操作系统,它直接复用宿主机的内核。
核心机制:共享内核而非复制内核
容器不是完整操作系统实例,而是宿主机上被隔离的进程组。Docker 利用 Linux 内核原生特性——命名空间(namespaces)做进程、网络、文件系统等层面的隔离,用控制组(cgroups)做资源限制。所有这些都在同一个内核中完成调度和管理,无需再加载、初始化另一个内核。
启动过程对比:秒级 vs 分钟级
新建一个容器时,Docker 只需:
- 从镜像解压用户态文件系统(如 /bin、/etc)
- 创建隔离的命名空间上下文
- 应用 cgroups 限制策略
- 执行指定命令(如 /bin/sh)作为 init 进程
整个过程绕过了 BIOS 自检、引导加载器(GRUB)、内核解压与初始化、设备驱动探测等传统操作系统启动环节——那些正是虚拟机耗时的主要原因。
关键前提:宿主机必须提供兼容内核
容器对内核有隐式依赖:
- Alpine 容器在 Ubuntu 主机上跑,调用的是 Ubuntu 的 kernel,不是 Alpine 自带的(它压根没带)
- 若容器内应用需要特定内核模块(如 overlayfs、nf_tables),该模块必须已在宿主机内核中启用或可动态加载
- Windows/macOS 上运行 Linux 容器,本质是先启一个轻量 Linux VM(如 HyperKit 或 WSL2)来提供内核,容器仍不自带内核
这不是缺陷,而是设计取舍
放弃独立内核换来了:
- 启动时间从分钟级压缩到毫秒至秒级
- 内存占用从 GB 级降至 MB 级(无冗余内核副本与守护进程)
- 更高效的 CPU 和 I/O 调度(无虚拟化层拦截)
当然,这也意味着容器无法运行与宿主机内核不兼容的操作系统(比如不能在 Linux 主机上直接跑 Windows 容器,除非借助额外抽象层)。











