一、总览架构
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)→ 安全与监控 → 生产实践。