前言
你是否還在一臺一臺地安裝服務(wù)器部署環(huán)境
項(xiàng)目要求快速上線并且部署多臺服務(wù)器環(huán)境時,需要一臺一臺服務(wù)器執(zhí)行yuminstall、vim、restart等命令。這時如果有一個U盤,能把整個環(huán)境直接復(fù)制到每一臺服務(wù)器上,那該多好啊。Docker就是那個U盤。
云平臺都在使用容器,并且提供完整的容器運(yùn)維平臺環(huán)境。
國內(nèi)外知名的云服務(wù)商都提供了容器以及容器運(yùn)維平臺,基本上可以做到少量配置、一鍵上線的效果。
擁有多個容器,并且這些容器可能跨越多個服務(wù)器主機(jī),如何管理它們?
Kubernetes為那些需要大規(guī)模部署容器的工作負(fù)載提供了編排與管理能力。Kubernetes編排讓用戶能夠構(gòu)建多容器的應(yīng)用服務(wù),在集群上調(diào)度或伸縮這些容器,以及管理它們隨時間變化的健康狀態(tài)。
本書是否適合你
本書幫你進(jìn)入云服務(wù)時代,掌握Docker和Kubernetes相關(guān)知識。第1~11章介紹Docker,讀者可以從這幾章內(nèi)容中快速地掌握Docker相關(guān)知識。第12~22章介紹Kubernetes,盡管Kubernetes的知識點(diǎn)非常多,但是作為一本入門書,本書精心組織相關(guān)知識點(diǎn),提綱挈領(lǐng)地介紹Kubernetes中必須掌握的重要知識點(diǎn)。
本書特點(diǎn)
(1)講解細(xì)致,分析透徹。不論是理論知識的介紹,還是實(shí)例的開發(fā),本書都是從實(shí)際應(yīng)用角度出發(fā),精心選擇開發(fā)中的典型例子,使讀者快速掌握。
(2)深入淺出,輕松易學(xué)。以實(shí)例為主線,激發(fā)讀者的閱讀興趣,讓讀者能夠真正學(xué)習(xí)到Docker和Kubernetes最實(shí)用、最前沿的技術(shù)。
(3)技術(shù)新穎,與時俱進(jìn)。結(jié)合時下熱門的技術(shù),了解并熟識更多相關(guān)領(lǐng)域的先進(jìn)技術(shù)。
(4)貼近讀者,貼近實(shí)際。大量成熟案例的使用和說明,幫助讀者快速找到問題的最優(yōu)解決方案,書中很多實(shí)例來自作者工作的實(shí)際環(huán)境。
(5)貼心提醒,提示要點(diǎn)。本書根據(jù)需要在各章使用了注意說明等小提示,讓讀者可以在學(xué)習(xí)過程中更輕松地理解相關(guān)知識點(diǎn)及概念。
示例源碼和課件下載
本書配套的示例源碼和課件需要用微信掃描下邊二維碼獲取。
本書讀者
- Docker與Kubernetes初學(xué)者
- 運(yùn)維工程師
- 前端開發(fā)人員
- 后端開發(fā)人員
- 快速部署研發(fā)、測試、生產(chǎn)環(huán)境的IT人員
- 對容器和容器管理有興趣的高校學(xué)生
作者
2023年5月
目錄
第1章全面認(rèn)識Docker 1
1.1容器技術(shù) 1
1.1.1什么是容器 2
1.1.2容器與虛擬機(jī)之間的區(qū)別 3
1.1.3容器究竟解決了什么問題 4
1.1.4容器的優(yōu)點(diǎn) 5
1.1.5容器的缺點(diǎn) 5
1.1.6容器的分類 6
1.2Docker技術(shù) 7
1.2.1什么是Docker 7
1.2.2Docker的由來 8
1.2.3Docker究竟是什么 8
1.3Docker的架構(gòu)與組成 9
1.3.1Docker的架構(gòu) 9
1.3.2Docker中應(yīng)用系統(tǒng)的存在
形式 11
1.4為什么使用Docker 11
1.4.1Docker的應(yīng)用場景 11
1.4.2Docker可以解決哪些問題 12
1.4.3Docker的應(yīng)用成本 12
1.5Docker和Podman 12
1.5.1Podman 13
1.5.2Docker和Podman的比較 13
第2章初步體驗(yàn)Docker 15
2.1在Windows中安裝Docker 15
2.1.1通過Boot2Docker
體驗(yàn)Docker 15
2.1.2通過DockerDesktop
體驗(yàn)Docker 21
2.1.3搭建第一個Docker應(yīng)用:
Helloworld 28
2.2在Ubuntu中安裝Docker 30
2.2.1通過Ubuntu倉庫
安裝Docker 30
2.2.2通過Docker倉庫
安裝Docker 32
2.2.3通過軟件包安裝Docker 33
2.2.4測試安裝的結(jié)果 33
第3章Docker基本管理 35
3.1鏡像管理 35
3.1.1查找鏡像 35
3.1.2下載鏡像 36
3.1.3列出本地鏡像 37
3.1.4刪除鏡像 37
3.1.5查看鏡像 37
3.1.6構(gòu)建鏡像 40
3.1.7鏡像標(biāo)簽管理 42
3.2容器管理 43
3.2.1創(chuàng)建容器 43
3.2.2查看容器 45
3.2.3啟動容器 46
3.2.4停止容器 46
3.2.5刪除容器 47
3.3網(wǎng)絡(luò)管理 47
3.3.1Docker網(wǎng)絡(luò)原理 47
3.3.2網(wǎng)絡(luò)模式 49
3.3.3Docker容器的互聯(lián) 50
3.3.4容器與外部網(wǎng)絡(luò)的互聯(lián) 52
第4章Docker的倉庫 54
4.1公共鏡像市場 54
4.1.1什么是DockerHub 54
4.1.2DockerHub的特點(diǎn) 54
4.1.3使用DockerHub 55
4.2第三方鏡像市場 57
4.2.1公有鏡像中心(加速器) 57
4.2.2私有鏡像中心 58
4.3私有倉庫 59
4.3.1創(chuàng)建私有倉庫 59
4.3.2使用私有倉庫 60
第5章Docker數(shù)據(jù)管理 63
5.1數(shù)據(jù)卷 63
5.1.1什么是數(shù)據(jù)卷 63
5.1.2創(chuàng)建數(shù)據(jù)卷 64
5.1.3不同類型的數(shù)據(jù)卷 64
5.2數(shù)據(jù)卷容器 67
5.2.1新建數(shù)據(jù)卷容器 67
5.2.2共享數(shù)據(jù)卷容器 67
5.3數(shù)據(jù)遷移 67
5.3.1備份 68
5.3.2恢復(fù) 68
第6章Dockerfile 69
6.1文件結(jié)構(gòu)說明 69
6.1.1Dockfile的簡單格式 69
6.1.2提示解釋器 70
6.1.3環(huán)境變量替換 71
6.2指令簡介 71
6.2.1FROM 72
6.2.2ARG 72
6.2.3RUN 73
6.2.4CMD 77
6.2.5LABEL 78
6.2.6EXPOSE 79
6.2.7ENV 79
6.2.8ADD 80
6.2.9COPY 81
6.2.10ENTRYPOINT 81
6.2.11VOLUME 86
6.2.12USER 87
6.2.13WORKDIR 87
6.2.14ONBUILD 88
6.2.15STOPSIGNAL 89
6.2.16HEALTHCHECK 89
6.2.17SHELL 90
6.3創(chuàng)建鏡像 92
6.3.1命令詳解 92
6.3.2.dockerignore文件 92
6.3.3最佳實(shí)踐 93
第7章Docker日志 98
7.1dockerlogs 98
7.2loggingdriver 99
7.3ELK 100
7.3.1概述 101
7.3.2安裝ELK 101
7.3.3Filebeat配置 103
7.3.4Kibana配置 105
第8章DockerCompose 107
8.1簡介 107
8.1.1主要功能 108
8.1.2常見用例 108
8.2安裝Compose 109
8.2.1DockerDesktop 109
8.2.2安裝ComposePlugin 109
8.2.3獨(dú)立安裝Compose 110
8.3使用Compose部署 110
8.3.1先決條件 111
8.3.2步驟1:定義應(yīng)用程序
依賴項(xiàng) 111
8.3.3步驟2:創(chuàng)建Dockerfile 112
8.3.4步驟3:在撰寫文件中定義
服務(wù) 112
8.3.5步驟4:使用Compose生成并
運(yùn)行應(yīng)用 113
8.3.6步驟5:編輯Compose文件以
添加Volume 114
8.3.7步驟6:使用Compose重新
生成并運(yùn)行應(yīng)用 114
8.3.8步驟7:更新應(yīng)用程序 115
8.3.9步驟8:嘗試使用其他命令 115
8.4使用Compose命令 116
第9章DockerSwarm 118
9.1基本概念 118
9.1.1簡介 118
9.1.2關(guān)鍵概念 120
9.2使用Swarm 121
9.2.1創(chuàng)建Swarm 121
9.2.2添加Swarm節(jié)點(diǎn) 122
9.3使用服務(wù)命令 123
9.3.1部署一個服務(wù) 123
9.3.2查看服務(wù) 124
9.3.3擴(kuò)展服務(wù) 124
9.3.4刪除服務(wù) 125
9.3.5應(yīng)用滾動更新 126
第10章DockerPortainer 129
10.1簡介 129
10.2安裝 130
10.3常規(guī)操作 132
10.3.1App模板 132
10.3.2鏡像操作 133
10.3.3容器操作 134
10.3.4添加Docker鏡像倉庫 136
第11章Docker實(shí)戰(zhàn)應(yīng)用 138
11.1OSDocker 138
11.1.1BusyBox 138
11.1.2Alphine 139
11.1.3Ubuntu 139
11.1.4CentOS 139
11.2Web服務(wù)應(yīng)用 140
11.2.1Apache 140
11.2.2Nginx 140
11.3數(shù)據(jù)庫應(yīng)用 141
11.3.1MySQL 141
11.3.2Redis 142
11.3.3MongoDB 142
11.4編程應(yīng)用 143
11.4.1Java 143
11.4.2Python 143
第12章Kubernetes初步入門 145
12.1Kubernetes技術(shù) 145
12.1.1什么是Kubernetes 145
12.1.2Kubernetes的發(fā)展歷史 145
12.1.3為什么使用Kubernetes 146
12.2Kubernetes的重要概念 147
12.2.1Cluster(集群) 147
12.2.2Master(控制節(jié)點(diǎn)) 147
12.2.3Node(工作節(jié)點(diǎn)) 148
12.2.4Pod 149
12.2.5服務(wù) 149
12.2.6卷 150
12.2.7命名空間 150
第13章安裝Kubernetes 151
13.1通過軟件包管理工具安裝
Kubernetes 151
13.1.1軟件包管理工具 151
13.1.2節(jié)點(diǎn)規(guī)劃 152
13.1.3安裝前準(zhǔn)備 153
13.1.4Etcd集群配置 153
13.1.5Master節(jié)點(diǎn)的配置 158
13.1.6Node節(jié)點(diǎn)的配置 160
13.1.7配置網(wǎng)絡(luò) 162
13.2Kubeadm的使用方法 163
13.2.1Kubeadm的安裝方法 164
13.2.2Kubeadm的基本語法 165
13.2.3基礎(chǔ)OS環(huán)境部署 165
13.2.4部署Master節(jié)點(diǎn) 167
13.2.5部署Node節(jié)點(diǎn) 167
13.2.6部署CNI網(wǎng)絡(luò) 168
13.2.7重置節(jié)點(diǎn) 168
第14章Kubernetes命令行工具 169
14.1kubectl用法概述 169
14.2kubectl的子命令 171
14.3Kubernetes資源對象類型 173
14.4kubectl的輸出格式 173
14.5kubectl命令舉例 174
第15章運(yùn)行應(yīng)用 178
15.1Deployment 178
15.1.1什么是Deployment 178
15.1.2Deployment與ReplicaSet 179
15.1.3運(yùn)行Deployment 179
15.1.4使用配置文件 185
15.1.5擴(kuò)容和縮容 189
15.1.6故障轉(zhuǎn)移 191
15.1.7通過標(biāo)簽控制Pod的位置 193
15.1.8刪除Deployment 195
15.1.9DaemonSet 195
15.2Job 197
15.2.1什么是Job 197
15.2.2Job失敗處理 199
15.2.3Job的并行執(zhí)行 200
15.2.4Job的定時執(zhí)行 201
第16章通過服務(wù)訪問應(yīng)用 203
16.1服務(wù)及其功能 203
16.1.1服務(wù)的基本概念 203
16.1.2服務(wù)的功能原理 204
16.2管理服務(wù) 205
16.2.1創(chuàng)建服務(wù) 205
16.2.2查看服務(wù) 207
16.2.3刪除服務(wù) 208
16.3外部網(wǎng)絡(luò)訪問服務(wù) 209
16.3.1kube-proxy結(jié)合ClusterIP 209
16.3.2通過NodePort訪問服務(wù) 210
16.3.3通過負(fù)載均衡訪問服務(wù) 212
16.4通過CoreDNS訪問應(yīng)用 212
16.4.1CoreDNS簡介 213
16.4.2安裝CoreDNS 213
第17章存儲管理 220
17.1存儲卷 220
17.1.1什么是存儲卷 220
17.1.2emptyDir卷 221
17.1.3hostPath卷 224
17.1.4NFS卷 224
17.1.5Secret卷 225
17.1.6iSCSI卷 228
17.2持久化存儲卷 229
17.2.1什么是持久化存儲卷 229
17.2.2持久化存儲卷請求 229
17.2.3持久化存儲卷的生命周期 230
17.2.4持久化存儲卷靜態(tài)綁定 231
17.2.5持久化存儲卷動態(tài)綁定 234
17.2.6回收 238
第18章Kubernetes軟件包管理 241
18.1Helm 241
18.1.1Helm相關(guān)概念 241
18.1.2Tiller 242
18.1.3Chart 242
18.1.4Repository 242
18.1.5Release 243
18.2安裝Helm 243
18.2.1安裝客戶端 243
18.2.2安裝服務(wù)器端Tiller 245
18.3Chart文件結(jié)構(gòu) 247
18.4使用Helm 247
18.4.1軟件倉庫的管理 248
18.4.2查找Chart 248
18.4.3安裝Chart 250
18.4.4查看已安裝的Chart 252
18.4.5刪除Release 253
第19章Kubernetes網(wǎng)絡(luò)管理 254
19.1Kubernetes網(wǎng)絡(luò)基礎(chǔ) 254
19.1.1Kubernetes網(wǎng)絡(luò)模型 254
19.1.2命名空間 255
19.1.3veth網(wǎng)絡(luò)接口 255
19.1.4netfilter/iptables 256
19.1.5網(wǎng)橋 256
19.1.6路由 256
19.2Kubernetes網(wǎng)絡(luò)實(shí)現(xiàn) 257
19.2.1Docker與Kubernetes網(wǎng)絡(luò)比較 257
19.2.2容器之間的通信 261
19.2.3Pod之間的通信 262
19.2.4Pod和服務(wù)之間的通信 265
19.3Flannel 272
19.3.1Flannel簡介 272
19.3.2安裝Flannel 273
第20章KubernetesDashboard 278
20.1KubernetesDashboard配置文件 278
20.1.1Kubernetes角色控制 278
20.1.2kubernetes-dashboard.yaml 279
20.2安裝KubernetesDashboard 284
20.2.1官方安裝方法 284
20.2.2自定義安裝方法 284
20.3Dashboard的使用方法 287
20.3.1Dashboard概況 287
20.3.2通過Dashboard創(chuàng)建資源 289
第21章Kubernetes安全 290
21.1在集群級別應(yīng)用Pod安全標(biāo)準(zhǔn) 290
21.1.1正確選擇要應(yīng)用的Pod安全標(biāo)準(zhǔn) 290
21.1.2設(shè)置模式、版本和標(biāo)準(zhǔn) 292
21.1.3清理 295
21.2在命名空間級別應(yīng)用Pod 295
21.2.1創(chuàng)建集群 295
21.2.2為命名空間啟用Pod安全標(biāo)準(zhǔn)檢查 296
21.2.3驗(yàn)證Pod安全標(biāo)準(zhǔn) 296
21.2.4清理 297
21.3使用AppArmor限制容器對資源的訪問 297
21.3.1環(huán)境準(zhǔn)備 297
21.3.2保護(hù)Pod 298
21.4使用Seccomp限制容器對資源的訪問 299
21.4.1下載Seccomp配置文件示例 299
21.4.2使用Kind創(chuàng)建本地Kubernetes集群 299
21.4.3使用RuntimeDefault做負(fù)載均衡 300
21.4.4創(chuàng)建使用容器運(yùn)行時默認(rèn)Seccomp配置文件的Pod 302
21.4.5使用Seccomp配置文件創(chuàng)建
Pod以進(jìn)行系統(tǒng)調(diào)用審計(jì) 302
第22章Kubernetes集群管理 305
22.1資源管理 305
22.1.1組織資源配置 305
22.1.2kubectl中的批量操作 306
22.1.3有效地使用標(biāo)簽 308
22.1.4多標(biāo)簽部署 309
22.1.5更新標(biāo)簽 310
22.1.6更新注解 310
22.1.7擴(kuò)展應(yīng)用 310
22.1.8就地更新資源 311
22.1.9破壞性地更新 312
22.1.10在不中斷服務(wù)的情況下更新應(yīng)用 312
22.2日志架構(gòu) 312
22.2.1Pod和容器日志 313
22.2.2集群日志架構(gòu) 314
22.3系統(tǒng)組件指標(biāo) 320
22.3.1Kubernetes中組件的指標(biāo) 320
22.3.2指標(biāo)生命周期 321
22.3.3顯示隱藏指標(biāo) 321
22.3.4禁用加速器指標(biāo) 322
22.3.5組件指標(biāo) 322
22.4系統(tǒng)日志 323
22.4.1KLog 323
22.4.2KLog輸出 324
寫在最后 325