news 2026/5/16 20:02:15

Docker 整体架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 整体架构

我来详细介绍 Docker 的整体架构:

Docker 架构图

┌─────────────────────────────────────────────────────────┐ │ Docker Client │ │ (docker CLI / Docker Desktop) │ └────────────────────┬────────────────────────────────────┘ │ REST API ↓ ┌─────────────────────────────────────────────────────────┐ │ Docker Daemon (dockerd) │ │ ┌──────────────────────────────────────────────────┐ │ │ │ API Server │ │ │ └──────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ Images Containers Networks Volumes │ │ │ └──────────────────────────────────────────────────┘ │ └────────────────────┬────────────────────────────────────┘ │ ↓ ┌─────────────────────────────────────────────────────────┐ │ containerd │ │ (容器运行时 - 高级运行时) │ └────────────────────┬────────────────────────────────────┘ │ ↓ ┌─────────────────────────────────────────────────────────┐ │ runc │ │ (容器运行时 - 低级运行时) │ │ (OCI Runtime Specification) │ └────────────────────┬────────────────────────────────────┘ │ ↓ ┌─────────────────────────────────────────────────────────┐ │ Linux Kernel (Host OS) │ │ Namespaces | Cgroups | Union FS | Network │ └─────────────────────────────────────────────────────────┘

核心组件详解

1.Docker Client (客户端)

  • 用户与 Docker 交互的界面
  • 常见形式:
    • dockerCLI 命令行工具
    • Docker Desktop GUI
    • Docker Compose
  • 通过 REST API 与 Docker Daemon 通信
# 客户端命令示例docker run nginx docker build -t myapp.docker-compose up

2.Docker Daemon (dockerd)

  • Docker 的核心后台服务进程
  • 主要职责:
    • 监听 Docker API 请求
    • 管理 Docker 对象(镜像、容器、网络、卷)
    • 与其他 Docker daemons 通信(Swarm 模式)
    • 调用 containerd 来管理容器生命周期

3.containerd

  • 工业标准的容器运行时
  • 职责:
    • 镜像管理(拉取、推送、存储)
    • 容器生命周期管理
    • 网络和存储管理
    • 调用 runc 启动容器
  • 独立于 Docker,也被 Kubernetes 使用

4.runc

  • OCI (Open Container Initiative) 标准实现
  • 真正创建和运行容器的工具
  • 轻量级、低级别的容器运行时
  • 与 Linux 内核直接交互

5.Linux 内核特性

Namespaces (命名空间)- 提供隔离

  • PID: 进程隔离
  • NET: 网络隔离
  • IPC: 进程间通信隔离
  • MNT: 文件系统挂载隔离
  • UTS: 主机名隔离
  • USER: 用户隔离

Cgroups (控制组)- 资源限制

  • CPU 限制
  • 内存限制
  • 磁盘 I/O 限制
  • 网络带宽限制

Union FS (联合文件系统)

  • OverlayFS, AUFS, Btrfs 等
  • 实现镜像分层存储

工作流程示例

用户执行: docker run -d nginx 1. Docker Client ↓ 发送 REST API 请求 2. Docker Daemon ↓ 检查本地是否有 nginx 镜像 ↓ 如果没有,从 Registry 拉取 ↓ 调用 containerd 3. containerd ↓ 准备容器运行环境 ↓ 准备镜像层 ↓ 调用 runc 4. runc ↓ 创建 namespaces ↓ 设置 cgroups ↓ 启动容器进程 5. Container 运行中 ↓ 进程在隔离环境中执行

镜像存储架构

┌─────────────────────────────────┐ │ Docker Image │ │ ┌───────────────────────────┐ │ │ │ Layer 4: App files │ │ ← 可写层 (容器层) │ ├───────────────────────────┤ │ │ │ Layer 3: Dependencies │ │ │ ├───────────────────────────┤ │ ← 只读层 (镜像层) │ │ Layer 2: Runtime │ │ │ ├───────────────────────────┤ │ │ │ Layer 1: Base OS │ │ │ └───────────────────────────┘ │ └─────────────────────────────────┘

网络架构

┌──────────────────────────────────────┐ │ Docker Network Types │ ├──────────────────────────────────────┤ │ • bridge (默认) │ │ • host (共享主机网络) │ │ • none (无网络) │ │ • overlay (跨主机通信) │ │ • macvlan (分配 MAC 地址) │ └──────────────────────────────────────┘

数据存储架构

容器数据持久化方式: 1. Volumes (推荐) ├─ Docker 管理 └─ 存储位置: /var/lib/docker/volumes/ 2. Bind Mounts ├─ 挂载主机目录 └─ 完全控制路径 3. tmpfs Mounts └─ 内存存储,临时数据

关键设计原则

  1. 客户端-服务器架构: Client 和 Daemon 可以在不同机器上
  2. 分层架构: 每层职责明确,可独立替换
  3. 标准化: 遵循 OCI 标准,保证兼容性
  4. 插件化: 网络、存储驱动可插拔
  5. 安全隔离: 基于 Linux 内核特性实现容器隔离

这种架构设计使 Docker 既强大又灵活,能够高效地管理和运行容器化应用。

我来解释一下 Docker 中这三个核心概念的关系:

基本定义

Images (镜像)

  • 只读的模板,包含运行应用所需的代码、运行时、库、环境变量和配置文件
  • 类似于"类"或"安装包"的概念
  • 通过 Dockerfile 构建或从 Docker Hub 拉取

Container (容器)

  • 镜像的运行实例
  • 类似于"对象"或"运行中的进程"
  • 是镜像的可写层,容器删除后数据也会丢失

Volumes (卷)

  • Docker 管理的持久化存储机制
  • 独立于容器生命周期,容器删除后数据仍然保留
  • 用于数据持久化和容器间数据共享

三者关系

Images (镜像) --实例化--> Container (容器) --挂载--> Volumes (卷) ↓ ↓ ↓ 只读模板 运行实例 持久化存储 可复用 临时的 永久的

实际例子

# 1. 拉取镜像docker pull nginx:latest# 2. 创建卷docker volume create my-data# 3. 从镜像创建容器并挂载卷docker run -d\--name my-nginx\-v my-data:/usr/share/nginx/html\nginx:latest

在这个例子中:

  • nginx:latestImage
  • my-nginx是运行的Container
  • my-dataVolume,用于持久化网站数据

关键区别

  • Image → Container: 一对多关系,一个镜像可以创建多个容器
  • Volume → Container: 多对多关系,一个卷可以被多个容器共享
  • 数据持久性: Image(不变) > Volume(持久) > Container(临时)

这种设计让 Docker 既灵活又高效:镜像保证环境一致性,容器提供隔离运行环境,卷确保数据不丢失。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 0:17:54

用于氧化石墨烯的多模态表征与激光还原图案化的共聚焦显微技术

氧化石墨烯(GO)是制备导电还原氧化石墨烯(rGO)的重要前驱体,在柔性电子、储能等领域应用广泛。激光还原因无掩模、局部精准的优势成为 GO 图案化关键技术,但传统方法难以实时观察还原过程,制约机…

作者头像 李华
网站建设 2026/5/11 17:24:45

3CTEST解析8/20μs冲击电流测试的多样性挑战与冲击电流发生器选型策略

一、冲击电流波简述冲击电流波主要分为两类:第一类为指数波,包括1/20μs、4/10μs、8/20μs、30/80μs、10/350μs、10/1000μs等。第二类为矩形方波,常见冲击方波的峰值持续时间在500μs至3200μs之间。冲击电流发生器是能够产生上述冲击电流…

作者头像 李华
网站建设 2026/5/16 13:14:19

Java计算机毕设之基于javaweb的在线图书借阅管理系统:图书查询、借阅信息、借阅历史(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/15 15:31:56

排序-堆排序

一、堆排序 1.1、堆的基本概念 堆结构是用数组实现的完全二叉树完全二叉树中如果每棵子树的最大值都在顶部就是大根堆—升序完全二叉树中如果每棵子树的最小值都在顶部就是小根堆—降序优先级队列的实现就是堆结构 1.2、完全二叉树的数组表示 每层都是满的或者每层都是从左到右…

作者头像 李华
网站建设 2026/5/11 15:44:15

FOTA升级进阶指南:文件系统直接升级+串口分段升级

FOTA(Firmware Over-The-Air)是固件远程升级的简称,用于设备固件的远程更新和维护。 主要优势包括: 远程维护: 无需现场操作即可完成设备固件更新; 故障修复: 快速修复已部署设备的软件缺陷&a…

作者头像 李华