mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 12:21:17 +00:00
22 KiB
22 KiB
附录八: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 周
验证学习成果:
# 完成以下任务说明基础入门完成
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
│ ├── GitOps(Flux / ArgoCD)
│ └── 配置管理
├── 灾难恢复和高可用
│ ├── 多集群部署
│ ├── 故障转移
│ └── 备份策略
├── 成本优化
│ ├── 资源申请和限制
│ ├── 自动扩缩容
│ └── 成本监控
└── 团队协作
├── GitFlow 工作流
├── 代码审查
└── 文档和最佳实践传播
贡献机会:
- Kubernetes(https://github.com/kubernetes/kubernetes)
- Cilium(https://github.com/cilium/cilium)
- Prometheus(https://github.com/prometheus/prometheus)
- Docker/Moby(https://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/
- DZone:https://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
- 事件处理
准备建议:
# 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 认证
认证路径:
-
CKA - Certified Kubernetes Administrator
- 难度:高
- 时间:3 小时(实操)
- 费用:$395
- 内容:集群安装、管理、故障排查
-
CKAD - Certified Kubernetes Application Developer
- 难度:中
- 时间:2 小时(实操)
- 费用:$395
- 内容:应用开发和部署
-
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 Compose(5 个项目)
- [ ] 学习数据管理和网络(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 # 构建服务镜像