Docker 完整知识体系图

一、总览架构

html 复制代码
┌─────────────────────────────────────────────────────────────┐
│                      Docker 知识体系全景图                      │
├──────────┬──────────┬──────────┬──────────┬─────────────────┤
│ 核心概念  │ 底层技术  │ 架构组件  │ 实战操作  │ 进阶与生态       │
├──────────┼──────────┼──────────┼──────────┼─────────────────┤
│•镜像      │•Namespace│•Client   │•镜像管理  │•Docker Compose  │
│•容器      │•Cgroups  │•Daemon   │•容器管理  │•Docker Swarm    │
│•仓库      │•UnionFS  │•Registry │•网络管理  │•Kubernetes      │
│•数据卷    │•Linux内核│•Network  │•数据卷管理 │•安全加固        │
│          │          │•Graph    │•日志监控  │•CI/CD集成       │
└──────────┴──────────┴──────────┴──────────┴─────────────────┘

二、核心概念层(基础语言)

html 复制代码
Docker 核心概念
│
├── 📦 Image(镜像)------ 只读模板/蓝本
│   ├── 分层结构(Layer):每层只存储与前一层的差异
│   ├── 只读性:构建完成后不可修改
│   ├── 包含:应用程序 + 运行环境 + 系统库 + 配置文件 + 依赖包
│   ├── 存储类型:Overlay2(默认/主流)、AUFS、Device Mapper、Btrfs
│   └── 构建方式:Dockerfile 构建 / docker pull 拉取 / docker commit 提交
│
├── 📦 Container(容器)------ 镜像的运行实例
│   ├── 可读可写层:在镜像只读层之上添加可写层
│   ├── 生命周期:创建 → 启动 → 运行 → 停止 → 删除
│   ├── 状态:running / stopped / paused / exited
│   └── 类比:镜像 = 类(Class),容器 = 对象(Object)
│
├── 📦 Registry(仓库)------ 镜像分发与共享
│   ├── 公有仓库:Docker Hub(官方)、阿里云、网易云、华为云
│   ├── 私有仓库:Harbor、Docker Registry(企业内部)
│   └── 核心交互:docker pull / docker push / docker search
│
├── 📦 Volume(数据卷)------ 持久化存储
│   ├── 解决容器删除数据丢失问题
│   ├── 类型:named volume / bind mount / tmpfs
│   └── 数据独立于容器生命周期
│
└── 🌐 Network(网络)------ 容器通信桥梁
    ├── bridge(默认网桥)
    ├── host(宿主机网络)
    ├── overlay(跨主机 overlay 网络)
    ├── none(无网络)
    └── macvlan / ipvlan(高级网络)

三、底层核心支撑技术(灵魂基石)

html 复制代码
Linux 内核原生技术(Docker 无内核修改,轻量级核心原因)
│
├── 🔒 Namespace(隔离)------ 6 大命名空间
│   ├── PID Namespace ------ 进程隔离(容器看不到其他容器进程)
│   ├── Network Namespace ------ 网络隔离(独立网卡/IP/端口)
│   ├── Mount Namespace ------ 文件系统挂载隔离(独立挂载目录)
│   ├── UTS Namespace ------ 主机名/域名隔离(独立 hostname)
│   ├── IPC Namespace ------ 进程间通信隔离(容器间无法直接 IPC)
│   └── User Namespace ------ 用户/用户组隔离(容器内 root ≠ 宿主机 root)
│
├── 📊 Cgroups(控制组)------ 资源限制与统计
│   ├── CPU 限制/权重
│   ├── 内存限制(超出则 OOM Kill)
│   ├── 磁盘 I/O 限制
│   ├── 网络带宽限制
│   └── 特点:硬性约束,防止单容器耗尽宿主机资源
│
└── 📁 UnionFS(联合文件系统)------ 镜像分层存储
    ├── 多个只读层叠加合并为统一文件系统
    ├── 最上层添加可写层,所有写入只发生在可写层
    ├── 常用:Overlay2(Docker 默认,性能最优)、AUFS、Device Mapper
    └── 实现镜像「轻量化、可复用、快速构建」

四、架构组件层(C/S 模式 + 松耦合)

html 复制代码
Docker 架构体系
│
├── 🖥️ Docker Client(客户端)
│   ├── 可执行文件:docker(命令行)
│   ├── 通信方式:tcp://host:port / unix:///var/run/docker.sock / fd://socketfd
│   ├── 请求流程:发送请求 → Daemon处理 → 返回结果
│   └── 通信协议:HTTP / HTTPS
│
├── ⚙️ Docker Daemon(守护进程,dockerd)⭐核心⭐
│   ├── 后台常驻进程,Docker 所有能力的实际执行者
│   ├── 单 Daemon 管理宿主机所有镜像和容器
│   │
│   ├── 📡 Docker Server(请求调度分发)
│   │   ├── 使用 gorilla/mux 创建 URL 路由
│   │   ├── 路由项 = HTTP方法(PUT/POST/GET/DELETE) + URL + Handler
│   │   └── 每个请求创建独立 goroutine 处理
│   │
│   ├── 🔧 Docker Engine(运行引擎)
│   │   ├── 扮演容器存储仓库角色
│   │   ├── 通过 Job(最小工作单元)操纵管理容器
│   │   ├── Handler 映射:如 {"create": daemon.ContainerCreate}
│   │   └── Job 类比 Unix 进程:名称/参数/环境变量/标准I/O/错误处理/返回状态
│   │
│   ├── 📦 Docker Registry(镜像仓库通信模块)
│   │   ├── 三大功能 Job:search / pull / push
│   │   └── 镜像格式:[repository]:[tag]
│   │
│   ├── 💾 Graph(镜像存储管理)
│   │   ├── 保管已下载镜像(含 Dockerfile 构建的)
│   │   ├── Repository → 同类型多个 Image(用 Tag 区分版本)
│   │   ├── GraphDB:基于 SQLite 的图数据库,记录镜像间关系
│   │   └── Driver:Graph 负责存储,Driver 负责执行
│   │
│   ├── 🌐 Network Driver(网络驱动)
│   │   ├── 创建 Docker 环境网桥(docker0)
│   │   ├── 为容器创建虚拟网卡设备
│   │   ├── 分配 IP/端口、端口映射、防火墙策略
│   │   └── bridge / overlay / macvlan 等
│   │
│   ├── ▶️ Exec Driver(执行驱动)
│   │   ├── 通过 libcontainer 实现容器操作
│   │   ├── 创建容器运行命名空间
│   │   ├── 资源使用统计与限制
│   │   └── 容器内部进程的真正运行
│   │
│   └── 📦 Libcontainer(独立容器管理包)
│       └── Network Driver 和 Exec Driver 的底层实现基础
│
└── 📦 Docker Objects(四大核心操作载体)
    ├── Images ------ 镜像
    ├── Containers ------ 容器
    ├── Volumes ------ 数据卷
    └── Networks ------ 网络

五、实战操作层(命令体系)

复制代码
Docker 命令大全
│
├── 📋 镜像操作
│   ├── docker search [imageName]    ------ 搜索镜像
│   ├── docker pull [imageName]     ------ 拉取镜像
│   ├── docker images / docker image ls ------ 查看本地镜像
│   ├── docker rmi [ImageID/Name]  ------ 删除镜像
│   ├── docker build -t "name:tag" . ------ 构建镜像(需 Dockerfile)
│   ├── docker save -o file.tar [image] ------ 导出镜像为 tar
│   ├── docker load < file.tar      ------ 导入镜像
│   └── docker tag [image] [newTag] ------ 给镜像打标签
│
├── 📦 容器操作
│   ├── docker run [options] image   ------ 创建并启动容器
│   │   ├── -i -t:交互式终端
│   │   ├── -d:后台运行
│   │   ├── -p:端口映射(如 -p 8080:80)
│   │   ├── -P:随机映射端口
│   │   ├── --network:指定网络
│   │   ├── -v:挂载数据卷
│   │   ├── --name:指定容器名
│   │   └── -e:设置环境变量
│   ├── docker ps / docker ps -a    ------ 查看运行/全部容器
│   ├── docker start / stop / restart [ID] ------ 启动/停止/重启
│   ├── docker kill [ID]             ------ 强制停止
│   ├── docker rm [ID] / -f         ------ 删除容器
│   ├── docker exec -it [ID] bash   ------ 进入运行中的容器
│   ├── docker logs [ID]            ------ 查看日志
│   ├── docker inspect [ID]         ------ 查看底层信息(JSON)
│   ├── docker top [ID]             ------ 查看容器进程
│   ├── docker stats [ID]           ------ 实时资源统计
│   ├── docker port [ID]            ------ 查看端口映射
│   ├── docker cp [src] [dest]      ------ 容器内外文件拷贝
│   └── docker commit [ID] [newImage] ------ 提交为新镜像
│
├── 🌐 网络操作
│   ├── docker network create -d [driver] [name] ------ 创建网络
│   ├── docker network connect [net] [container] ------ 连接网络
│   ├── docker network ls            ------ 查看网络
│   └── docker network inspect [net] ------ 查看网络详情
│
├── 💾 数据卷操作
│   ├── docker volume create [name] ------ 创建数据卷
│   ├── docker volume ls             ------ 查看数据卷
│   ├── docker volume rm [name]      ------ 删除数据卷
│   └── -v / --mount 挂载方式
│
├── 🔧 其他操作
│   ├── docker info                   ------ 系统信息
│   ├── docker version                 ------ 版本信息
│   ├── docker system prune           ------ 清理
│   ├── docker plugin [install/ls/rm] ------ 插件管理
│   ├── docker secret [create/ls/rm]  ------ 密钥管理
│   ├── docker service [create/ls/rm] ------ 服务管理(Swarm)
│   ├── docker stack [deploy/ls/rm]   ------ 栈管理(Swarm)
│   └── docker swarm [init/join/ca]   ------ 集群管理
│
└── 📄 Dockerfile 指令(构建镜像)
    ├── FROM [image]          ------ 指定基础镜像(必须第一条)
    ├── RUN [command]         ------ 构建时执行命令(安装依赖等)
    ├── CMD ["cmd", "arg"]    ------ 容器启动命令
    ├── ENTRYPOINT ["cmd"]    ------ 容器入口点
    ├── COPY / ADD            ------ 复制文件到镜像
    ├── EXPOSE [port]         ------ 声明暴露端口
    ├── ENV [key=value]       ------ 设置环境变量
    ├── WORKDIR [path]        ------ 工作目录
    ├── VOLUME [path]         ------ 声明数据卷
    ├── USER [user]           ------ 指定用户
    ├── ARG [name=value]      ------ 构建参数
    ├── LABEL [key=value]     ------ 元数据标签
    └── ONBUILD [instruction] ------ 触发时执行(给子镜像用)

六、进阶与生态层

html 复制代码
Docker 进阶生态
│
├── 🔄 容器编排
│   ├── Docker Compose ------ 单机多容器编排(docker-compose.yml)
│   ├── Docker Swarm ------ Docker 原生集群编排
│   └── Kubernetes(K8s)------ 行业标准容器编排(生产首选)
│
├── 🔒 安全加固
│   ├── 镜像签名与验证
│   ├── 最小权限原则(非 root 用户运行)
│   ├── 只读文件系统
│   ├── 资源限制(防容器逃逸)
│   ├── 安全扫描(漏洞检测)
│   ├── 网络隔离策略
│   └── 镜像来源可信验证
│
├── 📊 监控与日志
│   ├── docker stats ------ 实时资源监控
│   ├── docker events ------ 事件监控
│   ├── 日志驱动:json-file / syslog / fluentd / gelf 等
│   ├── 配合 Prometheus + Grafana 监控体系
│   └── 配合 ELK/EFK 日志收集
│
├── 🔧 故障排查
│   ├── 启动类:daemon 未运行、sock 文件问题、SELinux
│   ├── 存储类:overlay 驱动报错、目录丢失
│   ├── 网络类:iptables 问题、网卡配置
│   ├── 容器类:名称冲突、资源不足
│   └── 排查工具:docker logs / inspect / systemctl status docker
│
├── 🏗️ 应用场景
│   ├── 微服务架构拆分与部署
│   ├── CI/CD 流水线(构建/测试/发布)
│   ├── 开发环境标准化(消除"在我电脑能跑")
│   ├── 多环境部署(开发/测试/生产一致性)
│   ├── 混合云/多云部署
│   ├── 多租户隔离
│   ├── 灾备与业务连续性
│   └── 大数据/AI 训练环境快速搭建
│
└── 🔄 CI/CD 与 DevOps 集成
    ├── Dockerfile + 自动化构建
    ├── GitLab CI / Jenkins + Docker
    ├── 镜像版本管理与回滚
    └── 基础设施即代码(IaC)实践

学习路径建议‌:核心概念 → Dockerfile 编写 → 常用命令熟练 → 底层原理(Namespace/Cgroups/UnionFS)→ 网络与数据卷 → 编排工具(Compose/Swarm/K8s)→ 安全与监控 → 生产实践。

相关推荐
java_logo4 小时前
Docker 部署 Gotenberg 完整教程:Compose 搭建文档转 PDF API
docker·pdf·chromium·libreoffice·文档转换·轩辕镜像·gotenberg
闲云野鹤在人间5 小时前
docker 入门 | 第7章 容器监控 和 第8章 容器日志 详解
运维·docker·容器·架构·云计算
Experience-摆渡5 小时前
开源RAG知识库WeKnora深度调研:让知识自己长成体系
爬虫·docker·开源·rag
闲云野鹤在人间5 小时前
docker 入门 | 第5章 网络详解
网络·docker·架构·华为云·php
闲云自留地6 小时前
告别敲命令!DockerUI 与 Portainer 可视化容器管理实战
docker·容器
wdfk_prog6 小时前
ROS教程10:从 gtest 到 rostest——Unit Test、Node 集成测试、rosbag 与 rqt 验证闭环
运维·缓存·docker·容器·ros
cnkeysky8 小时前
docker 运行 nacos
docker·nacos
itCatface10 小时前
Linux离线部署Dify+Vllm(Qwen2.5-7b)
docker·ai·dify
是店小二呀10 小时前
鸿蒙PC开源移植:Docker桌面工作台与Linux运行时桥接
docker·鸿蒙pc