Docker核心技术最全详解(4大核心技术)

Docker通过一系列核心技术,实现了Docker容器化,下面我就全面来详解Docker核心技术@mikechen

Docker 引擎架构组件

Docker 是一个 C/S 架构的容器平台,其核心由以下组件组成:

Docker核心技术最全详解(4大核心技术)-mikechen

主要组件说明:

组件 说明
Docker CLI 命令行工具,与 Docker Daemon 通信
Docker Daemon 守护进程,负责构建镜像、管理容器和镜像
containerd 容器生命周期管理器(启动、停止、删除容器)
runc 负责真正启动容器进程,符合 OCI 规范
存储驱动 管理镜像与容器文件系统(如 overlay2、aufs、btrfs)
网络驱动 提供容器之间与外部通信能力(如 bridge、host、overlay 等)

Docker 客户端 (Docker Client)

这是用户与 Docker 交互的主要方式,通常通过 docker 命令行工具实现。

例如: docker run, docker build, docker pull。。。,发送给 Docker 守护进程。

Docker 守护进程 (Docker Daemon)

这是 Docker 引擎的核心后台服务,它负责接收来自 Docker 客户端的请求,并执行相应的操作。

例如:管理镜像、容器、网络和存储…等,守护进程运行在宿主机上。

Containerd

这是一个容器运行时守护进程,负责管理容器的生命周期。

Runc

这是一个轻量级的、符合 OCI (Open Container Initiative) 规范的容器运行时。

containerd 实际上是使用 runc 来创建和运行容器的。

 

Namespace(隔离机制)

Namespace 是 Linux 提供的核心特性之一,为 Docker 容器实现 资源级别的隔离。

Docker核心技术最全详解(4大核心技术)-mikechen

Docker 广泛利用了各种类型的 Namespace,使得每个容器都像运行在一个独立的操作系统环境中。

常见的Namespace,如下所示:

Namespace 类型 说明 Docker 使用场景
pid 隔离进程编号空间 每个容器拥有独立的进程号
net 隔离网络接口与路由表 每个容器可配置独立虚拟网卡
mnt 隔离挂载点与文件系统视图 容器有自己的根文件系统
uts 隔离主机名与域名 容器可自定义 hostname
ipc 隔离进程间通信资源 容器中的进程通信相互隔离
user 隔离用户与用户组 ID 空间 支持容器内外不同权限映射

✅ 每个容器,就是通过这些 Namespace, 创建出一个逻辑独立的操作系统环境。

总结来说,Namespace 提供了一种轻量级的虚拟化形式,它在操作系统层面实现了资源和环境的隔离,是 Docker 实现容器化的关键基石。

 

Cgroups(资源控制)

Cgroups(Control Groups)是 Linux 提供的资源管理机制,用于限制、和隔离容器的资源使用。

Docker核心技术最全详解(4大核心技术)-mikechen

主要子系统:

cpu:限制容器使用的 CPU 时间或核心数。

例如,–cpus=0.5 限制容器使用半个 CPU 核心。

memory:限制容器内存使用量(如 –memory=512m 限制为 512MB)。

blkio:限制块设备(如磁盘)的 I/O 吞吐量。

net_cls / net_prio:限制网络流量优先级或带宽。

devices:控制容器对设备(如 GPU)的访问权限。

支持控制的资源类型:

资源类型 示例配置 含义
CPU --cpus=2 限制容器最多使用两个核心
内存 -m 512m 限制内存最多使用 512MB
磁盘 IO --device-read-bps 限制磁盘读写速率
网络带宽 iptables/tc 结合实现 限制容器网络带宽(非 Cgroups 原生)

工作机制:

  • Docker 会为每个容器,创建一组 Cgroup 子系统控制路径;
  • 这些路径对应 Linux 内核的 /sys/fs/cgroup/ 目录;
  • 系统在运行时会不断更新资源使用信息,触发阈值限制。

 

UnionFS(镜像分层)

UnionFS(联合文件系统)支持将多个只读文件系统叠加在一起形成一个一致的视图,是 Docker 镜像构建和运行的核心技术。

镜像由多个只读层叠加而成,每一层都是一个文件系统的快照。

当需要修改镜像中的文件时,UnionFS采用Copy-on-Write机制,只复制需要修改的文件到可写层,而不会修改原始的只读层

分层结构:

镜像层: – 基础层(如 ubuntu) – 依赖层(安装软件) – 应用层(拷贝代码、配置等) 容器层: – 最顶层为可写层(容器运行时动态创建)。

Docker核心技术最全详解(4大核心技术)-mikechen

优势:

  • 构建镜像过程,可以使用缓存加速;
  • 层之间共享,极大节省存储空间;
  • 容器运行时修改不影响原始镜像。

 

Containerd(容器运行时)

containerd 是 Docker 抽出的核心组件,用于容器生命周期管理,现在也是 CNCF 的核心项目。

containerd ,是 Docker 和 K8s 底层运行时的重要桥梁。

Docker核心技术最全详解(4大核心技术)-mikechen

containerd 的职责:

  • 管理镜像:拉取、导入、导出;
  • 容器生命周期:创建、启动、暂停、销毁;
  • 挂载文件系统与网络设置;
  • 与 runc 协作:containerd 调用 runc 启动容器进程;
  • 支持 gRPC 接口,K8s 也可直接调用。
评论交流
    说说你的看法