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

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 既灵活又高效:镜像保证环境一致性,容器提供隔离运行环境,卷确保数据不丢失。

http://www.gsyq.cn/news/111773.html

相关文章:

  • Nano Banana Pro:设计师的竞争对手还是强有力的助手?
  • Python | K折交叉验证的参数优化的随机森林RF及SHAP可解释性分析回归预测算法
  • Dsc1103ni5-156.25,低抖动 LVDS 振荡器, 现货库存
  • Windows Subsystem for Linux (WSL) 介绍
  • java计算机毕业设计幸福社区疫苗预约管理系统 乐居家园免疫接种预约平台 安康街道疫苗接种智慧调度系统
  • LobeChat能否支持太空旅行规划?星际航线与生存条件模拟
  • java计算机毕业设计洗衣店信息管理系统 智净连锁门店运营平台 云洗门店业务中枢
  • 【毕业设计】基于JavaWeb的兽医站管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 串口通信基础知识
  • 时间紧,任务重?MCU核心库+示例速览
  • MySQL
  • LMX2581ESQX/NOPB,3.8 GHz 宽带频率合成器, 现货库存
  • Java计算机毕设之基于java+springboot+vue的二手儿童绘本交易系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 【课程设计/毕业设计】基于javaweb的图书管理系统基于javaweb的在线图书借阅管理系统【附源码、数据库、万字文档】
  • ADP2108AUJZ-2.5-R7,峰值效率可达95%的600mA降压转换器, 现货库存
  • 建造者模式-创建型
  • TypedArray 详解
  • 【课程设计/毕业设计】基于Java兽医站管理系统基于JavaWeb的兽医站管理系统的设计与实现【附源码、数据库、万字文档】
  • DNP3.0学习记录
  • kanass全面介绍(12) - 如何自定义事项类型,满足个性化需求
  • 打了一堆板子,才发现是VDD_EXT的锅
  • 28.封装 map set (下)
  • 还买啥USB网卡~直接开启RNDIS就行
  • 2026年EOR名义雇主服务优势TOP8对比榜单,助力全球化布局与用工优化
  • 实用指南:(113页PPT)西门子制造业研发工艺协同平台及制造平台整体规划(附下载方式)
  • Vue低代码平台实测红黑榜:别让“伪效率“消耗你的团队
  • 【课程设计/毕业设计】基于SpringBoot+Vue茶叶销售系统的设计与实现基于Java语言的茶叶销售系统的前端设计与实现【附源码、数据库、万字文档】
  • 构建高效测试体系:测试文档编写规范详解
  • 第四章算法作业
  • 版本升级|Origin 2026 科学绘图与数据分析软件