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

22 KiB
Raw Blame History

附录八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 安装
├── 镜像加速器配置
└── 权限和用户配置

学习资源:

时间投入:

  • 理论学习3-4 小时
  • 实操练习8-10 小时
  • 总计2 周

验证学习成果:

# 完成以下任务说明基础入门完成
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

学习资源:

时间投入:

  • 理论学习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

学习资源:

时间投入:

  • 理论学习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 工作流
    ├── 代码审查
    └── 文档和最佳实践传播

贡献机会:

知识点依赖关系

基础概念 (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

在线课程

  • UdemyDocker 和 Kubernetes 完整课程70-100 小时)
  • Linux AcademyLinux 和容器管理
  • A Cloud GuruAWS/Azure 容器服务
  • PluralsightDocker 和容器生态系统

书籍推荐

  • 《Docker 深入浅出》- 本书的原版
  • 《Kubernetes 权威指南》- 深入 Kubernetes 的必读书
  • 《容器技术核心技术与应用》- 理解底层实现
  • 《SRE Google 运维之道》- 生产环保最佳实践

博客和社区

认证指南

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
- 事件处理

准备建议:

# 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. 监控部署状态

学习进度跟踪模板

# 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 流程实现

快速参考速查表

常用命令速查:

# 镜像管理
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                      # 构建服务镜像