前言 xi
第一部分 背景與基礎
第 1 章 何謂容器,為何需要它 3
1.1 容器與虛擬機的比較 4
1.2 Docker與容器 5
1.3 Docker的歷史 7
1.4 插件與基礎設施 8
1.5 64位Linux 9
第 2 章 安裝 10
2.1 在Linux上安裝 Docker 10
2.1.1 將SELinux置于寬容模式下運行 11
2.1.2 不使用sudo命令執(zhí)行Docker 11
2.2 在Mac OS及Windows上安裝Docker 12
2.3 快速確認 13
第 3 章 邁出第一步 15
3.1 運行第一個鏡像 15
3.2 基本命令 16
3.3 通過Dockerfile創(chuàng)建鏡像 20
3.4 使用寄存服務 22
3.5 使用Redis官方鏡像 24
3.6 總結 27
第 4 章 Docker基本概念 28
4.1 Docker系統(tǒng)架構 28
4.1.1 底層技術 29
4.1.2 周邊技術 30
4.1.3 Docker托管 31
4.2 鏡像是如何生成的 32
4.2.1 構建環(huán)境的上下文 32
4.2.2 鏡像層 33
4.2.3 緩存 35
4.2.4 基礎鏡像 35
4.2.5 Dockerfile指令 37
4.3 使容器與世界相連 39
4.4 容器互聯(lián) 40
4.5 利用數據卷和數據容器管理數據 41
4.5.1 共享數據 43
4.5.2 數據容器 44
4.6 Docker常用命令 45
4.6.1 run命令 46
4.6.2 容器管理 48
4.6.3 Docker信息 50
4.6.4 容器信息 50
4.6.5 鏡像管理 52
4.6.6 使用寄存服務器 54
4.7 總結 55
第二部分 Docker與軟件生命周期
第 5 章 在開發(fā)中應用Docker 59
5.1 說聲“Hello World!” 59
5.2 通過Compose實現(xiàn)自動化 67
5.3 總結 69
第 6 章 創(chuàng)建一個簡單的Web應用 71
6.1 創(chuàng)建一個基本網頁 72
6.2 利用現(xiàn)有鏡像 73
6.3 實現(xiàn)緩存功能 78
6.4 微服務 81
6.5 總結 81
第 7 章 鏡像分發(fā) 82
7.1 鏡像及鏡像庫的命名方式 82
7.2 Docker Hub 83
7.3 自動構建 85
7.4 私有分發(fā) 86
7.4.1 運行自己的寄存服務 86
7.4.2 商業(yè)寄存服務 92
7.5 縮減鏡像大小 92
7.6 鏡像出處 94
7.7 總結 94
第 8 章 Docker持續(xù)集成與測試 95
8.1 為identidock添加單元測試 95
8.2 創(chuàng)建Jenkins容器 100
8.3 推送鏡像 106
8.3.1 給鏡像正確的標簽 106
8.3.2 準生產及生產環(huán)境 108
8.3.3 鏡像數量激增的問題 108
8.3.4 使用Docker部署Jenkins slaves 109
8.4 備份Jenkins數據 109
8.5 持續(xù)集成的托管解決方案 109
8.6 測試與微服務 110
8.7 總結 111
第 9 章 部署容器 113
9.1 通過Docker Machine配置資源 114
9.2 使用代理 117
9.3 執(zhí)行選項 122
9.3.1 shell腳本 122
9.3.2 使用進程管理器(或用systemd控制所有進程) 124
9.3.3 使用配置管理工具 127
9.4 主機配置 130
9.4.1 選擇操作系統(tǒng) 130
9.4.2 選擇存儲驅動程序 130
9.5 專門的托管方案 132
9.5.1 Triton 132
9.5.2 谷歌容器引擎 134
9.5.3 亞馬遜EC2容器服務 135
9.5.4 Giant Swarm 136
9.6 持久性數據和生產環(huán)境容器 138
9.7 分享秘密信息 139
9.7.1 在鏡像中保存秘密信息 139
9.7.2 通過環(huán)境變量傳遞密鑰 139
9.7.3 通過數據卷傳遞密鑰 140
9.7.4 使用鍵值存儲 140
9.8 網絡連接 141
9.9 生產環(huán)境的寄存服務 141
9.10 持續(xù)部署 / 交付 141
9.11 總結 142
第 10 章 日志記錄和監(jiān)控 143
10.1 日志記錄 144
10.1.1 Docker默認的日志記錄 144
10.1.2 日志匯總 145
10.1.3 使用ELK進行日志記錄 146
10.1.4 通過syslog實現(xiàn)日志管理 155
10.1.5 從文件抓取日志 160
10.2 監(jiān)控和警報 161
10.2.1 使用Docker工具進行監(jiān)測 161
10.2.2 cAdvisor 162
10.2.3 集群解決方案 163
10.3 商用的監(jiān)聽及日志記錄解決方案 166
10.4 總結 166
第三部分 工具和技術
第 11 章 聯(lián)網和服務發(fā)現(xiàn) 169
11.1 大使容器 170
11.2 服務發(fā)現(xiàn) 173
11.2.1 etcd 173
11.2.2 SkyDNS 177
11.2.3 Consul 181
11.2.4 服務注冊 185
11.2.5 其他解決方案 186
11.3 聯(lián)網選項 187
11.3.1 網橋模式 187
11.3.2 主機模式 188
11.3.3 容器模式 188
11.3.4 未聯(lián)網模式 188
11.4 全新的Docker聯(lián)網功能 188
11.5 網絡解決方案 190
11.5.1 Overlay 191
11.5.2 Weave 193
11.5.3 Flannel 196
11.5.4 Calico項目 201
11.6 總結 205
第 12 章 編排、集群和管理 207
12.1 集群和編排工具 208
12.1.1 Swarm 208
12.1.2 fleet 214
12.1.3 Kubernetes 219
12.1.4 Mesos和Marathon 226
12.2 容器管理平臺 235
12.2.1 Rancher 236
12.2.2 Clocker 237
12.2.3 Tutum 238
12.3 總結 239
第 13 章 容器安全與限制容器 241
13.1 需要考慮的事項 242
13.2 縱深防御 244
13.3 如何保護identidock 245
13.4 以主機隔離容器 246
13.5 進行更新 246
13.6 鏡像出處 249
13.6.1 Docker摘要 250
13.6.2 Docker的內容信任機制 250
13.6.3 可復制及可信任的Dockerfile 254
13.7 安全建議 256
13.7.1 設置用戶 256
13.7.2 限制容器聯(lián)網 257
13.7.3 刪除setuid和setgid的二進制文件 258
13.7.4 限制內存使用 259
13.7.5 限制CPU使用 260
13.7.6 限制重新啟動 261
13.7.7 限制文件系統(tǒng) 261
13.7.8 限制內核能力 262
13.7.9 應用資源限制 263
13.8 運行加固內核 264
13.9 Linux安全模塊 265
13.9.1 SELinux 265
13.9.2 AppArmor 268
13.10 審核 268
13.11 事件響應 269
13.12 未來特性 269
13.13 總結 270
作者簡介 271
關于封面 271