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