暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

知识文档 | docker容器中的操作系统内核调用的是自己还是宿主机层的?

514

Docker容器采用共享内核架构Shared Kernel Architecture),所有容器进程直接通过宿主机的Linux内核进行系统调用。这种设计基于三个核心机制:

1.单一内核空间:所有容器共享同一个内核地址空间

2.系统调用代理:容器进程的syscall直接由宿主机内核处理

3.资源视图隔离:通过namespace机制提供独立的资源视图


Docker容器共享宿主机的操作系统内核,这是其轻量化和高效的核心设计。以下是关键细节和影响:

1. 内核共享机制

内核共用:所有容器直接调用宿主机的Linux内核(通过`namespaces``cgroups`隔离资源),不单独运行自己的内核。

示例:若宿主机内核是`Linux 4.19`,容器内`uname -r`也会显示`4.19`

隔离技术:

Namespaces:隔离进程、网络、文件系统等(如每个容器有独立的PID命名空间)。

Cgroups:限制CPU、内存等资源使用。

2. 对容器的影响

特性

说明

示例/注意事项

轻量化

无需为每个容器加载独立内核,启动快、占用资源少。

容器启动时间通常<1秒。

内核依赖

容器内应用必须兼容宿主机内核。

Linux 4.19宿主机上无法运行需Linux 6.0特性的应用。

安全性

内核漏洞会影响所有容器(如宿主机内核被攻破,容器可能逃逸)。

需定期更新宿主机内核补丁。

3. 与虚拟机的区别

维度

Docker容器

虚拟机(VM

内核

共享宿主机内核

每个VM运行独立内核

性能

接近原生

因虚拟化层有额外开销

启动速度

秒级

分钟级

隔离性

进程级(较弱)

硬件级(更强)

4. 特殊场景说明

  • Windows/macOS上的Docker:  

实际通过轻量级Linux虚拟机(如Hyper-VWSL2)运行容器,间接共享Linux内核。

命令`docker run --platform linux/amd64`可跨平台运行容器。

  • Linux系统容器:  

若需运行Windows容器(如`.NET Framework`应用),必须使用Windows宿主机并开启Windows容器模式(此时共享Windows内核)。


5. 如何验证内核共享? 

在宿主机和容器内分别执行:

uname -r

输出对比示例麒麟操作系统为例

宿主机:4.19.90-25.42.v2101.ky10.x86_64

容器内:4.19.90-25.42.v2101.ky10.x86_64 (完全一致)


这里再介绍下长期支持版本(LTS

版本

发布时间

维护截止

重要特性

6.1 LTS

2022-12

2026-12

首个支持Rust的稳定版

5.15 LTS

2021-10

2026-10

NTFS读写支持、AMD GPU优化

4.19 LTS

2018-10

2024-12

最后一版支持32位PC的LTS内核


    直接调用内核无虚拟化开销,性能更高,原因为Docker容器是通过共享宿主机内核+隔离资源实现高效运行;但具体使用时需关注如下几点:

1. 兼容性:容器内应用必须适配宿主机内核版本。

2. 安全性:及时更新宿主机内核,避免漏洞风险。


文章至此。

文章转载自戏说数据那点事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论