Docker是如何“隔离”一切的?底层原理深度剖析!

360影视 国产动漫 2025-05-03 01:02 3

摘要:Docker是云原生的必备技能,也是云计算的核心,下面重点详解Docker底层实现@mikechen

大家好,我是mikechen。

Docker是云原生的必备技能,也是云计算的核心,下面重点详解Docker底层实现@mikechen

Docker隔离核心

Docker 实现“隔离”的核心:在于利用 Linux 内核提供的“namespace”、和“Control Groups (cgroups) ”这两个特性。

它们共同构建了一个容器运行时的基本隔离环境。

Linux Namespace

Namespace是Linux内核提供的隔离机制,Docker利用Namespace实现容器间的资源隔离。

Namespace 的核心作用:是为一组进程创建一个隔离的执行环境。

使得这些进程只能看到和操作属于它们自己“虚拟”的系统资源实例,而感知不到宿主机或其他 Namespace 中存在的相同资源。

Namespace 是通过内核中的 CLONE 系统调用 实现的,Docker 在创建容器时,会给每个容器分配一组独立的 Namespace。

// 简化版伪代码clone(fn, child_stack, CLONE_NEWUTS | CLONE_NEWNET | CLONE_NEWPID, arg);

每类 namespace 在内核中都有对应的实现结构体,如:

Control Groups (cgroups) :是 Linux 内核提供的另一种关键特性,其主要作用:是对一组进程的资源使用进行限制。

限制进程组 (容器) 可以使用的各种资源,如 :cpu、内存、磁盘 I/O 、和网络带宽…等。

可控制的资源举例说明CPU限制 CPU 核心数、调度权重内存限制最大内存占用、触发 OOM 杀死磁盘 I/O控制磁盘读写速度网络带宽限制发送/接收速率(结合 tc 实现)子进程数控制最大进程数(防 fork 炸弹)

cgroups :是一种 层级化的资源管理机制。

其本质是:进程通过被“打标签”绑定到某个资源控制组中,资源限制通过 cgroup 文件系统进行下发、和监控。

控制组的本质是一个 目录结构 + 控制文件,如:

/sys/fs/cgroup/memory/docker//memory.limit_in_bytes

cgroups 的实现基于以下核心:

控制组 (Control Group)

一个或多个进程的集合,可以对其应用相同的资源限制/和控制策略。

层级 (Hierarchy)

cgroups 以树状层级结构进行组织,每个层级可以关联一个或多个子系统。

子系统 (Subsystem)

也称为资源控制器,用于控制特定类型的资源。

常见的子系统包括 cpu、memory、blkio (块设备 I/O)、net_cls (网络分类)、net_prio (网络优先级) 等。

以上

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

来源:小齐的科学讲堂

相关推荐