深入Docker架构——C/S模式解析

深入Docker架构------C/S模式解析


🎯 系列介绍

🔔 本文是 《Docker实战入门与部署指南:从核心概念到网络与数据管理》 系列的第四篇!

本系列将从零开始,带你系统性地学习 Docker 的核心概念、安装部署、容器管理、镜像制作、数据持久化与网络配置,最终具备构建和运维容器化应用的能力。

⚠️ 该系列所有涉及的配置脚本、Dockerfile示例和离线安装包都可以私信博主免费获取。


📚 系列篇章总览


🚀 系列最终成果
当你完整学完并实操本系列,你将拥有:

✅ 扎实的Docker理论基础,清晰理解容器、镜像、仓库等核心概念。
✅ 独立部署Docker环境的能力,并完成常用配置优化(如镜像加速)。
✅ 熟练的容器与镜像管理技能,能够进行日常的运维操作。
✅ 制作自定义业务镜像的能力,为应用容器化打下基础。
✅ 解决数据持久化问题的方案,确保应用数据安全。
✅ 配置复杂容器网络的能力,实现容器内外的灵活通信。

真正实现: 概念理解 → 环境搭建 → 日常操作 → 镜像定制 → 数据管理 → 网络配置,一站式掌握Docker核心技能。


一:核心概念

1.1 架构概览

Docker 采用 客户端-服务器(Client/Server)模式,主要分为两个部分:

  1. Docker Client(客户端)
    • 你在命令行或脚本里运行的 docker 命令
    • 负责 接收用户操作指令,发送给 Docker Daemon
    • 可以在本机,也可以远程连接 Docker Host
  2. Docker Daemon(服务器 / docker engine)
    • 背后的守护进程 dockerd
    • 负责 容器生命周期管理
      • 创建容器
      • 启动 / 停止 / 删除容器
      • 镜像拉取 / 构建 / 删除
      • 网络 / 存储管理
    • 接收客户端请求,通过 REST API 执行

1.2 核心组件详解

1)Docker Client(客户端)

功能职责:

  • 接收用户输入的命令(docker run, docker build等)
  • 解析并验证命令参数
  • 通过 REST API 将请求发送到 Docker Daemon
  • 接收响应并格式化输出给用户

通信方式:

  • 默认使用 Unix 套接字:/var/run/docker.sock
  • 支持 TCP 连接进行远程管理
  • 支持 HTTP/HTTPS 协议

2)Docker Daemon(守护进程/服务器)

核心进程:
dockerd

主要职责:

  • 镜像管理(拉取、构建、存储、分发)
  • 容器生命周期管理(创建、启动、停止、删除)
  • 网络管理(网络创建、连接、配置)
  • 数据卷管理(创建、挂载、备份)
  • 接收并处理客户端的 REST API 请求

关键特性:

  • 常驻内存的守护进程
  • 支持插件化架构(网络驱动、存储驱动、日志驱动等)
  • 提供 RESTful API 接口

3)Docker Registry(镜像仓库)

作用:

存储和分发 Docker 镜像

分类:
公共仓库:

  • Docker Hub(默认)
  • Quay.io
  • 阿里云镜像服务等

私有仓库:

  • Harbor
  • Docker Registry
  • Nexus Repository等

二:工作流程

2.1 完整命令执行流程

以下以 docker run -d --name web -p 80:80 nginx:latest命令为例,详细解析执行流程:

  1. Docker Client
    • 解析命令
    • 打包请求,发送给 Docker Daemon(默认 Unix socket /var/run/docker.sock 或 TCP)
  2. Docker Daemon
    • 接收请求
    • 拉取镜像(如果本地不存在)
    • 创建容器(分配 namespace、cgroup)
    • 启动容器主进程
    • 返回执行结果给 Client
  3. Docker Client
    • 显示日志 / 输出给用户
    • 维持交互(-it 交互模式)

2.2 各阶段详细说明

1)阶段1:客户端处理(1-3步)

bash 复制代码
# 客户端实际执行的API调用
curl --unix-socket /var/run/docker.sock \
  -X POST "http:/v1.41/containers/create?name=web" \
  -H "Content-Type: application/json" \
  -d '{
    "Image": "nginx:latest",
    "HostConfig": {
      "PortBindings": {"80/tcp": [{"HostPort": "80"}]}
    }
  }'

2)守护进程处理(4-9步)

  1. 请求验证:检查API版本、参数合法性
  2. 镜像检查 :检查本地 /var/lib/docker/image/overlay2/repositories.json
  3. 镜像拉取:如果镜像不存在,从Docker Hub拉取
  4. 容器配置
    • 网络配置:创建veth pair,连接到docker0网桥
    • 存储配置:创建容器可写层
    • 资源限制:设置cgroup参数

3)阶段3:容器运行时创建(10-13步)

  1. Container调用 :通过gRPC调用containerd的 create 方法
  2. Runc执行 :调用 runc create 命令
  3. 内核交互
    • unshare():创建新的命名空间
    • mount():挂载rootfs
    • cgroupfs:设置资源限制
  4. 进程启动:执行容器入口点(nginx)

总结

一句话总结:Docker采用经典的客户端-服务器架构,dockerd守护进程通过REST API接收客户端指令,完成从镜像拉取到容器运行的全生命周期管理。

理解Docker的C/S架构是掌握容器化技术的基础,为后续学习Kubernetes等编排工具打下坚实基础。掌握Daemon配置和远程访问安全,能显著提升企业级容器环境的管理能力。

相关推荐
猫头虎3 小时前
如何使用Docker部署OpenClaw汉化中文版?
运维·人工智能·docker·容器·langchain·开源·aigc
醉风塘3 小时前
Linux进程管理:深度解析ps -ef命令及其高级应用
linux·运维·服务器
不做无法实现的梦~3 小时前
PX4各个模块的作用(3)
linux·stm32·嵌入式硬件·机器人·自动驾驶
啊森要自信3 小时前
CANN runtime 深度解析:异构计算架构下运行时组件的性能保障与功能增强实现逻辑
深度学习·架构·transformer·cann
会周易的程序员3 小时前
openplc runtimev4 Docker 部署
运维·c++·物联网·docker·容器·软件工程·iot
WindrunnerMax3 小时前
从零实现富文本编辑器#11-Immutable状态维护与增量渲染
前端·架构·前端框架
不爱缺氧i4 小时前
ubuntu离线安装mariadb
linux·ubuntu·mariadb
vx-bot5556664 小时前
企业微信接口在金融级业务场景下的合规架构与实践
金融·架构·企业微信
jerwey4 小时前
OpenClaw 架构与组件说明
架构·openclaw