深入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配置和远程访问安全,能显著提升企业级容器环境的管理能力。

相关推荐
爱莉希雅&&&9 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
张忠琳9 小时前
【kubernetes v1.21】(kubelet 1)Kubelet 核心架构与启动流程
云原生·架构·kubernetes·kubelet
z200509309 小时前
【linux学习】深入理解linux文件I/O,从C标准库到内核态
linux·学习·操作系统
用户987409238879 小时前
超算中心 高性能计算 htc命令module use的作用
架构
AI科技星10 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
weixin_3077791310 小时前
面向高性能保密计算的定制 Linux 系统构建与自动部署方案
linux·安全·网络安全·性能优化·系统安全
__log10 小时前
如何优雅地“借鉴”任何网站的设计系统
人工智能·架构·知识图谱
着迷不白10 小时前
五、文本处理工具+正则表达式
linux·运维·服务器
载数而行52010 小时前
Linux 4常用指令(文件/时间/搜索查找/压缩解压指令)
linux
宇明一不急10 小时前
k8s HPA storageclass configmap
云原生·容器·kubernetes