本書針對(duì)容器技術(shù)與應(yīng)用的實(shí)際需求,講解主流容器平臺(tái)Docker的應(yīng)用和運(yùn)維的技術(shù)方法,內(nèi)容包括Docker基礎(chǔ)與安裝、鏡像管理、容器管理、Docker網(wǎng)絡(luò)配置、Docker存儲(chǔ)管理、Docker應(yīng)用程序開發(fā)、鏡像自動(dòng)化構(gòu)建、持續(xù)集成和自動(dòng)化部署、多容器編排、多主機(jī)管理和Docker容器集群平臺(tái),以及生產(chǎn)環(huán)境中的Docker運(yùn)維。
1. 注重系統(tǒng)性、實(shí)踐性、可操作性。
2. 注重基礎(chǔ)知識(shí)講解,使用表格匯總資料,使用示意圖講解原理和架構(gòu)。
3. 注重動(dòng)手實(shí)踐,詳細(xì)介紹具體的操作步驟,直接給讀者進(jìn)行示范。
鐘小平,已出版的科技零售書15579《網(wǎng)絡(luò)服務(wù)器配置與應(yīng)用(第3版)》,累計(jì)銷量36000冊。寫作能力和專業(yè)素養(yǎng)都非常不錯(cuò)。
第1章 Docker基礎(chǔ) 1
1.1 Docker的概念 2
1.1.1 什么是Docker 2
1.1.2 鏡像與容器 2
1.1.3 容器與虛擬機(jī) 3
1.1.4 Docker引擎 3
1.1.5 Docker生態(tài)系統(tǒng) 4
1.2 Docker的應(yīng)用 4
1.2.1 實(shí)現(xiàn)應(yīng)用程序快速、一致的交付 4
1.2.2 響應(yīng)式部署和應(yīng)用程序 5
1.2.3 運(yùn)行更多的工作負(fù)載 5
1.2.4 部署微服務(wù)應(yīng)用 5
1.3 Docker架構(gòu) 5
1.3.1 Docker客戶端 6
1.3.2 Docker守護(hù)進(jìn)程 6
1.3.3 Docker注冊中心 6
1.3.4 Docker對(duì)象 6
1.4 Docker底層技術(shù) 7
1.4.1 名稱空間 7
1.4.2 控制組 8
1.4.3 聯(lián)合文件系統(tǒng) 9
1.4.4 容器格式 9
1.5 安裝Docker 10
1.5.1 Docker的版本 10
1.5.2 Docker所支持的平臺(tái) 11
1.5.3 安裝Docker的準(zhǔn)備工作 11
1.5.4 使用軟件倉庫安裝Docker CE 14
1.5.5 通過便捷腳本安裝Docker CE 15
1.5.6 卸載Docker 16
1.5.7 安裝Docker之后的配置 16
1.6 docker命令行的使用 19
1.6.1 docker命令行接口類型 19
1.6.2 docker命令列表 19
1.6.3 docker命令的基本用法 21
1.6.4 docker命令示例 22
1.7 Docker API 22
1.7.1 Docker API類型 22
1.7.2 使用Docker API 23
1.8 Docker配置文件格式 23
1.8.1 JSON格式 23
1.8.2 YAML格式 24
1.9 習(xí)題 26
第2章 Docker鏡像 27
2.1 Docker鏡像基礎(chǔ) 28
2.1.1 進(jìn)一步理解鏡像的概念 28
2.1.2 鏡像的基本信息與標(biāo)識(shí) 28
2.1.3 鏡像描述文件Dockerfile 29
2.1.4 父鏡像與基礎(chǔ)鏡像 29
2.1.5 鏡像的分層結(jié)構(gòu) 30
2.1.6 鏡像操作命令 32
2.2 Docker鏡像的基本操作 32
2.2.1 拉取鏡像 32
2.2.2 顯示鏡像列表 33
2.2.3 設(shè)置鏡像標(biāo)簽 35
2.2.4 查看鏡像詳細(xì)信息 36
2.2.5 查看鏡像的構(gòu)建歷史以驗(yàn)證
鏡像分層 36
2.2.6 查找鏡像 37
2.2.7 刪除本地鏡像 38
2.2.8 Docker鏡像的導(dǎo)入和導(dǎo)出 39
2.3 Docker注冊中心 40
2.3.1 Docker注冊中心與倉庫 40
2.3.2 Docker Hub 41
2.3.3 阿里云的容器鏡像服務(wù) 47
2.3.4 私有Docker注冊中心 49
2.4 習(xí)題 51
第3章 Docker容器 52
3.1 Docker容器基礎(chǔ) 53
3.1.1 進(jìn)一步理解容器的概念 53
3.1.2 容器的基本信息與標(biāo)識(shí) 53
3.1.3 可寫的容器層 54
3.1.4 磁盤上的容器大小 54
3.1.5 “寫時(shí)拷貝”策略 55
3.1.6 容器操作命令 58
3.2 Docker容器的基本操作 58
3.2.1 創(chuàng)建和運(yùn)行容器 58
3.2.2 啟動(dòng)和停止容器 64
3.2.3 查看容器信息 65
3.2.4 進(jìn)入容器執(zhí)行操作 67
3.2.5 刪除容器 69
3.2.6 導(dǎo)出與導(dǎo)入容器 69
3.2.7 基于容器創(chuàng)建鏡像 70
3.3 限制容器運(yùn)行的資源 72
3.3.1 限制容器的內(nèi)存使用 72
3.3.2 限制容器的CPU使用 74
3.3.3 塊IO帶寬限制 75
3.3.4 資源限制的實(shí)現(xiàn)機(jī)制——控制組 77
3.3.5 動(dòng)態(tài)更改容器的配置 77
3.4 容器監(jiān)控 78
3.4.1 Docker容器監(jiān)控命令 78
3.4.2 使用cAdvisor監(jiān)控容器 79
3.5 容器的日志管理 81
3.5.1 使用docker logs命令查看容器
日志 81
3.5.2 配置日志驅(qū)動(dòng)重定向容器的
日志記錄 82
3.6 習(xí)題 83
第4章 Docker網(wǎng)絡(luò) 84
4.1 Docker網(wǎng)絡(luò)基礎(chǔ) 85
4.1.1 Docker容器網(wǎng)絡(luò)模型 85
4.1.2 Linux網(wǎng)絡(luò)基礎(chǔ) 87
4.1.3 單主機(jī)與多主機(jī)的Docker網(wǎng)絡(luò) 88
4.1.4 docker run命令的網(wǎng)絡(luò)配置用法 88
4.1.5 docker network命令的網(wǎng)絡(luò)
配置用法 89
4.2 配置容器的網(wǎng)絡(luò)連接 90
4.2.1 使用默認(rèn)橋接網(wǎng)絡(luò) 90
4.2.2 使用主機(jī)網(wǎng)絡(luò) 94
4.2.3 使用none網(wǎng)絡(luò)模式 95
4.2.4 使用container網(wǎng)絡(luò)模式 96
4.2.5 用戶自定義橋接網(wǎng)絡(luò) 97
4.3 容器與外部的網(wǎng)絡(luò)通信 105
4.3.1 容器訪問外部網(wǎng)絡(luò) 105
4.3.2 從外部網(wǎng)絡(luò)訪問容器 106
4.4 容器之間的網(wǎng)絡(luò)通信 109
4.4.1 容器之間的網(wǎng)絡(luò)通信的解決
方案 109
4.4.2 以傳統(tǒng)方式建立容器連接 110
4.5 習(xí)題 113
第5章 Docker存儲(chǔ) 114
5.1 Docker存儲(chǔ)驅(qū)動(dòng)及其選擇 115
5.1.1 概述 115
5.1.2 Docker版本所支持的存儲(chǔ)驅(qū)動(dòng) 116
5.1.3 Docker存儲(chǔ)驅(qū)動(dòng)所支持的底層
文件系統(tǒng) 116
5.1.4 選擇存儲(chǔ)驅(qū)動(dòng)需考慮的其他
事項(xiàng) 117
5.1.5 檢查當(dāng)前的存儲(chǔ)驅(qū)動(dòng) 117
5.2 使用overlay2存儲(chǔ)驅(qū)動(dòng) 118
5.2.1 使用overlay2存儲(chǔ)驅(qū)動(dòng)的要求 118
5.2.2 配置Docker使用overlay2存儲(chǔ)
驅(qū)動(dòng) 119
5.2.3 overlay2存儲(chǔ)驅(qū)動(dòng)的工作機(jī)制 122
5.2.4 容器使用overlay2存儲(chǔ)驅(qū)動(dòng)的
讀寫機(jī)制 126
5.2.5 OverlayFS與Docker性能 127
5.3 遷移Docker根目錄 127
5.4 Docker存儲(chǔ)的掛載類型 128
5.4.1 Docker卷與存儲(chǔ)驅(qū)動(dòng) 128
5.4.2 選擇合適的掛載類型 129
5.4.3 docker run命令的存儲(chǔ)配置
基本用法 130
5.5 使用Docker卷 130
5.5.1 卷的優(yōu)勢 130
5.5.2 選擇-v或--mount選項(xiàng) 131
5.5.3 創(chuàng)建和管理卷 131
5.5.4 啟動(dòng)帶有卷的容器 132
5.5.5 使用容器填充卷 133
5.5.6 使用只讀卷 133
5.5.7 刪除卷 133
5.6 使用綁定掛載 134
5.6.1 綁定掛載的功能限制 134
5.6.2 選擇-v或--mount選項(xiàng) 134
5.6.3 容器使用綁定掛載 135
5.6.4 使用只讀的綁定掛載 136
5.6.5 配置SELinux標(biāo)簽 137
5.7 使用tmpfs掛載 137
5.7.1 tmpfs掛載的特點(diǎn) 138
5.7.2 選擇--tmpfs或--mount選項(xiàng) 138
5.7.3 在容器中使用tmpfs掛載 138
5.7.4 指定tmpfs參數(shù) 139
5.8 使用卷容器 139
5.8.1 通過卷容器實(shí)現(xiàn)容器之間的
數(shù)據(jù)共享 139
5.8.2 通過卷容器來備份、恢復(fù)和遷移
數(shù)據(jù)卷 140
5.9 容器的數(shù)據(jù)共享 140
5.9.1 容器與主機(jī)共享數(shù)據(jù) 140
5.9.2 容器之間共享數(shù)據(jù) 141
5.10 習(xí)題 141
第6章 開發(fā)基于Docker的
應(yīng)用程序 143
6.1 開發(fā)Docker鏡像 144
6.1.1 進(jìn)一步了解Dockerfile 144
6.1.2 通過Dockerfile構(gòu)建鏡像的基本
方法 144
6.1.3 Dockerfile常用指令 146
6.1.4 Dockerfile示例 152
6.1.5 基于Dockerfile構(gòu)建鏡像 153
6.1.6 創(chuàng)建基礎(chǔ)鏡像 156
6.1.7 使用多階段構(gòu)建 157
6.1.8 編寫Dockerfile的通用準(zhǔn)則和
建議 159
6.1.9 管理鏡像 163
6.2 Docker的應(yīng)用程序開發(fā)準(zhǔn)則 163
6.2.1 盡可能縮減Docker鏡像的
大小 163
6.2.2 持久化應(yīng)用程序數(shù)據(jù) 164
6.2.3 盡可能使用Swarm集群服務(wù) 164
6.2.4 測試和部署時(shí)使用持續(xù)集成和
持續(xù)部署 164
6.2.5 了解開發(fā)環(huán)境和生產(chǎn)環(huán)境的
區(qū)別 165
6.3 將應(yīng)用程序Docker化 165
6.3.1 Docker化應(yīng)用程序的基本流程 165
6.3.2 將Node.js應(yīng)用程序Docker化 165
6.3.3 開發(fā)Node.js應(yīng)用程序 166
6.3.4 創(chuàng)建應(yīng)用程序的鏡像 169
6.3.5 基于應(yīng)用程序鏡像運(yùn)行容器 171
6.4 習(xí)題 171
第7章 自動(dòng)化構(gòu)建與持續(xù)集成 173
7.1 概述 174
7.1.1 鏡像的自動(dòng)化構(gòu)建 174
7.1.2 持續(xù)集成 175
7.2 Docker Hub結(jié)合GitHub實(shí)現(xiàn)
自動(dòng)化構(gòu)建 176
7.2.1 在GitHub上創(chuàng)建代碼倉庫 176
7.2.2 將Docker Hub連接到GitHub
賬戶 178
7.2.3 在Docker Hub上創(chuàng)建鏡像
倉庫 179
7.2.4 配置自動(dòng)化構(gòu)建選項(xiàng)和規(guī)則 181
7.2.5 創(chuàng)建自動(dòng)化構(gòu)建項(xiàng)目 182
7.2.6 基于代碼倉庫標(biāo)簽的自動(dòng)化
構(gòu)建 184
7.2.7 通過構(gòu)建觸發(fā)器觸發(fā)自動(dòng)化
構(gòu)建 186
7.2.8 使用Webhook 186
7.3 通過阿里云鏡像服務(wù)實(shí)現(xiàn)自動(dòng)化
構(gòu)建 187
7.3.1 設(shè)置代碼源 187
7.3.2 創(chuàng)建代碼倉庫 189
7.3.3 開始構(gòu)建 190
7.4 基于Jenkins和Docker組建
持續(xù)集成環(huán)境 192
7.4.1 準(zhǔn)備工作 192
7.4.2 部署GitLab服務(wù)器 193
7.4.3 部署Docker注冊服務(wù)器 195
7.4.4 部署并配置Jenkins服務(wù)器 195
7.4.5 新建Jenkins項(xiàng)目并進(jìn)行構(gòu)建 200
7.4.6 通過GitLab自動(dòng)觸發(fā)Jenkins
構(gòu)建項(xiàng)目 203
7.4.7 利用Jenkins的Docker插件來
構(gòu)建和推送鏡像 207
7.5 實(shí)現(xiàn)應(yīng)用程序的持續(xù)集成和
自動(dòng)化部署 209
7.5.1 準(zhǔn)備工作 209
7.5.2 部署持續(xù)集成環(huán)境 210
7.5.3 準(zhǔn)備源代碼并將其提交到代碼
倉庫 211
7.5.4 為Tale應(yīng)用程序構(gòu)建鏡像并
推送到Docker注冊服務(wù)器 211
7.5.5 新建Maven項(xiàng)目進(jìn)行構(gòu)建并
實(shí)現(xiàn)自動(dòng)化部署 212
7.5.6 實(shí)現(xiàn)項(xiàng)目的自動(dòng)化構(gòu)建 216
7.6 習(xí)題 217
第8章 Docker容器編排 218
8.1 Docker容器編排基礎(chǔ) 219
8.1.1 Docker Compose的架構(gòu) 219
8.1.2 使用Docker Compose的基本
步驟 220
8.1.3 Docker Compose的特性 220
8.1.4 Docker Compose的應(yīng)用場合 220
8.1.5 Docker Compose安裝 221
8.1.6 Docker Compose入門示例 222
8.2 Compose文件 225
8.2.1 Compose文件格式的不同版本 225
8.2.2 Compose文件結(jié)構(gòu) 226
8.2.3 服務(wù)定義 227
8.2.4 卷存儲(chǔ)定義 231
8.2.5 網(wǎng)絡(luò)定義 232
8.3 Compose命令行 232
8.3.1 Compose命令行格式 232
8.3.2 Compose主要命令簡介 233
8.4 Compose的環(huán)境變量 235
8.4.1 Compose使用環(huán)境變量的方式 236
8.4.2 不同位置定義的環(huán)境變量的
優(yōu)先級(jí) 237
8.5 在Compose中設(shè)置網(wǎng)絡(luò) 238
8.5.1 默認(rèn)網(wǎng)絡(luò)的配置 238
8.5.2 更新容器 239
8.5.3 使用links選項(xiàng) 239
8.5.4 指定自定義網(wǎng)絡(luò) 239
8.5.5 使用現(xiàn)有網(wǎng)絡(luò) 240
8.6 容器編排示例 240
8.6.1 示例一:實(shí)現(xiàn)Web負(fù)載均衡 240
8.6.2 示例二:在Linux上部署
ASP.NET與SQL Server 242
8.7 共享Compose通用配置 246
8.7.1 使用多個(gè)Compose文件 246
8.7.2 Compose文件追加和覆蓋
配置規(guī)則 248
8.8 在生產(chǎn)環(huán)境中使用Compose 248
8.8.1 針對(duì)生產(chǎn)環(huán)境修改Compose
文件 248
8.8.2 部署應(yīng)用程序更改 249
8.8.3 在單主機(jī)上運(yùn)行Compose 249
8.9 習(xí)題 249
第9章 多主機(jī)部署與管理 250
9.1 通過Docker Machine部署和
管理多主機(jī) 251
9.1.1 Docker Machine概述 251
9.1.2 Docker Machine安裝 252
9.1.3 Docker Machine驅(qū)動(dòng) 252
9.1.4 通過Docker Machine遠(yuǎn)程
安裝和部署Docker 253
9.1.5 通過Docker Machine管理
Docker主機(jī) 255
9.2 跨主機(jī)容器網(wǎng)絡(luò) 256
9.2.1 容器的跨主機(jī)通信方式 256
9.2.2 使用macvlan網(wǎng)絡(luò) 257
9.2.3 使用overlay網(wǎng)絡(luò) 260
9.3 跨主機(jī)監(jiān)控 266
9.3.1 使用Weave Scope進(jìn)行故障
診斷與監(jiān)控 266
9.3.2 Prometheus基礎(chǔ) 270
9.3.3 部署Prometheus系統(tǒng)監(jiān)控
Docker主機(jī)和容器 273
9.4 習(xí)題 285
第10章 Docker Swarm
集群 287
10.1 Docker Swarm基礎(chǔ) 288
10.1.1 Docker Swarm模式 288
10.1.2 Docker Swarm主要概念 288
10.1.3 Swarm節(jié)點(diǎn)工作機(jī)制 290
10.1.4 Swarm服務(wù)工作機(jī)制 291
10.1.5 使用PKI管理Swarm安全性 292
10.1.6 Swarm任務(wù)狀態(tài) 293
10.2 Docker Swarm基本操作 294
10.2.1 設(shè)置運(yùn)行環(huán)境 294
10.2.2 創(chuàng)建Swarm集群 295
10.2.3 將節(jié)點(diǎn)加入Swarm集群 295
10.2.4 將服務(wù)部署到Swarm集群 296
10.2.5 增加和縮減服務(wù) 297
10.2.6 故障遷移與重新平衡 298
10.2.7 刪除Swarm服務(wù) 299
10.2.8 對(duì)服務(wù)進(jìn)行滾動(dòng)更新 300
10.2.9 管理節(jié)點(diǎn) 302
10.2.10 發(fā)布服務(wù)端口 304
10.3 管理Swarm服務(wù)網(wǎng)絡(luò) 306
10.3.1 配置overlay網(wǎng)絡(luò) 306
10.3.2 創(chuàng)建和配置連接overlay
網(wǎng)絡(luò)的Swarm服務(wù) 308
10.3.3 服務(wù)發(fā)現(xiàn)與內(nèi)部容器之間的
通信 309
10.3.4 在overlay網(wǎng)絡(luò)上使用
獨(dú)立容器 311
10.4 通過堆棧在Swarm集群中部署
分布式應(yīng)用 311
10.4.1 Docker堆棧概述 312
10.4.2 示例一:Swarm堆棧部署
入門 314
10.4.3 示例二:Swarm集群多節(jié)點(diǎn)的
堆棧部署 317
10.5 管理敏感數(shù)據(jù) 319
10.5.1 Docker機(jī)密數(shù)據(jù)的應(yīng)用 320
10.5.2 Docker如何管理機(jī)密數(shù)據(jù) 320
10.5.3 Docker機(jī)密數(shù)據(jù)管理命令 320
10.5.4 示例一:Docker機(jī)密數(shù)據(jù)
操作入門 321
10.5.5 示例二:配置Nginx服務(wù)使用
機(jī)密數(shù)據(jù) 322
10.5.6 在Compose文件中使用Docker
機(jī)密數(shù)據(jù) 324
10.5.7 將Docker機(jī)密數(shù)據(jù)置入
鏡像中 326
10.6 存儲(chǔ)服務(wù)配置數(shù)據(jù) 326
10.6.1 Docker配置數(shù)據(jù)概述 326
10.6.2 示例一:Docker配置數(shù)據(jù)操作
入門 327
10.6.3 示例二:配置Nginx服務(wù)使用
配置數(shù)據(jù) 327
10.6.4 替換服務(wù)的配置數(shù)據(jù) 328
10.7 習(xí)題 329
第11章 生產(chǎn)環(huán)境中的Docker
運(yùn)維 330
11.1 配置和管理Docker守護(hù)進(jìn)程 331
11.1.1 配置并運(yùn)行Docker守護(hù)
進(jìn)程 331
11.1.2 排查Docker守護(hù)進(jìn)程故障 332
11.1.3 使用systemd控制Docker 334
11.2 配置Docker對(duì)象 335
11.2.1 配置對(duì)象使用自定義元數(shù)據(jù) 335
11.2.2 刪除不用的對(duì)象 336
11.2.3 格式化命令和日志的輸出 336
11.3 Docker安全 337
11.3.1 Docker安全機(jī)制 337
11.3.2 保護(hù)Docker守護(hù)進(jìn)程套接字 340
11.3.3 其他Docker安全措施 342
11.4 使用插件擴(kuò)展Docker 343
11.4.1 Docker插件概述 343
11.4.2 Docker插件安裝和使用示例 344
11.4.3 Docker插件開發(fā)示例 345
11.5 離線部署和使用Docker 346
11.5.1 離線安裝Docker 346
11.5.2 在離線環(huán)境中導(dǎo)入鏡像 347
11.5.3 離線建立私有Docker注冊
中心 348
11.6 習(xí)題 348