Docker核心技术详解(原理+机制+案例)

Docker核心实现,依赖于 :Namespace、Cgroups、UnionFS @mikechen

Namespace 

首先,Namespace 负责“看见什么”。

Docker核心技术详解(原理+机制+案例)-mikechen

它将进程的 PID、网络、挂载点、用户等资源进行隔离。

PID Namespace:隔离进程号,让容器内看不到宿主机其他进程。

Mount Namespace:隔离挂载点和文件系统视图,容器能看到的是自己的根文件系统。

Network Namespace:隔离网络设备、IP、路由表、端口等。

UTS Namespace:隔离主机名和域名。

IPC Namespace:隔离进程间通信资源。

User Namespace:隔离用户和权限映射,让容器内外的 UID/GID 可以不同

 

Cgroups 

其次,Cgroups 负责“能用多少”。

Docker核心技术详解(原理+机制+案例)-mikechen

它可以限制容器进程对 CPU、内存、磁盘 I/O 等资源的占用。

CPU 子系统:限制 CPU 使用率、核心数、权重(例如 –cpus=0.5)。

Memory 子系统:限制内存使用上限、交换空间等(例如 –memory=512m),超出可能触发 OOM Killer。

BlkIO / IO 子系统:限制磁盘读写速度和 IOPS。

Network(通过 net_cls 等):可结合其他工具限制网络带宽。

比如:

docker run -m 512m --cpus=1 nginx

表示:

最大内存 512MB;

最多使用 1 核 CPU。

 

UnionFS 

第三,UnionFS 负责“文件系统如何共享与独立”。

Docker核心技术详解(原理+机制+案例)-mikechen

Docker 的镜像之所以轻量且可以复用,全靠 UnionFS(如 Overlay2, AUFS)。

它的核心特性是 分层控制 (Layering) 、和 写时复制 (Copy-on-Write):

分层:镜像由多个只读层叠加而成。

底层可能是 Ubuntu 系统,上层是 Java 环境,再上层是应用代码。

写时复制:当容器运行时,Docker 会在镜像只读层之上加一个“可写层”。

如果进程要修改文件,它会把文件从只读层拷贝到可写层再修改,这保证了镜像本身不会被破坏,且启动速度极快。

 

Capability 

最后,Capability 负责“能做什么”。

Docker核心技术详解(原理+机制+案例)-mikechen

它将传统 root 用户拥有的全部权限拆分为更细粒度的能力集合。

Docker 通过限制这些能力,降低容器内进程对宿主机的潜在风险。

评论交流
    说说你的看法