Docker 容器技術與運維
內容描述
本書針對容器技術與應用的實際需求,講解主流容器平臺Docker的應用和運維的技術方法,內容包括Docker基礎與安裝、鏡像管理、容器管理、Docker網絡配置、Docker存儲管理、Docker應用程序開發、鏡像自動化構建、持續集成和自動化部署、多容器編排、多主機管理和Docker容器集群平臺,以及生產環境中的Docker運維。
目錄大綱
第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生態系統4
1.2 Docker的應用4
1.2.1 實現應用程序快速、一致的交付4
1.2.2 響應式部署和應用程序5
1.2.3 運行更多的工作負載5
1.2.4 部署微服務應用5
1.3 Docker架構5
1.3.1 Docker客戶端6
1.3.2 Docker守護進程6
1.3.3 Docker註冊中心6
1.3.4 Docker對象6
1.4 Docker底層技術7
1.4.1 名稱空間7
1.4.2 控制組8
1.4.3 聯合文件系統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 鏡像的分層結構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 查看鏡像的構建歷史以驗證鏡像分層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 創建和運行容器58
3.2.2 啟動和停止容器64
3.2.3 查看容器信息65
3.2.4 進入容器執行操作67
3.2.5 刪除容器69
3.2.6 導出與導入容器69
3.2.7 基於容器創建鏡像70
3.3 限制容器運行的資源72
3.3.1 限制容器的內存使用72
3.3.2 限制容器的CPU使用74
3.3.3 塊IO帶寬限制75
3.3.4 資源限制的實現機制——控制組77
3.3.5 動態更改容器的配置77
3.4 容器監控78
3.4.1 Docker容器監控命令78
3.4.2 使用cAdvisor監控容器79
3.5 容器的日誌管理81
3.5.1 使用docker logs命令查看容器日誌81
3.5.2 配置日誌驅動重定向容器的日誌記錄82
3.6 習題83
第4章Docker網絡84
4.1 Docker網絡基礎85
4.1.1 Docker容器網絡模型85
4.1.2 Linux網絡基礎87
4.1.3 單主機與多主機的Docker網絡88
4.1.4 docker run命令的網絡配置用法88
4.1.5 docker network命令的網絡配置用法89
4.2 配置容器的網絡連接90
4.2.1 使用默認橋接網絡90
4.2.2 使用主機網絡94
4.2.3 使用none網絡模式95
4.2.4 使用container網絡模式96
4.2.5 用戶自定義橋接網絡97
4.3 容器與外部的網絡通信105
4.3.1 容器訪問外部網絡105
4.3.2 從外部網絡訪問容器106
4.4 容器之間的網絡通信109
4.4.1 容器之間的網絡通信的解決方案109
4.4.2 以傳統方式建立容器連接110
4.5 習題113
第5章Docker存儲114
5.1 Docker存儲驅動及其選擇115
5.1.1 概述115
5.1.2 Docker版本所支持的存儲驅動116
5.1.3 Docker存儲驅動所支持的底層文件系統116
5.1.4 選擇存儲驅動需考慮的其他事項117
5.1.5 檢查當前的存儲驅動117
5.2 使用overlay2存儲驅動118
5.2.1 使用overlay2存儲驅動的要求118
5.2.2 配置Docker使用overlay2存儲驅動119
5.2.3 overlay2存儲驅動的工作機制122
5.2.4 容器使用overlay2存儲驅動的讀寫機制126
5.2.5 OverlayFS與Docker性能127
5.3 遷移Docker根目錄127
5.4 Docker存儲的掛載類型128
5.4.1 Docker卷與存儲驅動128
5.4.2 選擇合適的掛載類型129
5.4.3 docker run命令的存儲配置基本用法130
5.5 使用Docker卷130
5.5.1 卷的優勢130
5.5.2 選擇-v或--mount選項131
5.5.3 創建和管理卷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參數139
5.8 使用卷容器139
5.8.1 通過卷容器實現容器之間的數據共享139
5.8.2 通過卷容器來備份、恢復和遷移數據卷140
5.9 容器的數據共享140
5.9.1 容器與主機共享數據140
5.9.2 容器之間共享數據141
5.10 習題141
第6章開發基於Docker的應用程序143
6.1 開發Docker鏡像144
6.1.1 進一步了解Dockerfile 144
6.1.2 通過Dockerfile構建鏡像的基本方法144
6.1.3 Dockerfile常用指令146
6.1.4 Dockerfile示例152
6.1.5 基於Dockerfile構建鏡像153
6.1.6 創建基礎鏡像156
6.1.7 使用多階段構建157
6.1.8 編寫Dockerfile的通用準則和建議159
6.1.9 管理鏡像163
6.2 Docker的應用程序開發準則163
6.2.1 盡可能縮減Docker鏡像的大小163
6.2.2 持久化應用程序數據164
6.2.3 盡可能使用Swarm集群服務164
6.2.4 測試和部署時使用持續集成和持續部署164
6.2.5 了解開發環境和生產環境的區別165
6.3 將應用程序Docker化165
6.3.1 Docker化應用程序的基本流程165
6.3.2 將Node.js應用程序Docker化165
6.3.3 開發Node.js應用程序166
6.3.4 創建應用程序的鏡像169
6.3.5 基於應用程序鏡像運行容器171
6.4 習題171
第7章自動化構建與持續集成173
7.1 概述174
7.1.1 鏡像的自動化構建174
7.1.2 持續集成175
7.2 Docker Hub結合GitHub實現自動化構建176
7.2.1 在GitHub上創建代碼倉庫176
7.2.2 將Docker Hub連接到GitHub賬戶178
7.2.3 在Docker Hub上創建鏡像倉庫179
7.2.4 配置自動化構建選項和規則181
7.2.5 創建自動化構建項目182
7.2.6 基於代碼倉庫標籤的自動化構建184
7.2.7 通過構建觸發器觸發自動化構建186
7.2.8 使用Webhook 186
7.3 通過阿里雲鏡像服務實現自動化構建187
7.3.1 設置代碼源187
7.3.2 創建代碼倉庫189
7.3.3 開始構建190
7.4 基於Jenkins和Docker組建持續集成環境192
7.4.1 準備工作192
7.4.2 部署GitLab服務器193
7.4.3 部署Docker註冊服務器195
7.4.4 部署並配置Jenkins服務器195
7.4.5 新建Jenkins項目並進行構建200
7.4.6 通過GitLab自動觸發Jenkins構建項目203
7.4.7 利用Jenkins的Docker插件來構建和推送鏡像207
7.5 實現應用程序的持續集成和自動化部署209
7.5.1 準備工作209
7.5.2 部署持續集成環境210
7.5.3 準備源代碼並將其提交到代碼倉庫211
7.5.4 為Tale應用程序構建鏡像並推送到Docker註冊服務器211
7.5.5 新建Maven項目進行構建並實現自動化部署212
7.5.6 實現項目的自動化構建216
7.6 習題217
第8章Docker容器編排218
8.1 Docker容器編排基礎219
8.1.1 Docker Compose的架構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文件結構226
8.2.3 服務定義227
8.2.4 卷存儲定義231
8.2.5 網絡定義232
8.3 Compose命令行232
8.3.1 Compose命令行格式232
8.3.2 Compose主要命令簡介233
8.4 Compose的環境變量235
8.4.1 Compose使用環境變量的方式236
8.4.2 不同位置定義的環境變量的優先級237
8.5 在Compose中設置網絡238
8.5.1 默認網絡的配置238
8.5.2 更新容器239
8.5.3 使用links選項239
8.5.4 指定自定義網絡239
8.5.5 使用現有網絡240
8.6 容器編排示例240
8.6.1 示例一:實現Web負載均衡240
8.6.2 示例二:在Linux上部署ASP.NET與SQL Server 242
8.7 共享Compose通用配置246
8.7.1 使用多個Compose文件246
8.7.2 Compose文件追加和覆蓋配置規則248
8.8 在生產環境中使用Compose 248
8.8.1 針對生產環境修改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驅動252
9.1.4 通過Docker Machine遠程安裝和部署Docker 253
9.1.5 通過Docker Machine管理Docker主機255
9.2 跨主機容器網絡256
9.2.1 容器的跨主機通信方式256
9.2.2 使用macvlan網絡257
9.2.3 使用overlay網絡260
9.3 跨主機監控266
9.3.1 使用Weave Scope進行故障診斷與監控266
9.3.2 Prometheus基礎270
9.3.3 部署Prometheus系統監控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節點工作機制290
10.1.4 Swarm服務工作機制291
10.1.5 使用PKI管理Swarm安全性292
10.1.6 Swarm任務狀態293
10.2 Docker Swarm基本操作294
10.2.1 設置運行環境294
10.2.2 創建Swarm集群295
10.2.3 將節點加入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 管理節點302
10.2.10 發布服務端口304
10.3 管理Swarm服務網絡306
10.3.1 配置overlay網絡306
10.3.2 創建和配置連接overlay網絡的Swarm服務308
10.3.3 服務發現與內部容器之間的通信309
10.3.4 在overlay網絡上使用獨立容器311
10.4 通過堆棧在Swarm集群中部署分佈式應用311
10.4.1 Docker堆棧概述312
10.4.2 示例一:Swarm堆棧部署入門314
10.4.3 示例二:Swarm集群多節點的堆棧部署317
10.5 管理敏感數據319
10.5.1 Docker機密數據的應用320
10.5.2 Docker如何管理機密數據320
10.5.3 Docker機密數據管理命令320
10.5.4 示例一:Docker機密數據操作入門321
10.5.5 示例二:配置Nginx服務使用機密數據322
10.5.6 在Compose文件中使用Docker機密數據324
10.5.7 將Docker機密數據置入鏡像中326
10.6 存儲服務配置數據326
10.6.1 Docker配置數據概述326
10.6.2 示例一:Docker配置數據操作入門327
10.6.3 示例二:配置Nginx服務使用配置數據327
10.6.4 替換服務的配置數據328
10.7 習題329
第11章生產環境中的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 配置對象使用自定義元數據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插件開發示例345
11.5 離線部署和使用Docker 346
11.5.1 離線安裝Docker 346
11.5.2 在離線環境中導入鏡像347
11.5.3 離線建立私有Docker註冊中心348
11.6 習題348
作者介紹
鍾小平,已出版的科技零售書15579《網絡服務器配置與應用(第3版)》,累計銷量36000冊。
寫作能力和專業素養都非常不錯。