当前位置: 首页 > news >正文

第二篇:《Docker 架构与核心组件详解》

理解了 Docker 是什么之后我们需要深入其内部搞清楚 Docker 是如何工作的。本文将剖析 Docker 的 C/S 架构、核心组件dockerd、containerd、runc 等以及它们之间的交互关系。掌握这些不仅能帮你更好地使用 Docker还能为故障排查和性能优化打下基础。一、Docker 的整体架构Docker 采用经典的 C/S客户端-服务器架构Docker Client用户交互的入口如 docker 命令。Docker Daemondockerd后台服务负责管理镜像、容器、网络等资源。Registry存放镜像的仓库默认 Docker Hub。text±----------------- REST API ±-----------------| Docker Client | ----------------- | Docker Daemon || (docker CLI) | (UNIX socket | (dockerd) || | /var/run/docker | |±----------------- .sock) ±-----------------|| (gRPC)v±-----------------| containerd || (容器运行时管理) |±-----------------|| (runc)v±-----------------| runc || (实际创建容器进程)|±-----------------二、核心组件详解2.1 Docker Client作用用户通过 CLI 输入命令如 docker run客户端将这些命令转换为 HTTP/REST 请求发送给 dockerd。通信方式默认使用 UNIX Socket (/var/run/docker.sock)也支持 TCP通常用于远程访问但生产环境需加密。其他客户端Docker Compose、Kubernetes 的 dockershim已废弃也可视为客户端。2.2 Docker Daemon (dockerd)作用Docker 的后台守护进程负责接收客户端请求管理容器、镜像、网络、卷等生命周期。关键子模块镜像管理pull、push、tag、build。容器管理create、start、stop、restart、rm。网络管理创建 bridge、overlay 网络配置 iptables。卷管理创建、删除 volume。配置文件/etc/docker/daemon.json用于配置镜像加速器、存储驱动、日志驱动等。2.3 containerd作用从 Docker 1.11 起dockerd 不再直接创建容器而是调用 containerd。containerd 是一个行业标准容器运行时支持 OCIOpen Container Initiative规范。职责管理容器的生命周期创建、启动、停止、暂停、删除。镜像传输和存储pull/push 镜像。管理容器网络接口通过 CNI。管理容器的存储快照。优势containerd 被 Kubernetes 等编排工具直接支持成为容器运行时的标准。2.4 runc作用runc 是 OCI 规范的参考实现负责实际创建和运行容器进程。它从 containerd 接收容器配置例如 rootfs、namespace 参数然后调用 Linux 内核接口clone、unshare 等生成容器进程。特点非常轻量直接与内核交互没有守护进程。2.5 containerd-shim作用每个容器对应一个 shim 进程用于解耦 containerd 和容器进程。当 containerd 重启时shim 不会重启保证容器继续运行。职责作为容器的父进程回收子进程僵尸进程处理。管理容器的退出状态并将状态报告给 containerd。2.6 Docker Registry作用存储和分发 Docker 镜像。公共 Registry 为 Docker Hub也可自建私有 Registry如 registry:2 镜像。镜像命名[registry-host]/[namespace]/[repository]:[tag]docker.io/library/nginx:latest默认仓库my-registry.example.com:5000/myapp:v1.0三、创建容器的完整流程以 docker run 为例Client → docker run nginx → 发送 REST 请求给 dockerd。dockerd 收到请求检查本地是否有 nginx 镜像若无则去 Registry pull。dockerd 调用 containerd通过 gRPC创建容器所需的对象。containerd 从镜像快照服务创建容器的 rootfs。containerd 调用 runc通过 runc create生成容器进程。runc 与内核交互设置命名空间、Cgroups启动容器进程。containerd-shim 作为容器进程的父进程接管后续状态管理。dockerd 将容器 ID 和状态返回给 Client。整个过程在毫秒级内完成。四、关键组件交互图文字描述textdocker run → dockerd → containerd → runc (创建容器进程) → shim↓镜像管理存储、pull← containerd 的快照服务↓网络与卷配置 ← dockerd 调用 libnetwork 和 volume 驱动五、Docker 依赖的底层 Linux 技术Namespaces命名空间实现资源隔离。包括PID namespace隔离进程 ID。NET namespace隔离网络设备、IP、端口。MNT namespace隔离文件系统挂载点。UTS namespace隔离主机名和域名。IPC namespace隔离进程间通信资源。USER namespace可选隔离用户 ID。Cgroups控制组实现资源限制CPU、内存、磁盘 IO 等。UnionFS联合文件系统实现镜像分层OverlayFS、AUFS 等。六、常见问题与排查方向七、总结Docker 并非一个单一的二进制文件而是一套由多个组件构成的完整生态系统。从面向用户的 docker 客户端到核心的 dockerd、containerd再到底层 runc 和内核特性每一层各司其职。理解这些组件及其协作方式有助于我们更高效地使用 Docker并在遇到问题时快速定位根源。
http://www.zskr.cn/news/1385746.html

相关文章:

  • 2026年山东大学软件学院创新项目实训博客(六)
  • 2026 高强镁合金行业观察:从实验室到吨级量产的拐点之年
  • ② AI工具全景图:2026年最值得投入的10款AI工具深度测评
  • 23万人被AI裁员后,一半的公司后悔了
  • 软件工程作业:形式化方法初探阅读笔记
  • NCM转MP3:3分钟解锁网易云音乐文件格式限制
  • 智慧树刷课插件:3分钟配置,彻底告别手动操作的学习神器
  • 别再盲目集成!DeepSeek代码生成评测(企业级落地前必做的4项压力测试)
  • 别再只会用zip了!Ubuntu上tar.gz和tar.bz2压缩率对比实测(附一键脚本)
  • 智慧树刷课新选择:基于Playwright的Autovisor脚本实测,对比油猴脚本哪个更稳?
  • 通过TaotokenCLI工具一键生成多开发环境配置脚本
  • 英雄联盟智能助手:3个核心功能让游戏体验提升200%
  • 财务总监视角:用SAP平行分类账搞定集团合并报表与本地税务申报,一份数据两头用
  • 【Claude AI深度SWOT解码】:20年AI架构师亲授,4大维度拆解其商用致命短板与突围路径
  • 太阳能Wi-Fi中继器DIY:从能量管理到户外组网全解析
  • 2026年Q2上海子女抚养权律师权威专业排行盘点:上海婚姻律师/上海房产继承律师/上海抚养权律师/上海法定继承律师/选择指南 - 优质品牌商家
  • 别再手动画图了!用FME批量处理自然资源TXT坐标,5分钟自动生成SHP文件
  • 保姆级教程:在Doris 1.0上重新配置MySQL数据源(ODBC方式)
  • 2026年Q2马铃薯雪花全粉设备主流品牌盘点:预糊化淀粉辊筒干燥机、马铃薯全粉加工设备、马铃薯全粉生产线、马铃薯全粉设备选择指南 - 优质品牌商家
  • 嵌入式快速原型开发:基于Sceptre平台与LPC2148的实战指南
  • 保姆级避坑指南:在Ubuntu 22.04上用ROS2 Humble搞定TurtleBot3的SLAM与导航(附常见报错解决方案)
  • QMCDecode终极指南:3步解锁QQ音乐加密格式,实现跨平台音乐自由
  • 龙泉汽车改装技术解析:核心工艺与靠谱选择参考 - 优质品牌商家
  • 用74系列逻辑芯片构建无CPU模拟时钟:移位寄存器驱动60位LED环形显示
  • 马铃薯雪花全粉设备技术解析:马铃薯全粉加工设备/马铃薯全粉生产线/马铃薯全粉设备/马铃薯雪花全粉加工设备/马铃薯雪花全粉设备/选择指南 - 优质品牌商家
  • 基于声卡与电流互感器的安全交流功率测量系统设计与实践
  • 收藏必看|2026 新版程序员转型大模型指南,零基础也能稳步入行
  • 收藏必看|2026版AI Agent爆发风口!程序员小白转行高薪大模型赛道指南
  • 收藏必看 2026 版|Agent 核心技术范式迭代演变与深度技术思考
  • 基于STM32WL与LoRa的远程患者监护系统:硬件设计、算法实现与嵌入式开发全解析