摘要: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 、和网络带宽…等。
cgroups :是一种 层级化的资源管理机制。
其本质是:进程通过被“打标签”绑定到某个资源控制组中,资源限制通过 cgroup 文件系统进行下发、和监控。
控制组的本质是一个 目录结构 + 控制文件,如:
/sys/fs/cgroup/memory/docker//memory.limit_in_bytescgroups 的实现基于以下核心:
控制组 (Control Group)
一个或多个进程的集合,可以对其应用相同的资源限制/和控制策略。
层级 (Hierarchy)
cgroups 以树状层级结构进行组织,每个层级可以关联一个或多个子系统。
子系统 (Subsystem)
也称为资源控制器,用于控制特定类型的资源。
常见的子系统包括 cpu、memory、blkio (块设备 I/O)、net_cls (网络分类)、net_prio (网络优先级) 等。
以上
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
来源:小齐的科学讲堂