📚前言
👀回顾,系统学习docker系列已发布内容:
【docker基础】第三课:镜像管理与Dockerfile基础
【docker基础】第五课:Docker网络详解-CSDN博客
【docker基础】第六课:Web应用与数据库容器部署-CSDN博客
【docker基础】 第七课:Docker Compose 多容器实战-CSDN博客
【docker基础】 第八周:容器监控与应用更新策略-CSDN博客
【docker基础】第九周:Docker安全与镜像优化-CSDN博客
【docker基础】Docker第十周:CI/CD集成-CSDN博客
🔗相关文档:
【docker基础】Ubuntu 安装 Docker 超详细小白教程
📒本课学习目标:
本系列教程知识总结回顾。
🌍Docker第十三周:学习总结与进阶方向
欢迎来到 Docker 学习的最后一周!本周我们将回顾整个学习旅程,梳理知识体系,并为您指引进阶学习方向。
第一章:知识体系梳理
1.1 Docker 核心概念回顾
让我们用一个完整的图表来回顾 Docker 的核心知识:
┌─────────────────────────────────────────────────────────────────────┐
│ Docker 知识体系全景图 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 核心概念 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ │
│ │ │ 镜像 │ │ 容器 │ │ 仓库 │ │ │
│ │ │ (Image) │ │(Container)│ │(Registry) │ │ │
│ │ └─────────┘ └─────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Docker 架构 │ │
│ │ ┌──────────┐ ┌───────────┐ ┌──────────────┐ │ │
│ │ │ CLI │ → │ REST API │ → │ Docker Daemon │ │ │
│ │ │ 客户端 │ │ 通信接口 │ │ 守护进程 │ │ │
│ │ └──────────┘ └───────────┘ └──────────────┘ │ │
│ │ ↓ │ │
│ │ ┌──────────────────┐ │ │
│ │ │ Namespaces/Cgroups│ │ │
│ │ │ 隔离/资源限制 │ │ │
│ │ └──────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 操作层面 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ 镜像操作 │ │ 容器操作 │ │ 网络操作 │ │ │
│ │ │pull/build │ │run/ps/exec │ │create/ls │ │ │
│ │ │images/rmi │ │logs/stats │ │connect │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ 数据管理 │ │Compose编排 │ │ 安全优化 │ │ │
│ │ │ volume │ │yaml/config │ │scan/optimize│ │ │
│ │ │ mount │ │up/down │ │user/network │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
1.2 命令速查表
镜像命令
| 命令 | 说明 | 示例 |
|---|---|---|
docker pull |
拉取镜像 | docker pull nginx:latest |
docker images |
查看本地镜像 | docker images |
docker build |
构建镜像 | docker build -t myapp:v1 . |
docker rmi |
删除镜像 | docker rmi nginx |
docker history |
查看镜像层 | docker history nginx |
容器命令
| 命令 | 说明 | 示例 |
|---|---|---|
docker run |
创建并运行容器 | docker run -d -p 80:80 nginx |
docker ps |
查看运行中的容器 | docker ps -a |
docker stop |
停止容器 | docker stop myapp |
docker start |
启动容器 | docker start myapp |
docker rm |
删除容器 | docker rm myapp |
docker exec |
进入容器 | docker exec -it myapp bash |
docker logs |
查看日志 | docker logs -f myapp |
docker stats |
资源监控 | docker stats |
网络命令
| 命令 | 说明 | 示例 |
|---|---|---|
docker network ls |
查看网络 | docker network ls |
docker network create |
创建网络 | docker network create mynet |
docker network inspect |
查看网络详情 | docker network inspect bridge |
docker network connect |
连接容器到网络 | docker network connect mynet myapp |
数据卷命令
| 命令 | 说明 | 示例 |
|---|---|---|
docker volume ls |
查看数据卷 | docker volume ls |
docker volume create |
创建数据卷 | docker volume create mydata |
docker volume inspect |
查看数据卷详情 | docker volume inspect mydata |
docker volume rm |
删除数据卷 | docker volume rm mydata |
Docker Compose 命令
| 命令 | 说明 | 示例 |
|---|---|---|
docker-compose up |
启动服务 | docker-compose up -d |
docker-compose down |
停止服务 | docker-compose down |
docker-compose ps |
查看状态 | docker-compose ps |
docker-compose logs |
查看日志 | docker-compose logs -f |
docker-compose build |
构建镜像 | docker-compose build |
docker-compose config |
验证配置 | docker-compose config |
1.3 常见参数速查
docker run 常用参数
| 参数 | 说明 |
|---|---|
-d |
后台运行 |
-it |
交互式终端 |
-p 8080:80 |
端口映射 |
-v /host:/container |
挂载卷 |
--name |
指定容器名 |
--network |
指定网络 |
--memory |
限制内存 |
--cpus |
限制 CPU |
-e KEY=VALUE |
设置环境变量 |
--restart |
重启策略 |
--rm |
停止后自动删除 |
第二章:最佳实践清单
2.1 镜像构建最佳实践
# 1. 使用特定版本标签,不要使用 latest
FROM node:18-alpine
# 2. 使用多阶段构建减小体积
FROM node:18-alpine AS builder
COPY . .
RUN npm ci && npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
# 3. 合并 RUN 命令减少层数
RUN apt-get update && \
apt-get install -y nginx && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 4. 使用 .dockerignore
# 排除 node_modules, .git, *.log 等
# 5. 按正确顺序放置指令
COPY package*.json ./
RUN npm ci
COPY . .
# 6. 创建非特权用户
RUN addgroup -S app && adduser -S app -G app
USER app
# 7. 添加健康检查
HEALTHCHECK --interval=30s CMD curl -f http://localhost/ || exit 1
# 8. 使用 COPY 代替 ADD
COPY ./app /app
2.2 容器安全最佳实践
# 1. 使用非特权用户运行
docker run --user 1000 myapp
# 2. 限制资源
docker run --memory=512m --cpus=1 myapp
# 3. 只读文件系统
docker run --read-only myapp
# 4. 移除所有能力
docker run --cap-drop=ALL myapp
# 5. 不允许特权模式
docker run --privileged myapp # 避免!
# 6. 配置网络隔离
docker network create --internal secure-net
docker run --network secure-net myapp
# 7. 配置日志轮转
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 myapp
# 8. 定期扫描镜像
docker scan myapp:latest
2.3 生产环境检查清单
- 使用特定版本标签
- 启用健康检查
- 配置资源限制
- 使用非特权用户
- 配置日志轮转
- 启用只读文件系统
- 配置网络隔离
- 定期更新镜像
- 配置自动重启策略
- 监控资源使用
第三章:进阶学习路径
3.1 学习路线图
Docker 学习路线
│
↓
┌────────────────────────────────────────────┐
│ 第一阶段:Docker 基础 (1-5周) │
│ • 核心概念、镜像、容器、网络、数据卷 │
└────────────────────────────────────────────┘
│
↓
┌────────────────────────────────────────────┐
│ 第二阶段:Docker Compose (6-7周) │
│ • 多容器应用编排、YAML 配置 │
└────────────────────────────────────────────┘
│
↓
┌────────────────────────────────────────────┐
│ 第三阶段:进阶技能 (8-9周) │
│ • 监控、安全、优化 │
└────────────────────────────────────────────┘
│
↓
┌────────────────────────────────────────────┐
│ 第四阶段:CI/CD 集成 (10周) │
│ • GitHub Actions、Jenkins │
└────────────────────────────────────────────┘
│
↓
┌────────────────────────────────────────────┐
│ 第五阶段:容器编排 (11周) │
│ • Docker Swarm、Kubernetes │
└────────────────────────────────────────────┘
│
↓
┌────────────────────────────────────────────┐
│ 进阶方向选择 │
├───────────────┬───────────────┬────────────┤
↓ ↓ ↓ ↓
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│K8s专家 │ │DevOps │ │云原生 │ │安全专家│
│ │ │ │ │ │ │ │
│深入学习│ │学习 │ │学习 │ │学习 │
│K8s集群│ │Terraform│ │微服务 │ │容器安全│
│Helm等 │ │Ansible │ │Service │ │扫描工具│
└────────┘ └────────┘ │Mesh │ └────────┘
│Prometh │
│eus │
└────────┘
3.2 进阶方向一:Kubernetes 专家
必备技能
| 技能 | 说明 | 推荐学习资源 |
|---|---|---|
| Pod 调度 | Pod 生命周期管理 | Kubernetes 官方文档 |
| Deployment | 应用部署管理 | kubectl 实战 |
| Service | 服务发现与负载均衡 | Ingress 配置 |
| ConfigMap/Secret | 配置管理 | 安全最佳实践 |
| PersistentVolume | 持久化存储 | StorageClass |
| Helm | 包管理 | Helm 官方文档 |
| RBAC | 权限管理 | 安全配置 |
推荐学习路径
# 1. 本地搭建 Kubernetes 环境
minikube start
# 2. 学习基本命令
kubectl get pods
kubectl apply -f deployment.yaml
kubectl describe pod <pod-name>
kubectl logs <pod-name>
# 3. 部署第一个应用
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
# 4. 学习 Helm
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-release bitnami/nginx
3.3 进阶方向二:DevOps 工程师
必备技能
| 技能 | 说明 | 推荐工具 |
|---|---|---|
| 基础设施即代码 | 代码化管理基础设施 | Terraform |
| 配置管理 | 自动化配置管理 | Ansible |
| CI/CD | 持续集成与部署 | GitHub Actions, Jenkins, GitLab CI |
| 容器编排 | 应用编排 | Kubernetes, Docker Swarm |
| 监控告警 | 系统监控 | Prometheus, Grafana |
| 日志管理 | 日志收集与分析 | ELK Stack |
| 云平台 | 公有云服务 | AWS, Azure, GCP |
推荐学习路径
基础设施 → 代码化
↓
Terraform / Pulumi
↓
配置管理 → 自动化
↓
Ansible / Chef / Puppet
↓
CI/CD → 流水线
↓
GitHub Actions / Jenkins / GitLab CI
↓
容器化 → 编排
↓
Kubernetes / Docker Swarm
↓
监控 → 运维
↓
Prometheus + Grafana + ELK
3.4 进阶方向三:云原生开发
必备技能
| 技能 | 说明 |
|---|---|
| 微服务架构 | 服务拆分与通信 |
| API 网关 | 统一入口、路由、限流 |
| 服务网格 | Service Mesh (Istio, Linkerd) |
| 分布式追踪 | 请求链路追踪 |
| 消息队列 | 异步通信 |
| 无服务器 | Serverless |
推荐学习路径
# 1. 学习微服务框架
# • Spring Cloud (Java)
# • Express.js + TypeScript (Node.js)
# • FastAPI (Python)
# 2. 学习 API 网关
# • Kong
# • NGINX Ingress Controller
# • Traefik
# 3. 学习消息队列
# • RabbitMQ
# • Apache Kafka
# • Redis Streams
# 4. 学习服务网格
# • Istio
# • Linkerd
# 5. 学习无服务器
# • AWS Lambda
# • Knative
3.5 进阶方向四:容器安全专家
必备技能
| 技能 | 说明 |
|---|---|
| 镜像安全 | 漏洞扫描、合规检查 |
| 运行时安全 | 行为监控、入侵检测 |
| 网络安全 | 网络策略、CNI |
| 密钥管理 | Secret 管理、Vault |
| 容器审计 | 日志审计、合规 |
| 最小权限 | RBAC、Policy |
推荐学习路径
# 1. 镜像扫描
docker scan myapp:latest
trivy image myapp:latest
anchore-cli image vuln myapp:latest
# 2. 运行时安全
falco -r rules.yaml
# 3. 网络策略
kubectl apply -f network-policy.yaml
# 4. 密钥管理
kubectl create secret generic db-pass --from-literal=password=xxx
vault kv put secret/myapp/db-pass password=xxx
# 5. 合规检查
docker bench security
kube-bench
第四章:推荐学习资源
4.1 官方文档
| 资源 | 地址 |
|---|---|
| Docker 官方文档 | https://docs.docker.com/ |
| Docker Hub | https://hub.docker.com/ |
| Kubernetes 官方文档 | https://kubernetes.io/zh-cn/docs/ |
| Docker Compose 文档 | https://docs.docker.com/compose/ |
4.2 在线课程
| 课程 | 平台 |
|---|---|
| Docker Mastery | Udemy |
| Kubernetes for Developers | Udemy |
| Docker Certified Associate | Linux Foundation |
| CKA (Kubernetes Administrator) | Linux Foundation |
| CKAD (Kubernetes Developer) | Linux Foundation |
4.3 推荐书籍
| 书名 | 说明 |
|---|---|
| 《Docker 实战》 | Docker 入门经典 |
| 《Kubernetes 权威指南》 | Kubernetes 进阶必读 |
| 《容器与容器云》 | 深入理解容器技术 |
| 《深入浅出 Prometheus》 | 监控入门 |
| 《DevOps 实践指南》 | DevOps 方法论 |
4.4 练习平台
| 平台 | 地址 |
|---|---|
| Play with Docker | https://labs.play-with-docker.com/ |
| Katacoda | https://www.katacoda.com/ |
| KillerCoda | https://killer.sh/ |
| Exercism | https://exercism.org/ |
第五章:下一步行动计划
5.1 立即可以做的事情
- 整理笔记:回顾前12周的学习内容
- 实践项目:部署一个真实的应用
- 复习命令:熟练掌握常用命令
- 准备面试:准备 Docker 相关面试题
5.2 短期目标(1-3个月)
- 完成 Kubernetes 基础学习
- 部署一个 Kubernetes 集群
- 学习 CI/CD 工具(GitHub Actions)
- 完成至少一个生产级项目部署
5.3 中期目标(3-6个月)
- 获得 Docker 或 Kubernetes 认证
- 深入学习云原生技术栈
- 建立自己的技术博客
- 参与开源项目贡献
5.4 长期目标(6-12个月)
- 成为团队中的容器技术专家
- 推动团队采用 DevOps 实践
- 分享技术知识(博客、演讲)
- 持续关注新技术发展
第六章:常见面试题
6.1 Docker 基础
Q1: 容器和虚拟机的区别?
┌────────────────────────────────────────────────────┐
│ 虚拟机 │
│ ┌──────────┐ ┌──────────┐ │
│ │ App A │ │ App B │ │
│ ├──────────┤ ├──────────┤ │
│ │Guest OS │ │Guest OS │ ← 每个VM需要完整OS │
│ ├──────────┤ ├──────────┤ │
│ │ Hypervisor │ │
│ ├──────────────────────────────────────────┤ │
│ │ 物理硬件 │ │
│ └──────────────────────────────────────────┘ │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ Docker 容器 │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ App A │ │ App B │ │ App C │ │
│ ├────────┴──┴────────┴──┴────────┤ │
│ │ Docker Engine │ ← 共享OS内核 │
│ ├────────────────────────────────┤ │
│ │ 物理硬件 │ │
│ └────────────────────────────────┘ │
└────────────────────────────────────────────────────┘
Q2: Dockerfile 中 CMD 和 ENTRYPOINT 的区别?
| 指令 | 说明 |
|---|---|
| CMD | 容器启动命令,可被 docker run 参数覆盖 |
| ENTRYPOINT | 不可被覆盖,CMD 作为其参数 |
6.2 网络与存储
Q3: Docker 网络模式有哪些?
| 模式 | 说明 |
|---|---|
| bridge | 默认模式,容器连接到虚拟网桥 |
| host | 容器直接使用宿主机网络 |
| none | 容器没有网络连接 |
| overlay | 跨主机网络(Swarm) |
| macvlan | 为容器分配 MAC 地址 |
Q4: 数据卷挂载方式区别?
| 类型 | 语法 | 说明 |
|---|---|---|
| 绑定挂载 | -v /host:/container |
宿主机指定目录 |
| 命名卷 | -v myvolume:/container |
Docker 管理的卷 |
| tmpfs | --tmpfs /container |
内存文件系统 |
6.3 编排与安全
Q5: Docker Compose 和 Kubernetes 的区别?
| 特性 | Docker Compose | Kubernetes |
|---|---|---|
| 适用场景 | 单主机多容器 | 跨主机大规模集群 |
| 复杂度 | 简单 | 复杂 |
| 功能 | 基础 | 丰富 |
| 学习曲线 | 平缓 | 陡峭 |
Q6: 如何保证容器安全?
- 使用非特权用户
- 限制资源使用
- 启用只读文件系统
- 移除不必要的 Linux 能力
- 定期扫描镜像漏洞
- 配置网络隔离
本课程总结
恭喜你完成了完整的 Docker 学习旅程!
你学到了什么
| 周数 | 内容 |
|---|---|
| 1-2周 | Docker 基础概念和环境配置 |
| 3-4周 | 镜像管理和容器操作 |
| 5周 | Docker 网络管理 |
| 6周 | Web 应用与数据库部署 |
| 7周 | Docker Compose 多容器编排 |
| 8周 | 容器监控和日志管理 |
| 9周 | Docker 安全与镜像优化 |
| 10周 | CI/CD 集成 |
| 11周 | 容器编排基础 |
| 12周 | 综合实战项目 |
| 13周 | 学习总结与进阶方向 |
下一步
技术学习是一个持续的过程。建议:
- 持续实践:每周部署一个新项目
- 深入研究:选择一个方向深入学习
- 分享知识:写博客、做分享
- 关注社区:跟进技术发展
祝你在容器技术的道路上越走越远!🚀