Docker核心原理深度剖析:Namespace 和 Cgroups 隔离机制

Docker核心技术

Docker 容器技术的核心:在于实现进程、和资源的隔离、与管理。

这主要依赖于 Linux 内核的两大特性:Namespace(命名空间)和Cgroups(控制组)。

Docker核心原理深度剖析:Namespace 和 Cgroups 隔离机制-mikechen

Namespace 实现了隔离 (Isolation):,它让容器拥有自己独立的系统视图,包括进程、网络、文件系统挂载点等。

Cgroups 实现了资源管理 (Resource Management),它限制和监控容器可以使用的资源,例如 CPU、内存、磁盘 I/O 等。

这两者相互配合,为 Docker 容器提供了基本的隔离性和资源控制能力,是 Docker 实现容器化的关键技术。

 

Namespace

Namespace 通过创建独立的系统资源视图,实现容器进程的环境隔离,确保容器内进程只能访问自身资源,增强安全性和隔离性。

Namespace 机制是 Linux 内核提供的一种隔离机制,它可以将全局的系统资源进行虚拟化。

Docker核心原理深度剖析:Namespace 和 Cgroups 隔离机制-mikechen

使得不同的进程组(通常是 Docker 容器)拥有自己独立的资源实例,彼此之间互不干扰。

Docker 利用了以下几种关键的 Namespace:

Namespace 类型 描述 unshare/ip netns 示例
pid 隔离进程编号 每个容器有独立的 PID 1
net 隔离网络设备、端口、路由等 容器有独立网卡
ipc 隔离信号量、共享内存等 防止 IPC 污染
mnt 隔离挂载点和文件系统视图 容器挂载根不同
uts 隔离主机名和域名 每个容器自定义 hostname
user 隔离用户与 UID 映射 实现 rootless 容器

通过这些命名空间,Docker 创建了一个个独立的运行环境,使得容器内的进程仿佛运行在独立的操作系统中,互不干扰。

 

Cgroups

Cgroups 负责:限制、和管理容器的资源使用,防止资源争抢,保障系统整体稳定和性能。

Docker核心原理深度剖析:Namespace 和 Cgroups 隔离机制-mikechen

支持的资源类型包括:

  • cpu: 控制 CPU 使用率;
  • cpuacct: 统计 CPU 使用情况;
  • memory: 控制内存使用;
  • blkio: 控制块设备 I/O;
  • net_cls: 标记网络数据包以进行流量控制;
  • pids: 控制进程数量。

比如::CPU(核心数、时间片权重)

docker run -it --cpus="1.0" ubuntu

意思是这个容器,最多使用 1 个 CPU 核心的计算能力。

 

内存(最大使用量),比如:

docker run -it --cpu-shares=512 ubuntu

 

磁盘 I/O(读写速率),比如:

docker run -it --device-write-bps /dev/sda:5mb ubuntu

网络带宽,比如:

sudo tc qdisc add dev vethXXXX root tbf rate 1mbit burst 32kbit latency 400ms

 

进程数量(PIDs),比如:

docker run -it --pids-limit=100 ubuntu

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法