Docker 實戰派 — 容器入門七步法
內容描述
雲原生時代,應用變得越來越強大,與此同時,它的復雜度也在呈指數級上升。希望實現基礎設施和流程現代化,甚至組織文化現代化的企業的最終目標是仔細選擇最適合其具體情況的雲技術。在現代化的企業應用中,集群部署、隔離環境、灰度發布、服務網格及動態擴容/縮容缺一不可,而Docker 技術則是其中間的必要橋梁。 本書將圍繞Docker 技術展開介紹,通過“七步法”為讀者構建完善的學習體系。開篇先通過“蓋房子”的故事展開,讓讀者迅速瞭解Docker 是什麽、能做什麽。然後補充一些與Docker 技術相關的基礎知識,包含Linux、Shell、Nginx 及網絡調試基礎,為讀者的後續學習掃除障礙。最後通過示例幫助讀者進行Docker 容器化體驗。“授人以魚,不如授人以漁”。本書通過剖析Docker 的核心原理、持續集成與發布及企業級應用案例,一步步為讀者打造“通向企業級應用”的階梯。 本書內容詳盡,由淺入深,案例豐富。
目錄大綱
★★第1章 快速了解Docker /1
1.1 Docker簡介 /1
1.1.1 通過“蓋房子”來理解Docker—— 一次構建,處處運行 /1
1.1.2 Docker的適用人群 /3
1.1.3 Docker能解決什麽問題 /4
1.1.4 如何快速入門 /6
1.2 Docker的基本組成 /7
1.2.1 Docker的三大組成部分 /7
1.2.2 Docker的三大核心概念 /8
1.3 入門必備基礎知識 /10
1.3.1 Linux基本操作 /10
1.3.2 Shell基礎命令 /22
1.3.3 網絡調試基礎 /27
1.3.4 Nginx配置 /34
1.3.5 區分物理機、虛擬機與容器 /41
1.4 安裝Docker /44
1.4.1 在Windows中安裝 /44
1.4.2 在macOS中安裝 /47
1.4.3 在CentOS中安裝 /49
1.4.4 在Ubuntu中安裝 /50
1.4.5 配置鏡像加速 /52
1.5 使用Docker桌面端工具 /54
1.5.1 基本功能介紹 /54
1.5.2 使用鏡像倉庫 /61
1.6 Docker常用命令1——鏡像命令 /65
1.6.1 Dockerfile配置示例 /65
1.6.2 FROM命令 /66
1.6.3 MAINTAINER命令 /66
1.6.4 RUN命令 /67
1.6.5 ADD命令和COPY命令 /69
1.6.6 ENV命令 /69
1.6.7 WORKDIR命令 /70
1.6.8 EXPOSE命令 /70
1.6.9 CMD命令和ENTRYPOINT命令 /70
1.6.10 VOLUME命令 /71
1.7 Docker常用命令2——容器命令 /72
1.7.1 clone命令 /72
1.7.2 build命令 /73
1.7.3 run命令 /73
1.7.4 share命令 /75
1.7.5 push命令 /76
1.8 本章小結 /77
★★第2章 開始第一個Docker項目 /78
2.1 項目開發的主要階段 /78
2.1.1 一般項目開發的主要階段 /78
2.1.2 Docker項目開發的主要階段 /79
2.2 項目前期準備 /80
2.2.1 準備相關環境 /80
2.2.2 準備項目 /81
2.3 對Web項目進行容器化改造 /84
2.3.1 構建項目 /84
2.3.2 配置Nginx文件 /85
2.3.3 創建和配置Dockerfile文件 /88
2.4 構建項目鏡像 /89
2.4.1 準備啟動環境 /89
2.4.2 構建鏡像 /89
2.5 在容器中運行項目鏡像 /91
2.5.1 運行容器 /92
2.5.2 管理容器 /92
2.5.3 在瀏覽器中打開 /93
2.5.4 進程管理 /93
2.5.5 日志查看 /96
2.6 管理鏡像 /97
2.6.1 了解鏡像倉庫 /97
2.6.2 最大的鏡像倉庫——Docker Hub /98
2.6.3 把項目鏡像推送到遠程鏡像倉庫中 /98
2.7 發布項目 /102
2.7.1 準備服務器環境 /102
2.7.2 部署項目 /103
2.7.3 確定容器是否運行正常 /103
2.7.4 線上驗證 /105
2.8 本章小結 /106
★★第3章 了解Docker的核心原理 /107
3.1 熟悉Docker架構 /107
3.2 Linux的Namespace機制 /112
3.3 Linux底層的Cgroup隔離機制 /117
3.4 容器的生命周期 /120
3.4.1 容器的生命狀態 /121
3.4.2 容器狀態之間的關系 /121
3.4.3 終止進程的SIGKILL信號和SIGTERM信號 /123
3.5 Docker的網絡與通信 /124
3.5.1 網絡驅動程序 /124
3.5.2 網橋網絡 /125
3.5.3 覆蓋網絡 /127
3.5.4 Macvlan網絡 /131
3.5.5 禁用Docker上的網絡 /133
3.6 Docker UnionFS的原理 /135
3.6.1 UnionFS的概念 /135
3.6.2 加載Docker鏡像的原理 /135
3.7 Device Mapper存儲 /138
3.7.1 鏡像分層和共享 /138
3.7.2 在Docker中配置devicemapper /139
3.7.3 配置loop-lvm模式 /140
3.7.4 配置direct-lvm模式 /142
3.7.5 最佳實踐 /146
3.8 Compose容器編排 /146
3.8.1 安裝Docker Compose /147
3.8.2 基本使用 /148
3.8.3 驗證服務是否正常 /150
3.8.4 綁定目錄與更新應用 /150
3.8.5 在後台啟動服務 /151
3.8.6 部署分布式應用 /151
3.9 Docker源碼分析 /156
3.9.1 給初學者的建議 /156
3.9.2 學習Docker源碼的思路 /157
3.9.3 容器是如何被啟動的 /158
3.9.4 Docker Client是如何訪問Docker Server的 /165
3.9.5 Docker Engine是如何工作的 /166
3.10 本章小結 /169
★★第4章 趁熱打鐵,Docker項目實戰 /170
4.1 前端環境準備 /170
4.1.1 Web服務器——安裝Nginx /170
4.1.2 服務器端環境——安裝Node.js /172
4.2 前端應用1——Web技術棧 /174
4.2.1 Web框架1——React實戰 /174
4.2.2 Web框架2——Vue.js實戰 /176
4.2.3 Web框架3——其他 /177
4.3 前端應用2——Node.js /180
4.3.1 客戶端渲染——CSR實戰 /180
4.3.2 服務器端渲染——SSR實戰 /180
4.4 後端環境準備 /182
4.4.1 注冊中心——ZooKeeper /182
4.4.2 消息隊列框架——Kafka /185
4.4.3 微服務框架——Dubbo /188
4.4.4 數據庫1——安裝Redis /191
4.4.5 數據庫2——安裝MySQL /192
4.4.6 數據庫3——安裝MongoDB /193
4.5 後端容器1——Java技術棧 /194
4.5.1 Java常用框架 /194
4.5.2 Java微服務容器化實戰——Spring Boot /197
4.5.3 Java技術棧改造的常見問題 /202
4.6 後端容器2——Go語言技術棧 /204
4.6.1 Go語言常用框架 /204
4.6.2 Web框架改造1——Gin實戰 /205
4.6.3 Web框架改造2——Beego實戰 /209
4.6.4 Go語言技術棧改造的常見問題 /212
4.7 後端容器3——Python技術棧 /213
4.7.1 Python常見框架 /214
4.7.2 Web框架改造——Django實戰 /215
4.7.3 微服務框架改造——Nameko實戰 /220
4.7.4 Python技術棧改造的常見問題 /223
4.8 Docker測試實戰 /224
4.8.1 Docker自動化測試 /225
4.8.2 使用Docker測試靜態網站 /227
4.8.3 使用Docker進行UI自動化測試 /230
4.9 本章小結 /237
★★第5章 Docker的持續集成與發布 /238
5.1 準備鏡像倉庫 /238
5.1.1 倉庫選型 /238
5.1.2 原生Docker倉庫 /239
5.1.3 Harbor鏡像倉庫 /240
5.2 初始化容器配置文件 /244
5.2.1 生成Dockerfile文件 /244
5.2.2 Dockerfile文件配置的最佳實踐 /245
5.3 通過Jenkins持續集成Docker /248
5.3.1 部署Jenkins /248
5.3.2 創建Jenkins流水線 /250
5.3.3 持續集成Docker /252
5.3.4 前端緩存優化 /255
5.4 通過Jenkins發布Docker /257
5.4.1 使用Jenkins流水線部署容器 /258
5.4.2 基於Jenkins Job的多步構建 /260
5.5 部署Docker容器監控 /262
5.5.1 容器監控的原理 /262
5.5.2 cAdvisor的部署與應用 /263
5.6 本章小結 /265
★★第6章 Docker的高級應用 /266
6.1 Docker的容器與進程 /266
6.1.1 容器是臨時的 /266
6.1.2 進程的概念 /267
6.1.3 容器與進程 /269
6.2 Docker的文件存儲與備份 /273
6.2.1 數據文件的存儲 /273
6.2.2 卷存儲 /274
6.2.3 綁定掛載 /276
6.2.4 tmpfs掛載 /277
6.2.5 數據文件的備份 /277
6.3 Docker的網絡配置 /278
6.3.1 Flannel網絡 /279
6.3.2 Weave網絡 /280
6.3.3 Open vSwitch /281
6.3.4 Calico網絡 /281
6.4 Docker的鏡像優化 /281
6.4.1 常規優化手段 /282
6.4.2 案例實戰 /287
6.5 Docker的安全策略與加固 /292
6.5.1 Docker的安全策略 /292
6.5.2 鏡像安全 /293
6.5.3 容器網絡的安全性 /294
6.5.4 網絡攻擊與防範 /294
6.6 Docker的集群管理1——Swarm /295
6.6.1 Swarm集群管理1——Docker原生管理 /295
6.6.2 Swarm集群管理2——Swarm集群搭建 /297
6.6.3 Swarm集群管理3——Swarm WordPress部署 /302
6.7 Docker的集群管理2——Kubernetes /303
6.7.1 Kubernetes容器編排1——簡介 /303
6.7.2 Kubernetes容器編排2——架構 /304
6.7.3 Kubernetes容器編排3——安裝 /306
6.7.4 Kubernetes容器編排4——基本使用 /310
6.7.5 Kubernetes應用實踐1——Kafka容器編排 /315
6.7.6 Kubernetes應用實踐2——Redis容器編排 /330
6.7.7 Kubernetes應用實踐3——部署監控系統 /334
6.8 本章小結 /337
★★第7章 手把手打造企業級應用 /338
7.1 企業級雲原生的持續交付模型——GitOps實戰 /338
7.1.1 GitOps的興起 /338
7.1.2 GitOps流水線 /340
7.1.3 GitOps最佳實踐 /341
7.1.4 GitOps與可觀測性 /341
7.1.5 GitOps的優勢 /342
7.2 企業級容器化標準 /343
7.2.1 容器化的目標 /343
7.2.2 架構選型1——服務暴露 /344
7.2.3 架構選型2——網絡選型 /348
7.2.4 架構選型3——存儲系統 /349
7.2.5 服務治理1——部署發布 /356
7.2.6 服務治理2——服務監控 /358
7.2.7 服務治理3——日志采集 /360
7.2.8 服務治理4——鏈路追蹤 /366
7.2.9 可靠性保障1——彈性部署 /368
7.2.10 可靠性保障2——集群 可靠性 /370
7.3 企業級方案1——微服務應用實踐 /372
7.3.1 應用演變過程中的痛點 /372
7.3.2 微服務架構設計 /376
7.3.3 微服務容器化的難點 /381
7.3.4 服務網格1——服務網格與微服務 /384
7.3.5 服務網格2——使用Istio方案 /386
7.3.6 常見問題及解決方案 /395
7.4 企業級方案2——打造多項目並行隔離環境 /401
7.4.1 項目並行開發的痛點 /401
7.4.2 容器化隔離環境方案 /403
7.4.3 用Docker + Jenkins解決工程化問題 /408
7.4.4 實現隔離插件 /414
7.4.5 配置Nginx Cookie識別與代理 /417
7.4.6 使用Kustomize對Kubernetes進行聲明式管理 /418
7.5 本章小結 /421