第1章 入門 1
1.1 術語 1
1.1.1 鏡像與容器 1
1.1.2 容器與虛擬機 1
1.1.3 持續集成/持續交付 2
1.1.4 宿主機管理 2
1.1.5 編排 2
1.1.6 調度 2
1.1.7 發現 2
1.1.8 配置管理 2
1.2 從開發環境到生產環境 3
1.3 使用Docker的多種方式 3
1.4 可預期的情況 4
第2章 技術棧 7
2.1 構建系統 8
2.2 鏡像倉庫 8
2.3 宿主機管理 8
2.4 配置管理 9
2.5 部署 9
2.6 編排 9
第3章 示例:極簡環境 11
3.1 保持各部分的簡單 11
3.2 保持流程的簡單 13
3.3 系統細節 14
3.4 集群范圍的配置、通用配置及本地配置 18
3.5 部署服務 19
3.6 支撐服務 21
3.7 討論 21
3.8 未來 22
3.9 小結 22
第4章 示例:Web環境 23
4.1 編排 24
4.1.1 讓服務器上的Docker進入准備運行容器的狀態 25
4.1.2 讓容器運行 25
4.2 連網 28
4.3 數據存儲 28
4.4 日志 29
4.5 監控 30
4.6 無須擔心新依賴 30
4.7 零停機時間 30
4.8 服務回滾 31
4.9 小結 31
第5章 示例:Beanstalk環境 33
5.1 構建容器的過程 34
5.2 日志 35
5.3 監控 36
5.4 安全 36
5.5 小結 36
第6章 安全 37
6.1 威脅模型 37
6.2 容器與安全性 38
6.3 內核更新 39
6.4 容器更新 39
6.5 suid及guid二進制文件 40
6.6 容器內的root 40
6.7 權能 41
6.8 seccomp 41
6.9 內核安全框架 42
6.10 資源限制及cgroup 42
6.11 ulimit 43
6.12 用戶命名空間 43
6.13 鏡像驗證 44
6.14 安全地運行Docker守護 進程 45
6.15 監控 45
6.16 設備 45
6.17 掛載點 45
6.18 ssh 46
6.19 私鑰分發 46
6.20 位置 46
第7章 構建鏡像 49
7.1 此鏡像非彼鏡像 49
7.1.1 寫時復制與高效的鏡像存儲與分發 50
7.1.2 Docker對寫時復制的使用 51
7.2 鏡像構建基本原理 52
7.2.1 分層的文件系統和空間控管 54
7.2.2 保持鏡像小巧 57
7.2.3 讓鏡像可重用 58
7.2.4 在進程無法被配置時,通過環境變量讓鏡像可配置 59
7.2.5 讓鏡像在Docker變化時對自身進行重新配置 62
7.2.6 信任與鏡像 67
7.2.7 讓鏡像不可變 67
7.3 小結 68
第8章 存儲Docker鏡像 69
8.1 啟動並運行存儲的Docker鏡像 69
8.2 自動化構建 70
8.3 私有倉庫 71
8.4 私有registry的擴展 71
8.4.1 S3 72
8.4.2 本地存儲 72
8.4.3 對registry進行負載均衡 72
8.5 維護 73
8.6 對私有倉庫進行加固 73
8.6.1 SSL 73
8.6.2 認證 73
8.7 保存/載入 74
8.8 最大限度地減小鏡像體積 74
8.9 其他鏡像倉庫方案 75
第9章 CI/CD 77
9.1 讓所有人都進行鏡像構建與推送 79
9.2 在一個構建系統中構建所有鏡像 80
9.3 不要使用或禁止使用非標准做法 80
9.4 使用標准基礎鏡像 80
9.5 使用Docker進行集成測試 81
9.6 小結 81
第10章 配置管理 83
10.1 配置管理與容器 83
10.2 面向容器的配置管理 84
10.2.1 Chef 85
10.2.2 Ansible 87
10.2.3 Salt Stack 89
10.2.4 Puppet 90
10.3 小結 92
第11章 Docker存儲引擎 93
11.1 AUFS 94
11.2 DeviceMapper 99
11.3 BTRFS 104
11.4 OverlayFS 108
11.5 VFS 112
11.6 小結 114
第12章 Docker網絡實現 115
12.1 網絡基礎知識 116
12.2 IP地址的分配 119
12.3 域名解析 124
12.4 服務發現 128
12.5 Docker高級網絡 132
12.5.1 網絡安全 132
12.5.2 多主機的容器間通信 136
12.5.3 共享網絡命名空間 138
12.6 IPv6 141
12.7 小結 142
第13章 調度 145
13.1 什么是調度 146
13.2 調度策略 147
13.3 Mesos 147
13.4 Kubernetes 148
13.5 OpenShift 149
第14章 服務發現 153
14.1 DNS服務發現 155
14.2 Zookeeper 159
14.3 基於Zookeeper的服務發現 160
14.4 etcd 161
14.5 consul 165
14.5.1 基於consul的服務發現 167
14.5.2 registrator 168
14.6 Eureka 171
14.7 Smartstack 174
14.7.1 基於Smartstack的服務發現 175
14.7.2 Nerve 175
14.7.3 Synapse 176
14.8 nsqlookupd 177
14.9 小結 177
第15章 日志和監控 179
15.1 日志 179
15.1.1 Docker原生的日志 支持 180
15.1.2 連接到Docker容器 181
15.1.3 將日志導出到宿主機 182
15.1.4 發送日志到集中式的日志 平台 183
15.1.5 在其他容器一側收集 日志 184
15.2 監控 185
15.2.1 基於宿主機的監控 187
15.2.2 基於Docker守護進程的 監控 188
15.2.3 基於容器的監控 191
15.3 小結 194