找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1888

积分

0

好友

264

主题
发表于 2025-12-31 00:53:09 | 查看: 26| 回复: 0

云原生是现代化大型架构的核心,而Docker作为容器化技术的基石,其底层原理值得深入探讨。

Docker核心技术

Docker 本质上是一种容器化技术,它并非虚拟出一个完整的操作系统,而是利用 Linux 内核的特性在宿主机上运行多个隔离的、轻量级的“容器”。

图1:Docker与Linux内核组件关系架构图
Docker底层架构与Linux内核组件关系图

其核心依赖于 Linux 内核的三大技术:Namespaces(命名空间)Cgroups(控制组)UnionFS(联合文件系统)。这些技术共同协作,实现了容器的资源隔离、资源限制和高效的镜像分层管理。

Namespaces(命名空间)

Namespaces 为每个容器构建了一个独立的系统资源视图,可以将其理解为一个“隔离的平行世界”。

Linux 提供了多种命名空间,例如 PID、NET、MNT、UTS、IPC、USER 等,它们为容器内的进程创建了独立的运行环境。

图2:Docker镜像分层与容器层示意图
Docker镜像分层构建与容器读写层示意图

具体来说:

  • PID Namespace:容器内的进程拥有独立的进程ID编号空间。在容器内看到的 PID 1(初始化进程),在宿主机上只是一个普通的进程。
  • Network Namespace:每个容器拥有自己独立的虚拟网络栈,包括网卡、IP地址、路由表和端口空间,实现了容器间的网络隔离。
  • Mount Namespace:容器拥有独立的文件系统挂载点视图,使其只能看到自己被允许访问的目录,无法直接访问宿主机的根文件系统。

通过这些命名空间,容器内的进程拥有了独立的进程树、网络环境、文件系统视图和主机名等,实现了良好的隔离性。

Cgroups(控制组)

如果说 Namespaces 负责“隔离”,那么 Cgroups 则负责“限制”。控制组(cgroups)技术用于对进程组使用的资源进行配额、限制和统计管理。

图3:Kubernetes管理Docker与ECS集群架构示意图
K8S管理下的Docker集群与ECS集群架构图

Cgroups 可以针对 CPU、内存、磁盘 I/O、网络带宽等关键资源进行精细化控制:

  • CPU子系统:可以限制容器对CPU核心的使用比例或时间片配额。
  • Memory子系统:限制容器可使用的内存上限,并能在内存不足时触发OOM(内存溢出)控制。
  • BlkIO子系统:限制容器的磁盘读写速率。
  • Net子系统:设置网络流量的优先级。

Cgroups 确保了单个容器不会无节制地消耗宿主机资源,从而保障了宿主机的稳定性和多容器环境的公平性。

UnionFS(联合文件系统)

UnionFS(联合文件系统)是 Docker 镜像和容器高效存储的基石。它允许将多个目录(称为“层”)透明地叠加在一起,形成一个统一的文件系统视图。

图4:基于基础镜像安装软件的分层过程图
在基础镜像上安装Apache与Redis的分层示意图

Docker 镜像正是由多个只读的镜像层(Layer)组成。基于 OverlayFS、AUFS 等联合文件系统驱动,Docker 将这些层合并为容器所看到的单一根文件系统。

当启动一个容器时,Docker 会在所有只读层之上添加一个薄薄的可写层(容器层)。所有对容器文件系统的修改都发生在这个可写层中。底层技术采用 写时复制(Copy-on-Write) 策略:只有当需要修改某个文件时,才会将该文件从下层只读层复制到可写层进行修改,从而极大地节省了存储空间并加速了镜像的分发与启动。

这种分层与写时复制的设计,使得不同的镜像可以共享相同的基础层,大大提升了存储效率,也便于进行镜像的构建、分发和版本管理。




上一篇:基于CW32L012的PID温度控制实现:从原理到代码实战
下一篇:微软计划2030年前淘汰所有C/C++代码,全面转向Rust语言
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 20:14 , Processed in 0.339380 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表