news 2026/8/3 15:58:50

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/7/30 21:52:22

sward全面介绍(13) - 集成Ldap,使用Ldap用户登录sward

集成ldap用户功能划入社区版本,本篇文章将全面介绍如何在sward中集成ldap用户并实现ldap用户登录sward。1、配置Ldap进入系统设置->用户->用户目录,点击Ldap后的配置按钮,填写Ldap的配置信息。参数说明类型选择Ldap服务器类型AD/LDAP名…

作者头像 李华
网站建设 2026/8/2 12:41:24

高效RANSAC

GitHub - ShiPC-AI/TCF: [RAL 2024] RANSAC Back to SOTA: A Two-Stage Consensus Filtering for Real-Time 3D Registration

作者头像 李华
网站建设 2026/8/3 1:55:58

建造者模式-创建型

一、建造者模式 1.1、核心思想 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。<>&#xff08;说人话&#xff09;创建步骤复杂&#xff0c;需要过多参数&#xff0c;用户只提供自己的参数&#xff0c;只关心最后的结果&#xff…

作者头像 李华
网站建设 2026/8/2 20:50:53

Java毕设选题推荐:基于Javaweb的二手儿童绘本交易系统设计与实现少儿图书循环共享租赁系统【附源码、mysql、文档、调试+代码讲解+全bao等】

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

作者头像 李华
网站建设 2026/8/2 5:48:24

客服快捷回复软件 v5.0:客服高效沟通工具

客服快捷回复软件是客服日常工作的高效助力&#xff0c;支持话术搜索、图文合并发送&#xff0c;单机版自带自动备份功能&#xff0c;还能适配各类应用窗口自动填充&#xff0c;v5.0 新增吸附与多方式搜索&#xff0c;让客服话术调用更便捷。软件核心功能介绍作为一款专为客服设…

作者头像 李华
网站建设 2026/8/2 23:10:46

三相并网环路调试记录

目录 一、调试背景 二、核心异常现象 三、前期尝试措施 四、问题定位过程 五、解决措施及效果 六、根本原因分析 七、调试总结 一、调试背景 调试对象为三相逆变器并网环路&#xff0c;核心目标是实现 PQ&#xff08;有功 / 无功&#xff09;调节稳定、电流环控制正常&…

作者头像 李华