Files
docker_practice/appendix/learning_roadmap.md
2026-03-05 19:14:37 -08:00

874 lines
22 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 附录八Docker 学习路线图与知识体系
本附录为学习者提供清晰的学习路线知识点依赖关系认证指南和常见面试题帮助快速成长为 Docker DevOps 专家
### 学习阶段划分
Docker 学习可分为四个递进阶段每个阶段都有明确的学习目标和时间投入
#### 第一阶段基础入门0-2
**学习目标**
- 理解容器化的基本概念
- 能够运行管理基本的容器
- 了解镜像和仓库的基本操作
**核心内容**
```
Docker 简介
├── 为什么需要 Docker
├── 容器 vs 虚拟机 vs 云计算
└── Docker 的三大核心概念
├── 镜像Image
├── 容器Container
└── 仓库Repository
基础命令
├── docker run / create / start / stop / rm
├── docker ps / logs / exec / inspect
├── docker pull / push / tag
└── docker build -t
Docker 安装配置
├── Linux 平台安装
├── macOS 和 Windows 安装
├── 镜像加速器配置
└── 权限和用户配置
```
**学习资源**
- 官方教程https://docs.docker.com/get-started/
- 本书第 1-3 入门篇基础概念
- Docker CLI 参考https://docs.docker.com/engine/reference/commandline/
**时间投入**
- 理论学习3-4 小时
- 实操练习8-10 小时
- 总计2
**验证学习成果**
```bash
# 完成以下任务说明基础入门完成
1. 运行官方 nginx 镜像,访问 http://localhost
2. 使用 docker exec 进入容器修改首页
3. 提交修改为新镜像
4. 推送镜像到 Docker Hub需创建账户
```
#### 第二阶段核心开发2-6
**学习目标**
- 掌握 Dockerfile 编写
- 能够构建自己的应用镜像
- 理解数据管理和网络配置
- 熟悉 Docker Compose 编排
**核心内容**
```
Dockerfile 指令详解
├── FROM / RUN / COPY / ADD
├── WORKDIR / ENV / ARG
├── EXPOSE / CMD / ENTRYPOINT
├── VOLUME / USER / HEALTHCHECK
└── 最佳实践和性能优化
├── 分层缓存机制
├── 减少镜像体积
├── 多阶段构建
└── 安全最佳实践
容器数据管理
├── 数据卷Volume
│ ├── 命名卷
│ ├── 匿名卷
│ └── 卷挂载最佳实践
├── 绑定挂载Bind Mount
│ ├── 宿主机路径映射
│ └── 权限和隔离
└── tmpfs 挂载
└── 临时文件系统
容器网络
├── 网络类型
│ ├── bridge默认
│ ├── host
│ ├── overlay
│ └── macvlan
├── 端口映射
├── 容器互联
├── DNS 配置
└── 自定义网络
Docker Compose
├── compose.yml/docker-compose.yml 编写
├── services 定义
├── volumes 配置
├── networks 配置
├── 依赖关系
├── 环境变量
└── 命令操作
├── up / down / ps / logs
├── exec / run
└── build / push
```
**学习资源**
- 本书第 4-11 进阶篇
- Docker 官方最佳实践https://docs.docker.com/develop/dev-best-practices/
- Dockerfile 参考https://docs.docker.com/engine/reference/builder/
**时间投入**
- 理论学习8-10 小时
- 实操练习30-40 小时多个实战项目
- 总计4-6
**项目实战**
```
项目 1: Python Web 应用Flask/Django
- 编写多阶段 Dockerfile
- 使用 Compose 配置数据库
- 实现热重载开发环境
项目 2: Node.js 微服务
- 优化镜像大小
- 配置 Compose 多个服务
- 设置网络和环保境变量
项目 3: 数据库容器化
- PostgreSQL/MySQL 配置
- 数据持久化
- 备份恢复策略
```
#### 第三阶段生产优化6-12
**学习目标**
- 掌握容器安全最佳实践
- 理解性能监控和优化
- 学会容器编排Kubernetes 基础
- 熟悉 CI/CD 集成
**核心内容**
```
容器安全
├── 镜像安全
│ ├── 漏洞扫描Trivy/Grype/Snyk
│ ├── 镜像签名和验证Cosign
│ ├── SBOM 生成和管理
│ └── 供应链安全
├── 运行时安全
│ ├── 用户和权限
│ ├── Linux 能力机制
│ ├── AppArmor 和 SELinux
│ ├── Rootless 容器
│ └── 安全的 Docker socket 访问
└── 宿主机安全
├── API 访问控制
├── TLS 认证
└── 审计日志
性能监控和优化
├── 监控指标体系
│ ├── CPU / 内存 / 网络 / I/O
│ └── 应用级指标
├── 监控工具
│ ├── docker stats
│ ├── cAdvisor
│ ├── Prometheus
│ └── Grafana
├── 性能优化
│ ├── 镜像大小优化
│ ├── 内存和 CPU 限制
│ ├── OOM 诊断和处理
│ └── 网络性能优化
└── 日志管理
├── 日志驱动配置
├── ELK Stack
└── 日志聚合
容器编排基础
├── Kubernetes 核心概念
│ ├── Pod / Deployment / Service
│ ├── ConfigMap / Secret
│ └── 健康检查和自动恢复
├── 容器执行环境
│ ├── containerd
│ ├── CRI-O
│ └── Docker
├── 网络插件
│ ├── CNI 标准
│ ├── Calico / Flannel / Cilium
│ └── 网络策略
└── 存储和有状态应用
├── PV / PVC
├── StorageClass
└── StatefulSet
CI/CD 集成
├── GitHub Actions
│ ├── 镜像构建和推送
│ ├── 安全扫描
│ └── 自动化测试
├── GitLab CI
├── Jenkins Docker 集成
└── Drone
生态工具
├── Buildx多架构构建
├── Skopeo镜像管理
├── Podman替代方案
├── Buildah镜像构建
└── Kollabot
```
**学习资源**
- 本书第 12-21 深入篇和实战篇
- Kubernetes 官方文档https://kubernetes.io/docs/
- CNCF 学习路线https://landscape.cncf.io/
**时间投入**
- 理论学习15-20 小时
- 实操练习60-80 小时多个生产级项目
- 总计6-12
**项目实战**
```
项目 1: 安全镜像构建流程
- 集成 Trivy 扫描
- 镜像签名和验证
- 生成 SBOM 文档
项目 2: 完整监控栈
- 搭建 Prometheus + Grafana
- 配置告警规则
- 性能数据采集和分析
项目 3: CI/CD 流程
- GitHub Actions 或 GitLab CI 配置
- 自动化镜像构建
- 安全扫描和合规检查
- 自动化部署到 Kubernetes
项目 4: Kubernetes 集群部署
- 本地 K3s/Kind 集群
- 部署有状态应用
- 配置持久化存储
```
#### 第四阶段专家深造12+
**学习目标**
- 掌握 Kubernetes 高级特性
- 理解容器运行时底层实现
- 能够设计和优化大规模容器平台
- 贡献开源社区
**核心内容**
```
Kubernetes 高级特性
├── 集群管理
│ ├── 节点管理和驱逐
│ ├── 集群自动扩缩容
│ └── 节点亲和性和污点容忍
├── 存储编排
│ ├── 动态存储配置
│ ├── 有状态应用管理StatefulSet
│ └── 备份和灾难恢复
├── 服务网格Service Mesh
│ ├── Istio / Linkerd / Cilium
│ ├── 流量管理
│ └── 可观测性增强
├── 安全和多租户
│ ├── RBAC角色访问控制
│ ├── Network Policy 深入
│ ├── Pod Security Policy
│ └── 准入控制器Admission Controller
└── 性能和扩展性
├── 大规模集群优化
├── 自定义 Operator
└── 集群联邦
容器运行时底层
├── Linux 内核机制
│ ├── Namespace 详解
│ ├── Cgroup v1 和 v2
│ ├── OverlayFS 和 UnionFS
│ └── SELinux 和 AppArmor
├── 容器运行时
│ ├── containerd 源码阅读
│ ├── runc 实现
│ ├── gVisor 和 Kata
│ └── Firecracker
└── OCI 标准
├── Image Spec
└── Runtime Spec
DevOps 工程化
├── 大规模集群管理
│ ├── Helm / Kustomize
│ ├── GitOpsFlux / ArgoCD
│ └── 配置管理
├── 灾难恢复和高可用
│ ├── 多集群部署
│ ├── 故障转移
│ └── 备份策略
├── 成本优化
│ ├── 资源申请和限制
│ ├── 自动扩缩容
│ └── 成本监控
└── 团队协作
├── GitFlow 工作流
├── 代码审查
└── 文档和最佳实践传播
```
**贡献机会**
- Kuberneteshttps://github.com/kubernetes/kubernetes
- Ciliumhttps://github.com/cilium/cilium
- Prometheushttps://github.com/prometheus/prometheus
- Docker/Mobyhttps://github.com/moby/moby
### 知识点依赖关系
```
基础概念 (Week 0-2)
├── 容器 vs 虚拟机
├── Docker 三大概念
└── 基础命令
Dockerfile 和镜像构建 (Week 2-4)
├── Dockerfile 指令
├── 多阶段构建
└── 镜像优化
↓ ↓ ↓
数据管理 ← 网络配置 ← Docker Compose (Week 4-6)
├── Volume ├── Bridge ├── YAML 编写
├── Bind Mount├── Overlay ├── 多容器编排
└── tmpfs └── 自定义网络└── 开发工作流
↓ ↓ ↓
└─────────────────────────┘
实战项目开发 (Week 6-10)
├── Web 应用容器化
├── 数据库容器化
├── 微服务架构
└── 本地开发环境
容器安全 ← 性能优化 ← 监控和日志 (Week 10-14)
├── 镜像扫描 ├── 大小优化 ├── Prometheus
├── 漏洞管理 ├── 内存优化 ├── Grafana
├── 镜像签名 ├── CPU 优化 └── ELK Stack
└── SBOM └── 诊断工具
↓ ↓ ↓
└─────────────────────┘
安全生产环境 (Week 14-18)
├── CI/CD 流程
├── 镜像仓库
├── 日志集中
└── 告警系统
Kubernetes 基础 (Week 18-24)
├── Pod / Service / Deployment
├── 资源管理
├── 存储管理
└── 网络策略
Kubernetes 进阶 (Week 24-36)
├── StatefulSet / DaemonSet
├── Operator 开发
├── 集群管理
└── 服务网格
企业级平台设计 (Week 36+)
├── 多集群管理
├── GitOps 工作流
├── 成本优化
└── 开源贡献
```
### 推荐学习资源
#### 官方文档
| 资源 | URL | 推荐程度 |
|------|-----|--------|
| Docker 官方文档 | https://docs.docker.com | ⭐⭐⭐⭐⭐ |
| Docker Hub | https://hub.docker.com | ⭐⭐⭐⭐⭐ |
| Kubernetes 官方 | https://kubernetes.io/docs | ⭐⭐⭐⭐⭐ |
| CNCF 景观 | https://landscape.cncf.io | ⭐⭐⭐⭐ |
#### 在线课程
- **Udemy**Docker Kubernetes 完整课程70-100 小时
- **Linux Academy**Linux 和容器管理
- **A Cloud Guru**AWS/Azure 容器服务
- **Pluralsight**Docker 和容器生态系统
#### 书籍推荐
- Docker 深入浅出- 本书的原版
- Kubernetes 权威指南- 深入 Kubernetes 的必读书
- 容器技术核心技术与应用- 理解底层实现
- SRE Google 运维之道- 生产环保最佳实践
#### 博客和社区
- Docker 官方博客https://www.docker.com/blog/
- Kubernetes 官方博客https://kubernetes.io/blog/
- CNCF 博客https://www.cncf.io/blog/
- DZonehttps://dzone.com/containers-cloud
### 认证指南
#### Docker 认证
**Docker Certified Associate (DCA)**
考试信息
- 题目数55
- 时间限制90 分钟
- 及格分数73% 41 道题
- 费用$165 USD
- 有效期3
考试内容比例
```
镜像和仓库20%
- 镜像构建和管理
- 镜像层和缓存
- 私有仓库配置
容器运行15%
- 容器生命周期
- 资源限制
- 容器隔离
网络15%
- 网络驱动
- 容器通信
- 端口映射
存储10%
- Volume 管理
- 数据持久化
- 绑定挂载
编排20%
- Docker Compose
- Docker Swarm 基础
安全15%
- 用户和权限
- 密钥管理
- 镜像安全
- 守护进程安全
和日志5%
- Logging drivers
- 事件处理
```
准备建议
```bash
# 1. 学习本书第 1-11 章(基础到中级)
# 2. 完成 20+ 个实战项目
# 3. 参考官方学习指南
curl https://docker.training.kodekloud.com/dca-guide
# 4. 模拟考试
- Linux Academy DCA 练习题
- Whizlabs DCA 模拟考试
# 5. 重点掌握的命令
docker build / push / pull / tag
docker run / exec / logs / inspect / ps
docker volume / network / service
docker-compose up / down / logs / ps
docker stats / events / inspect
```
#### Kubernetes 认证
**认证路径**
1. **CKA - Certified Kubernetes Administrator**
- 难度
- 时间3 小时实操
- 费用$395
- 内容集群安装管理故障排查
2. **CKAD - Certified Kubernetes Application Developer**
- 难度
- 时间2 小时实操
- 费用$395
- 内容应用开发和部署
3. **CKS - Certified Kubernetes Security Specialist**
- 难度很高
- 时间2 小时实操
- 费用$395
- 内容安全最佳实践
### 常见面试题与答案要点
#### 基础概念面试题
**Q1: Docker 容器和虚拟机有什么区别**
A要点
```
虚拟机:
- 完整的操作系统环境GB 级)
- 启动时间:分钟级
- 隔离级别:完全硬件隔离
- 性能开销5-20%
容器:
- 共享内核包含应用和依赖MB 级)
- 启动时间:秒级
- 隔离级别进程级隔离Namespace/Cgroup
- 性能开销1-5%
总结:容器更轻量、更快、密度更高
```
**Q2: 什么是 Docker 镜像它如何存储的**
A要点
```
镜像本质:
- 只读的文件系统快照
- 分层存储结构
- 每一层是前一层的增量
存储方式:
- Union FS多个只读层 + 一个可写层
- 每个 RUN/COPY/ADD 指令创建一层
- 层之间通过 diff 增量存储,节省空间
优点:
- 共享基础层减少存储
- 层级缓存加快构建
- 支持高效分发
```
**Q3: 容器如何实现隔离**
A要点
```
技术手段:
1. Namespace资源隔离
- PID Namespace进程隔离
- Network Namespace网络隔离
- Mount Namespace文件系统隔离
- UTS Namespace主机名隔离
- IPC Namespace进程间通信隔离
2. Cgroup资源限制
- 限制 CPU 使用
- 限制内存使用
- 限制磁盘 I/O
- 限制网络带宽
3. Linux 能力机制(权限控制):
- 削减不必要的 root 权限
- 限制容器能力
4. SELinux / AppArmor强制访问控制
```
#### Dockerfile 面试题
**Q4: 如何优化 Docker 镜像大小**
A要点
```
1. 选择合适的基础镜像:
scratch < alpine:3.17 < python:3.11-slim < python:3.11
2. 多阶段构建:
- 构建阶段只保留编译工具
- 运行阶段只包含最终二进制
- 典型场景Go、Node.js、Java
3. 清理包管理器缓存:
apt-get clean && rm -rf /var/lib/apt/lists/*
yum clean all && rm -rf /var/cache/yum
pip install --no-cache-dir
4. 合并 RUN 指令:
减少镜像层数
5. 使用 .dockerignore
排除不必要的构建上下文
6. 去除调试符号:
Go: -ldflags="-w -s"
C/C++: strip binary
7. 压缩资源:
gzip 静态文件,压缩图片
```
**Q5: CMD ENTRYPOINT 有什么区别**
A要点
```
CMD
- 定义容器默认命令
- 容器运行时可被覆盖docker run image_name custom_cmd
- 可以有多个 CMD只有最后一个生效
ENTRYPOINT
- 定义容器的可执行程序
- 容器运行时参数追加而非覆盖
- 与 CMD 配合使用
推荐用法:
ENTRYPOINT ["python", "app.py"]
CMD ["--port", "8000"]
# 运行 docker run image --debug 会执行:
# python app.py --debug
```
#### 网络和存储面试题
**Q6: Docker 网络驱动的区别**
A要点
```
Bridge默认
- 虚拟网桥,容器间通过网桥通信
- 支持端口映射
- 隔离性好,性能适中
Host
- 使用宿主机网络栈
- 性能最优,隔离性最差
- 容器端口直接映射到宿主机
Overlay
- 跨主机通信,基于 VXLAN
- Swarm 和 Kubernetes 标准
- 性能略低,支持分布式
macvlan
- 容器获得 MAC 地址
- 表现为物理机,性能好
- 用于物理网络集成
None
- 无网络,完全隔离
```
**Q7: Volume Bind Mount 有什么区别**
A要点
```
Volume
- Docker 管理,存储位置:/var/lib/docker/volumes/
- 跨平台兼容,隔离性好
- 支持驱动,可扩展
- 推荐在生产环境使用
Bind Mount
- 宿主机管理,任意位置
- 跨平台兼容性一般
- 性能好,用于开发环境
- 权限管理复杂
tmpfs
- 内存文件系统,不持久化
- 用于临时文件、敏感数据
- 性能最好,重启丢失
```
#### 安全和生产面试题
**Q8: 如何提高 Docker 安全性**
A要点
```
镜像安全:
- 使用官方镜像或可信镜像源
- 定期扫描漏洞Trivy/Grype
- 镜像签名验证Cosign
- 生成和管理 SBOM
容器运行:
- 以非 root 用户运行
- 使用 read-only 文件系统
- 限制 Linux 能力
- 使用 AppArmor 或 SELinux
宿主机安全:
- 启用 TLS 认证 API
- 不暴露 /var/run/docker.sock
- 使用 Rootless 容器
- 定期更新 Docker
网络安全:
- 使用自定义网络隔离
- 配置网络策略
- 限制出入站流量
```
**Q9: 容器被 OOM 杀死如何诊断和解决**
A要点
```
诊断:
1. 检查容器是否被 OOM 杀死:
docker inspect <container> | grep OOMKilled
2. 查看宿主机日志:
dmesg | grep -i oom
journalctl -u docker | grep -i oom
3. 监控内存使用:
docker stats <container>
docker exec <container> ps aux --sort=-%mem
解决:
1. 增加内存限制:
docker update -m 2g <container>
2. 检查内存泄漏:
使用内存分析工具heapdump、pprof
3. 优化应用:
- 增加垃圾回收频率
- 减少缓存大小
- 使用对象池模式
4. 使用内存交换(最后手段):
docker run -m 512m --memory-swap 1g
```
**Q10: 如何在 CI/CD 中集成 Docker**
A要点
```
构建阶段:
- 触发器Push / PR 事件
- 构建镜像docker build
- 标记git sha、版本号
- 扫描Trivy 漏洞扫描
- 签名Cosign 镜像签名
存储阶段:
- 推送到镜像仓库docker push
- 记录 SBOM 和扫描报告
部署阶段:
- 验证镜像签名
- 获取镜像摘要
- 更新部署配置
- 触发 GitOps 工作流
监控阶段:
- 收集应用日志
- 监控性能指标
- 告警异常情况
示例工作流:
1. GitHub Actions / GitLab CI 监听 push
2. 运行单元测试
3. 构建 Docker 镜像
4. 推送到 Docker Hub / ECR
5. 触发 ArgoCD / Flux 自动部署
6. 监控部署状态
```
### 学习进度跟踪模板
```markdown
# Docker 学习进度跟踪
## 第一阶段基础入门目标2 周)
- [ ] 学完第 1-3 章6 小时)
- [ ] 完成基础命令练习10 小时)
- [ ] 运行官方镜像
- [ ] 创建和推送第一个镜像到 Docker Hub
- [ ] 完成度___%
## 第二阶段核心开发目标4-6 周)
- [ ] 学完第 4-11 章15 小时)
- [ ] 完成 3 个 Dockerfile 最佳实践项目
- [ ] 掌握 Docker Compose5 个项目)
- [ ] 学习数据管理和网络8 小时)
- [ ] 完成度___%
## 第三阶段生产优化目标6-12 周)
- [ ] 学完第 12-21 章25 小时)
- [ ] 镜像安全扫描和签名
- [ ] 搭建完整监控栈
- [ ] 配置 CI/CD 流程
- [ ] Kubernetes 基础30 小时)
- [ ] 完成度___%
## 第四阶段专家深造目标12+ 周)
- [ ] Kubernetes 高级特性
- [ ] 服务网格学习
- [ ] 底层实现研究
- [ ] 贡献开源项目
- [ ] 完成度___%
## 证书目标
- [ ] Docker DCA 认证
- [ ] CKA 认证
- [ ] CKAD 认证
## 实战项目清单
- [ ] Python Web 应用容器化
- [ ] Node.js 微服务
- [ ] 数据库容器化
- [ ] 完整微服务架构
- [ ] 监控和日志系统
- [ ] CI/CD 流程实现
```
### 快速参考速查表
**常用命令速查**
```bash
# 镜像管理
docker build -t image:tag . # 构建镜像
docker images # 列出镜像
docker rmi image:tag # 删除镜像
docker tag source:tag target:tag # 标记镜像
docker push registry/image:tag # 推送镜像
docker pull image:tag # 拉取镜像
docker history image:tag # 查看镜像历史
docker inspect image:tag # 查看镜像详情
# 容器管理
docker run [OPTIONS] image # 运行容器
docker ps [-a] # 列出容器
docker stop/start/restart container # 容器生命周期
docker rm container # 删除容器
docker logs [-f] container # 查看日志
docker exec -it container cmd # 进入容器
docker inspect container # 查看容器详情
docker stats [container] # 查看资源使用
# 网络管理
docker network ls # 列出网络
docker network create name # 创建网络
docker network connect/disconnect # 连接/断开网络
docker network inspect name # 查看网络详情
# 卷管理
docker volume ls # 列出卷
docker volume create name # 创建卷
docker volume rm name # 删除卷
docker volume inspect name # 查看卷详情
# Docker Compose
docker-compose up [-d] # 启动服务
docker-compose down # 停止服务
docker-compose ps # 列出服务
docker-compose logs [-f] [service] # 查看日志
docker-compose exec service cmd # 在服务中执行命令
docker-compose build # 构建服务镜像
```