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

第二部分-Docker核心原理——06. Docker 架构深度解析

06. Docker 架构深度解析1. Docker 整体架构Docker 采用 C/S客户端-服务器架构由 Docker Client、Docker Daemon、containerd、runc 等多个组件协同工作。┌─────────────────────────────────────────────────────────────────────────┐ │ Docker 整体架构 │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────┐ ┌─────────────────────────┐│ │ │ Docker Client │ │ Docker Registry ││ │ │ │ │ ││ │ │ ┌─────────────┐ │ REST API │ ┌───────────────────┐ ││ │ │ │ docker CLI │─┼───────────────────────▶│ │ Docker Hub │ ││ │ │ └─────────────┘ │ │ │ 私有仓库 │ ││ │ │ │ │ └───────────────────┘ ││ │ │ ┌─────────────┐ │ │ ││ │ │ │ REST API │ │ └─────────────────────────┘│ │ │ │ Client │─┼─────┐ │ │ │ └─────────────┘ │ │ │ │ └─────────────────┘ │ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Docker Daemon (dockerd) │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ │ │ image management │ │ │ │ │ │ container management │ │ │ │ │ │ network management │ │ │ │ │ │ volume management │ │ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ gRPC │ │ │ │ ▼ │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ │ │ containerd │ │ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ container lifecycle management │ │ │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ runc │ │ │ │ │ │ │ │ (OCI 运行时实际创建容器进程) │ │ │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘2. 各组件详解2.1 Docker ClientDocker 客户端是与用户交互的入口负责接收用户命令并传递给 Docker Daemon。# 客户端常用操作# 默认连接方式Unix Socket (/var/run/docker.sock)dockerversion# 查看客户端和服务器版本dockerinfo# 查看系统信息# 连接到远程 Dockerdocker-Htcp://192.168.1.100:2375psexportDOCKER_HOSTtcp://192.168.1.100:2375dockerps# 使用 SSH 连接docker-Hssh://userremote-hostps# 客户端配置# ~/.docker/config.json{auths:{},HttpHeaders:{},psFormat:table {{.Names}}\t{{.Image}},imagesFormat:table {{.Repository}}\t{{.Tag}}}2.2 Docker Daemon (dockerd)Docker 守护进程是 Docker 架构的核心负责管理容器、镜像、网络、存储等资源。# 查看守护进程状态systemctl statusdocker# 守护进程配置 /etc/docker/daemon.json{debug:true,log-level:info,data-root:/var/lib/docker,exec-opts:[native.cgroupdriversystemd],registry-mirrors:[https://docker.mirrors.ustc.edu.cn],insecure-registries:[myregistry.com:5000],storage-driver:overlay2,max-concurrent-downloads:10,max-concurrent-uploads:5,log-driver:json-file,log-opts:{max-size:10m,max-file:3},labels:[nodeproduction],hosts:[unix:///var/run/docker.sock,tcp://0.0.0.0:2375]}# 重启守护进程sudosystemctl daemon-reloadsudosystemctl restartdocker# 查看守护进程日志journalctl-fudocker.service2.3 containerdcontainerd 是容器运行时管理组件负责容器的生命周期管理。┌─────────────────────────────────────────────────────────────┐ │ containerd 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ containerd │ │ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ gRPC API │ │ Metrics │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ │ │ │ │ ▼ ▼ │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ │ │ Core Components │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ │ │ Bundle │ │ Runtime │ │ Image │ │ │ │ │ │ │ │ Service │ │ Service │ │ Service │ │ │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ └─────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ │ │ shim │ │ │ │ │ │ (每个容器一个 shim 进程) │ │ │ │ │ └─────────────────────┬───────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ │ │ runc │ │ │ │ │ │ (OCI 运行时创建容器) │ │ │ │ │ └─────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘# 查看 containerd 状态systemctl status containerd# containerd 配置 /etc/containerd/config.toml# 生成默认配置containerd config defaultconfig.toml# 使用 ctr 直接操作调试用ctr image pull docker.io/library/nginx:latest ctr imagelsctr container create docker.io/library/nginx:latesttesttrtask starttestctr tasklsctr taskkilltest2.4 runcrunc 是 OCI 标准的容器运行时负责实际创建和运行容器。# runc 是低层工具通常不直接使用# 查看 runc 版本runc--version# runc 容器运行时目录ls-la/run/containerd/io.containerd.runtime.v2.task/default/# 查看容器进程可以看到 runc 启动的进程psaux|grep-Erunc|containerd-shim3. 组件协作流程3.1 容器启动流程┌─────────────────────────────────────────────────────────────┐ │ 容器启动完整流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 用户 docker run 命令 │ │ │ │ │ ▼ │ │ Docker Client 解析命令 │ │ │ │ │ ▼ (HTTP/REST API) │ │ Docker Daemon 接收请求 │ │ │ │ │ ├──▶ 检查镜像是否存在 │ │ │ │ │ │ │ └──▶ 若不存在则从 Registry 拉取 │ │ │ │ │ ▼ │ │ 创建容器配置 │ │ │ │ │ ▼ (gRPC) │ │ containerd 接管 │ │ │ │ │ ├──▶ 创建 OCI Bundle (容器文件系统) │ │ ├──▶ 准备 rootfs │ │ └──▶ 创建容器目录 │ │ │ │ │ ▼ │ │ containerd-shim 启动 │ │ │ │ │ ▼ │ │ runc create (创建容器进程) │ │ │ │ │ ▼ │ │ runc start (启动容器) │ │ │ │ │ ▼ │ │ 容器运行中 │ │ │ └─────────────────────────────────────────────────────────────┘3.2 容器停止流程┌─────────────────────────────────────────────────────────────┐ │ 容器停止流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ docker stop │ │ │ │ │ ▼ │ │ Docker Daemon 收到停止请求 │ │ │ │ │ ├──▶ 发送 SIGTERM 信号给容器主进程 │ │ │ │ │ ├──▶ 等待 graceful 超时时间 (默认10秒) │ │ │ │ │ └──▶ 若未退出发送 SIGKILL 强制杀死 │ │ │ │ │ ▼ │ │ containerd 通知 runc 停止容器 │ │ │ │ │ ▼ │ │ runc 杀死容器进程 │ │ │ │ │ ▼ │ │ containerd-shim 进程退出 │ │ │ │ │ ▼ │ │ 容器状态变为 Exited │ │ │ └─────────────────────────────────────────────────────────────┘4. 进程模型# 查看 Docker 相关进程psaux|grep-Edockerd|containerd|runc|docker-proxy# 进程关系示例# UID PID PPID COMMAND# root 1234 1 /usr/bin/dockerd# root 5678 1234 /usr/bin/containerd# root 9012 5678 /usr/bin/containerd-shim-runc-v2 -namespace moby -id container-id# root 3456 9012 /usr/bin/runc# root 7890 3456 nginx: master process# 查看容器对应的进程dockerinspect--format{{.State.Pid}}container_name# 通过宿主机 PID 查看容器进程ps-pPID-opid,comm,args# 进入容器的命名空间nsenter-tPID-nipaddr5. 存储驱动# 查看当前存储驱动dockerinfo|grepStorage Driver# 支持的存储驱动# - overlay2 (推荐Linux 内核 4.0)# - aufs (旧版 Ubuntu)# - devicemapper (CentOS/RHEL)# - overlay (被 overlay2 取代)# - btrfs, zfs, vfs# docker 数据目录结构ls-la/var/lib/docker/# ├── containers/ # 容器数据# ├── image/ # 镜像元数据# ├── network/ # 网络配置# ├── overlay2/ # 镜像层数据# ├── volumes/ # 数据卷# ├── builder/ # 构建缓存# └── tmp/ # 临时文件6. 网络模型# Docker 网络组件# docker-proxy: 负责端口映射dockerrun-d-p8080:80 nginx# 查看 docker-proxy 进程psaux|grepdocker-proxy# iptables 规则sudoiptables-tnat-L-n-v# 查看网桥dockernetworklsbrctl show docker0# 网络命名空间ls-la/var/run/docker/netns/# 进入容器的网络命名空间dockerinspect--format{{.State.Pid}}container_namesudonsenter-tPID-nipaddr7. 性能优化配置# /etc/docker/daemon.json 性能相关配置{# 使用 overlay2 驱动storage-driver:overlay2,storage-opts:[overlay2.override_kernel_checktrue,overlay2.size20G],# 并发控制max-concurrent-downloads:10,max-concurrent-uploads:5,# 日志限制log-driver:json-file,log-opts:{max-size:10m,max-file:3,compress:true},# CPU 限制cpu-rt-runtime:950000,cpu-rt-period:1000000,# 实验性功能experimental:true,metrics-addr:0.0.0.0:9323}8. 调试与监控# 开启 debug 模式sudodockerd--debug# 查看守护进程状态dockersystem info# 查看守护进程事件dockersystem events# 查看磁盘使用dockersystemdf# 检查 API 版本dockerversion--format{{.Server.APIVersion}}# 获取 containerd 调试信息ctr version ctr imagelsctr containerls9. 常见问题Q1: dockerd 和 containerd 的区别dockerd高层次的 Docker 守护进程提供镜像管理、网络、卷等功能containerd低层次运行时专注容器生命周期管理Q2: 为什么需要 containerd-shim让容器进程与 containerd 解耦allow 容器退出时 containerd 可以重启保持 stdin/stdout 打开Q3: runc 的作用OCI 规范的具体实现创建容器的实际执行者设置命名空间、Cgroups 等10. 小结C/S 架构Client 通过 REST API 与 Daemon 通信核心组件dockerd、containerd、containerd-shim、runccontainerd 管理镜像、容器生命周期、存储、网络runcOCI 运行时实际创建容器进程模型dockerd → containerd → shim → runc → 容器进程存储驱动默认使用 overlay2

相关文章:

第二部分-Docker核心原理——06. Docker 架构深度解析

06. Docker 架构深度解析 1. Docker 整体架构 Docker 采用 C/S(客户端-服务器)架构,由 Docker Client、Docker Daemon、containerd、runc 等多个组件协同工作。 ┌────────────────────────────────────…...

免费在线PPT制作工具:如何在浏览器中创建专业演示文稿

免费在线PPT制作工具:如何在浏览器中创建专业演示文稿 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing fo…...

保姆级教程:用Gazebo Garden新版为你的PX4无人机仿真‘升级’(Ubuntu 20.04环境)

Gazebo Garden新版深度评测:PX4无人机仿真环境全面升级指南 在无人机开发领域,仿真环境的重要性不言而喻。作为PX4生态中最常用的仿真工具之一,Gazebo经历了从Classic到Garden的架构革新。这次升级绝非简单的版本迭代,而是从渲染引…...

别再用USB 2.0的思维画板子了!USB 3.0硬件设计避坑指南(附FT602Q实战)

从USB 2.0到USB 3.0:硬件工程师必须掌握的五大设计范式升级 当USB 3.0的5Gbps传输速率成为现代设备的标配时,许多硬件工程师仍然在用USB 2.0时代的思维设计电路。这种思维惯性带来的信号完整性问题,往往在项目后期才会暴露——信号抖动超标、…...

量子计算在语言分类中的应用与动态注意力机制解析

1. 量子计算与语言分类的跨界融合 量子计算正在为机器学习领域带来革命性的变化。作为一名长期关注量子算法应用的从业者,我最近深入研究了量子极端学习机(Quantum Extreme Learning Machine, QELM)在语言分类任务中的表现。这项技术最吸引我的地方在于,…...

视频生成中的稀疏注意力优化技术与实践

1. 视频生成中的计算挑战与稀疏注意力技术在当前的AI视频生成领域,Transformer架构已成为主流选择,但其自注意力机制的计算复杂度与序列长度的平方成正比,这给高分辨率视频生成带来了巨大挑战。以一个典型的720p视频生成为例,每帧…...

嘉励物方远心镜头

第一款配上2000万相机可以做到3μm/pixel,精度0.009mm 第二款配上2500万相机可以做到1.23μm/pixel,精度0.004mm...

Cbc整数规划求解器深度解析:混合整数线性规划实战指南

Cbc整数规划求解器深度解析:混合整数线性规划实战指南 【免费下载链接】Cbc COIN-OR Branch-and-Cut solver 项目地址: https://gitcode.com/gh_mirrors/cb/Cbc Cbc(Coin-or Branch and Cut)是一款功能强大的开源混合整数线性规划求解…...

AI代理工作流框架Primer:结构化引导AI编码,从模糊想法到可运行软件

1. Primer项目概述:用AI代理构建真实软件的“脚手架”如果你和我一样,尝试过让AI编码助手(比如Claude Code、Cursor、Codex)去构建一个完整的项目,大概率会遇到一个共同的困境:任务描述太模糊,A…...

LongLoRA:低成本扩展大模型上下文窗口,实现长文本高效处理

1. 项目概述:当大模型需要“长记忆”时,我们如何低成本地扩展其上下文窗口?在大型语言模型的实际应用中,我们常常会遇到一个瓶颈:模型的“记忆力”不够长。无论是让模型阅读并总结一篇几十页的学术论文,还是…...

保姆级教程:在Debian 12/Ubuntu 22.04上编译安装Nginx 1.28.0,并启用HTTP/3模块

在Debian 12/Ubuntu 22.04上编译安装Nginx 1.28.0并启用HTTP/3模块的完整指南 对于追求性能极致和前沿特性的Web服务部署,编译安装Nginx始终是高级用户的首选方案。特别是在需要启用HTTP/3等新协议支持时,系统仓库中的预编译版本往往无法满足需求。本指南…...

AN/ALR-69A(V) 全数字化雷达告警接收机:技术演进、作战应用与认知电子战升级

目录 摘要 一、系统概述与发展背景 1.1 研制背景 1.2 系统定位 二、系统架构与技术特征 2.1 总体架构设计 2.2 16通道宽带数字接收机 2.3 开放架构与COTS设计 三、核心作战能力 3.1 态势感知与威胁识别 3.2 单平台无源定位(Single-Ship Geolocation&#…...

告别手动Limit:在Spring Boot 3里用PageHelper优雅处理前端分页请求

告别手动Limit:在Spring Boot 3里用PageHelper优雅处理前端分页请求 现代Web应用中,分页查询几乎是每个数据密集型功能的标配需求。想象一下这样的场景:你的电商平台需要展示10万件商品,社交媒体要呈现用户动态,或者后…...

GEEKOM MiniAir 11迷你主机评测:Jasper Lake平台的多面手

1. GEEKOM MiniAir 11迷你主机深度评测:Jasper Lake平台的全能选手作为一名长期关注迷你PC市场的技术爱好者,最近我有机会对GEEKOM MiniAir 11进行了全面测试。这款搭载Intel Celeron N5095 Jasper Lake处理器的迷你主机给我留下了深刻印象——它不仅拥有…...

第三方信创测试费用要多少?

做第三方信创测试到底要花多少钱?根据当前行业普遍报价,一次完整的信创适配与兼容性测试费用通常在5万至30万元之间,具体金额取决于产品类型、测试深度和认证等级。 1. 内部自测与第三方测试的费用差异很大。企业自己搭建信创环境测试看似免费…...

智能体技能化开发:模块化设计、核心实现与主流框架集成指南

1. 项目概述:从“技能”视角重新审视智能体开发最近在开源社区里,我注意到一个名为aneym/agent-skills的项目热度在悄然攀升。乍一看,这似乎又是一个关于AI智能体(Agent)的代码库,但当你真正深入进去&#…...

【2026年最新600套毕设项目分享】基于微信小程序的校园二手交易平台(30238)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

通过Python快速编写脚本调用Taotoken提供的多种大模型

通过Python快速编写脚本调用Taotoken提供的多种大模型 1. 环境准备 开始前请确保已安装Python 3.7或更高版本。推荐使用虚拟环境管理依赖,可通过以下命令创建并激活虚拟环境: python -m venv taotoken-env source taotoken-env/bin/activate # Linux…...

GPU张量计算优化:CUTE布局代数原理与应用

1. CUTE布局代数与GPU张量计算概述在GPU加速计算领域,数据布局对性能的影响常常被低估。传统观点认为只要算法正确,硬件就能自动优化执行效率,但现代GPU架构(如NVIDIA的Ampere和Hopper)的实际表现打破了这一认知。特别…...

如何让AI成为你的私人中医顾问?仲景大语言模型深度解析

如何让AI成为你的私人中医顾问?仲景大语言模型深度解析 【免费下载链接】CMLM-ZhongJing 首个中医大语言模型——“仲景”。受古代中医学巨匠张仲景深邃智慧启迪,专为传统中医领域打造的预训练大语言模型。 The first-ever Traditional Chinese Medicine…...

从菜单式MES到工业智能体:基于Hermes Agent+MCP的智能助手实战指南(完整源代码)

目录 为什么 MES 需要从“系统界面”进化为“业务助手” 设计哲学:工业 Agent 不是套壳聊天机器人 技术选型:为什么选择 Hermes Agent + MCP 总体架构:四层解耦与认知-动作分离 核心模块一:数据服务层,先构造一个可验证的工业世界 核心模块二:MCP 工具层,把业务能力暴露…...

设计师必看:从iPhone 15 Pro Max到初代iPhone,屏幕尺寸与分辨率演变史如何影响你的设计稿?

iPhone屏幕进化史:如何用设计思维驾驭硬件变革 2007年那个改变世界的早晨,乔布斯从牛仔裤口袋掏出第一代iPhone时,3.5英寸的屏幕在当时看来已经足够震撼。谁能想到十七年后,这块小小的矩形会演变成6.7英寸的动态画布?作…...

ROFL播放器:英雄联盟回放文件终极分析指南,轻松查看比赛数据

ROFL播放器:英雄联盟回放文件终极分析指南,轻松查看比赛数据 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在…...

MDB Tools深度实战:如何在Linux和macOS上高效操作Access数据库的完整解决方案

MDB Tools深度实战:如何在Linux和macOS上高效操作Access数据库的完整解决方案 【免费下载链接】mdbtools MDB Tools - Read Access databases on *nix 项目地址: https://gitcode.com/gh_mirrors/md/mdbtools 在跨平台数据迁移和集成工作中,Micro…...

CAI框架:AI智能体如何重塑自动化网络安全攻防实践

1. 项目概述:CAI,一个为安全从业者打造的AI驱动框架如果你是一名网络安全工程师、渗透测试人员,或者只是对AI如何改变安全攻防格局感到好奇,那么你很可能已经注意到了这个趋势:传统的、依赖人工逐条命令执行和手动分析…...

Docker Desktop无法安装于统信UOS?替代方案已验证:Podman+Buildah国产化调试组合拳(附离线部署包SHA256校验码)

更多请点击: https://intelliparadigm.com 第一章:Docker 国产化调试 国产化环境适配要点 在信创生态下,Docker 调试需优先适配国产 CPU 架构(如鲲鹏、飞腾)、操作系统(统信 UOS、麒麟 V10)及…...

飞书日历API实战:基于Node.js与OAuth构建自动化日程助手

1. 项目概述:一个能听懂人话的飞书日历助手 最近在折腾自动化流程,发现一个挺高频的需求:把那些零散的日程安排,从聊天对话里直接同步到日历。比如同事在飞书群里说“下周三下午三点开个会”,或者自己随手记的“周五记…...

LazySlide·可访问且可互操作的全片图像分析

传统全视野病理图像(WSI)虽包含丰富的组织结构信息,但长期难以与单细胞和空间转录组等数据整合,限制了其在多组学研究中的价值。与此同时,现有工具生态割裂、使用门槛高,也阻碍了病理图像在计算生物学中的普…...

新手福音:用快马零代码基础制作九么动漫版本介绍页

作为一个刚接触编程的新手,想要制作一个动漫介绍网站可能会觉得无从下手。但通过InsCode(快马)平台,我发现这个过程可以变得非常简单有趣。下面我就分享一下如何零基础制作"九么1.0.31免费版动漫"介绍页的完整过程。 首先明确页面需求 作为一个…...

别再只会看控制台了!用Docker+SEQ给你的.NET Core应用装个‘日志黑匣子’

构建企业级日志中枢:DockerSEQ在.NET Core中的高阶实践 当线上服务突然出现性能断崖式下跌时,大多数开发团队的第一反应是紧急翻查服务器控制台日志。这种救火式排查往往陷入两个困境:要么日志被滚动输出覆盖,关键错误信息消失无…...