附錄八: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(映象建立)

學習資源:

時間投入:

  • 理論學習: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 工作流
    ├── 程式碼審查
    └── 文件和最佳實踐傳播

貢獻機會:

知識點依賴關係

基礎概念 (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 官方文件 docs.docker.com ⭐⭐⭐⭐⭐
Docker Hub hub.docker.com ⭐⭐⭐⭐⭐
Kubernetes 官方 kubernetes.io/docs ⭐⭐⭐⭐⭐
CNCF 景觀 landscape.cncf.io ⭐⭐⭐⭐

線上課程

  • Udemy:Docker 和 Kubernetes 完整課程(70-100 小時)
  • Linux Academy:Linux 和容器管理
  • A Cloud Guru:AWS/Azure 容器服務
  • Pluralsight:Docker 和容器生態系統

書籍推薦

  • 《Docker 深入淺出》- 本書的原版
  • 《Kubernetes 權威指南》- 深入 Kubernetes 的必讀書
  • 《容器技術核心技術與應用》- 理解底層實現
  • 《SRE Google 運維之道》- 生產環境最佳實踐

部落格和社群

認證指南

Docker 認證

Docker Certified Associate (DCA)

考試訊息:

  • 題目數:55 道
  • 時間限制:90 分鐘
  • 及格分數:73%(約 41 道題)
  • 費用:$199 USD
  • 有效期:2 年

考試內容比例:

映象和倉庫(20%)
- 映象建立和管理
- 映象層和緩存
- 私有倉庫設定

容器執行(15%)
- 容器生命週期
- 資源限制
- 容器隔離

網路(15%)
- 網路驅動
- 容器通訊
- 連接埠對映

儲存(10%)
- Volume 管理
- 資料持久化
- 繫結掛載

編排(20%)
- Docker Compose
- Docker Swarm 基礎

安全(15%)
- 使用者和許可權
- 金鑰管理
- 映象安全
- 守護程序安全

和日誌(5%)
- Logging drivers
- 事件處理

準備建議:

# 1. 學習本書第 1-11 章(基礎到中級)
# 2. 完成 20+ 個實戰專案
# 3. 參考官方學習指南
# 參考 Docker 官方學習入口:https://www.docker.com/resources/

# 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.21 < python:3.14-slim < python:3.14

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
- Docker overlay 網路預設使用 UDP 4789 傳輸資料
- Swarm 標準;Kubernetes 通常由 CNI 外掛實現跨主機網路
- 效能略低,支援分散式

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                      # 建立服務映象
第 196 页,共 196 页
使用 mdPress 构建