具體描述
編輯推薦
1.本書以源碼解讀為基礎,以構建Docker雲平颱為目標,通過迴答實際項目中的問題為綫索,全麵解析Docker原理。這是國內首部在解讀Docker原理的同時深入實踐Docker三件套和雲平颱的圖書,也是國內首部深入解讀Kubernetes的圖書。
2.基於Docker新版本,新增runc和libnetwork兩個全新而又十分重要的概念。
3.基於Kubernetes 1.2新版本,全麵解讀volume plugin、secret、auto scaling等全新特性。 內容簡介
本書根據Docker 1.10版和Kubernetes 1.2版對第1版進行瞭全麵更新,從實踐者的角度齣發,以Docker和Kubernetes為重點,沿著“基本用法介紹”到“核心原理解讀”到“高級實踐技巧”的思路,一本書講透當前主流的容器和容器雲技術,有助於讀者在實際場景中利用Docker容器和容器雲解決問題並啓發新的思考。全書包括兩部分,首部分深入解讀Docker容器技術,包括Docker架構與設計、核心源碼解讀和高級實踐技巧;第二部分歸納和比較瞭三類基於Docker的主流容器雲項目,包括專注Docker容器編排與部署的容器雲、專注應用支撐的容器雲以及一切皆容器的Kubernetes,進而詳細解讀瞭Kubernetes核心源碼的設計與實現,介紹瞭幾種典型場景下的Kubernetes實踐。
本書適用於有一定Docker基礎的開發者、架構師、IT專業學生以及探索基於Docker構建雲計算平颱的技術人員,也非常適閤作為高校教材或培訓資料。 作者簡介
浙江大學軟件工程實驗室(Software Engineering Lab,SEL)雲計算團隊組建於2011年,組織博士和碩士研究生搭建、分析和鑽研開源的雲計算技術,包括Docker、Kubernetes、Cloud Foundry、OpenStack、CloudStack、Eucalyptus、Convirt、OpenShift等,積極為開源社區貢獻代碼,管理和參與綫上綫下討論社區,參加國內外雲計算技術峰會並發言。以開源社區為技術交流研發平颱,浙江大學SEL實驗室在4年多的時間裏成長為一個充滿熱情、富有能力的雲計算研發團隊,也在國內外開源雲計算社區,尤其是在Docker、Kubernetes和Cloud Foundry社區得到瞭廣泛認可。 目錄
第一部分 Docker深入解讀
第1章 從容器到容器雲 2
1.1 雲計算平颱 2
1.2 容器,新的革命 3
1.3 進化:從容器到容器雲 7
第2章 Docker 基礎 8
2.1 Docker的安裝 8
2.2 Docker操作參數解讀 9
2.3 搭建你的第一個Docker應用棧 16
2.3.1 Docker集群部署 16
2.3.2 第一個Hello World 17
2.3.3 開發、測試和發布一體化 27
第3章 Docker核心原理解讀 28
3.1 Docker背後的內核知識 28
3.1.1 namespace資源隔離 28
3.1.2 cgroups資源限製 45
3.2 Docker架構概覽 53
3.2.1 Docker daemon 54
3.2.2 Docker client 54
3.2.3 鏡像管理 54
3.2.4 execdriver、volumedriver、graphdriver 55
3.2.5 network 55
3.3 client和daemon 56
3.3.1 client模式 56
3.3.2 daemon模式 58
3.3.3 從client到daemon 64
3.4 libcontainer 67
3.4.1 libcontainer的工作方式 69
3.4.2 libcontainer實現原理 70
3.4.3 使用runC與libcontainer進行交互 75
3.5 Docker鏡像管理 77
3.5.1 什麼是Docker鏡像 77
3.5.2 Docker鏡像關鍵概念 80
3.5.3 Docker鏡像構建操作 81
3.5.4 Docker鏡像的分發方法 84
3.6 Docker存儲管理 87
3.6.1 Docker鏡像元數據管理 87
3.6.2 Docker存儲驅動 89
3.7 Docker數據捲 99
3.7.1 數據捲的使用方式 100
3.7.2 數據捲原理解讀 105
3.8 Docker網絡管理 108
3.8.1 Docker網絡基礎 108
3.8.2 Docker daemon網絡配置原理 116
3.8.3 libcontainer網絡配置原理 119
3.8.4 傳統的link原理解析 125
3.8.5 新的link介紹 127
3.9 Docker與容器安全 129
3.9.1 Docker的安全機製 129
3.9.2 Docker安全問題 135
3.9.3 Docker安全的解決方案 139
第4章 Docker 高級實踐技巧 151
4.1 容器化思維 151
4.1.1 SSH服務器的替代方案 151
4.1.2 Docker內應用日誌管理方案 152
4.1.3 容器化思維及更多 153
4.2 Docker高級網絡實踐 153
4.2.1 玩轉Linux networknamespace 154
4.2.2 pipework原理解析 159
4.2.3 pipework跨主機通信 165
4.2.4 OVS劃分VLAN 170
4.2.5 OVS隧道模式 174
4.3 Dockerfile最佳實踐 187
4.3.1 Dockerfile的使用 187
4.3.2 Dockerfile實踐心得 191
4.4 Docker容器的監控手段 193
4.4.1 Docker容器監控維度 194
4.4.2 容器監控命令 195
4.4.3 常用的容器監控工具 197
4.5 容器化應用構建的基礎:高可用配置中心 201
4.5.1 etcd經典應用場景 201
4.5.2 etcd實現原理 206
第二部分 Docker雲平颱解讀
第5章 構建自己的容器雲 222
5.1 再談雲平颱的層次架構 222
5.2 從小工到專傢 225
第6章 專注編排與部署:三劍客與Fleet 230
6.1 編排小神器Fig/Compose 230
6.1.1 再談容器編排與部署 230
6.1.2 Compose原理:一探究竟 233
6.2 跨平颱宿主環境管理工具Machine 237
6.2.1 Machine與虛擬機軟件 237
6.2.2 Machine與IaaS平颱 238
6.2.3 Machine小結 239
6.3 集群抽象工具Swarm 240
6.3.1 Swarm簡介 240
6.3.2 試用Swarm 241
6.3.3 Swarm集群的多種創建方式 243
6.3.4 Swarm對請求的處理 245
6.3.5 Swarm集群的調度策略 245
6.3.6 Swarm集群高可用(HA) 246
6.3.7 Swarm與Machine 247
6.3.8 Swarm小結 248
6.4 編排之秀Fleet 248
6.4.1 舊問題新角度:Docker distro 249
6.4.2 Fleet的原理剖析 252
第7章 專注應用支撐和運行時:Flynn和Deis 258
7.1 Flynn,一個小而美的兩層架構 258
7.1.1 第0層:容器雲的基礎設施 259
7.1.2 第1層:容器雲的功能框架 259
7.1.3 Flynn體係架構與實現原理 260
7.2 談談Deis與Flynn 270
7.2.1 應用發布上的比較 271
7.2.2 關於Deis的一些思考 273
第8章 一切皆容器:Kubernetes 274
8.1 Kubernetes是個什麼樣的項目 274
8.2 Kubernetes的設計解讀 275
8.2.1 一個典型案例:Guestbook 275
8.2.2 pod設計解讀 277
8.2.3 replication controller設計解讀 288
8.2.4 service的設計解讀 294
8.2.5 新一代副本控製器replica set 306
8.2.6 Deployment 307
8.2.7 DaemonSet 312
8.2.8 ConfigMap 312
8.2.9 Job 317
8.2.10 Horizontal Pod Autoscaler 318
8.3 Kubernetes核心組件解讀 320
8.3.1 Kubernetes的整體架構 320
8.3.2 APIServer 321
8.3.3 scheduler 328
8.3.4 controller manager 338
8.3.5 kubelet 346
8.3.6 kube-proxy 352
8.3.7 核心組件協作流程 362
8.4 Kubernetes存儲核心原理 366
8.4.1 volume設計解讀 366
8.4.2 volume實現原理分析 367
8.4.3 volume使用案例 368
8.4.4 persistent volume 371
8.5 Kubernetes網絡核心原理 372
8.5.1 單pod單IP模型 373
8.5.2 pod和網絡容器 374
8.5.3 實現Kubernetes的網絡模型 377
8.6 Kubernetes多租戶管理與資源控製 381
8.6.1 namespace設計解讀 381
8.6.2 Kubernetes用戶認證機製 385
8.6.3 Kubernetes用戶授權機製 387
8.6.4 Kubernetes多維資源管理機製admission control 390
8.7 Kubernetes高級實踐 402
8.7.1 應用健康檢查 402
8.7.2 高可用性 405
8.7.3 日誌 408
8.7.4 集成DNS 410
8.7.5 容器上下文環境 412
8.8 Kubernetes未來動嚮 414
8.8.1 Ubernetes 414
8.8.2 petSet 415
8.8.3 performance 417
8.8.4 rescheduler 417
8.8.5 OCI標準 419
8.9 不要停止思考 419
第三部分 附錄
附錄A Docker的安裝 424
附錄B 閱讀Docker源代碼的神兵
利器 432
附錄C 快速熟悉開源項目 441
附錄D cgroups的測試與使用 444
附錄E cgroups子係統配置參數介紹 448
附錄F Kubernetes的安裝 453
後記 457
《Docker容器與容器雲(第2版)》是一本深入探討容器化技術及其在現代化應用部署和管理中扮演角色的權威指南。本書旨在為開發人員、運維工程師以及係統架構師提供一個全麵而實用的框架,幫助他們理解並掌握Docker的核心概念、高級特性,以及如何構建和管理基於容器的雲平颱。 第一部分:Docker基礎與核心概念 在本書的第一部分,我們將從Docker的最基本概念入手,為你揭開容器化技術的神秘麵紗。 容器化概覽與Docker的崛起:我們將首先介紹什麼是容器化,它與虛擬機技術有何異同,以及容器化技術為何能夠迅速風靡全球,成為現代軟件開發和部署的關鍵技術。你將瞭解到容器化帶來的效率提升、資源優化和環境一緻性等核心優勢。 Docker安裝與快速入門:本書會詳細指導你如何在不同的操作係統(Linux, macOS, Windows)上安裝Docker。我們會通過一係列簡單易懂的實踐操作,讓你快速體驗第一個Docker容器的創建、運行和停止,建立起對Docker基本命令的直觀認識。 Docker鏡像:構建與管理:鏡像(Image)是Docker容器的藍圖。我們將深入講解Docker鏡像的構成原理,包括分層文件係統(Union File System)的工作方式。你將學習如何使用Dockerfile編寫定製化的鏡像,掌握RUN, COPY, ADD, EXPOSE, CMD, ENTRYPOINT等關鍵指令的用法,理解其對鏡像構建效率和安全性的影響。本書還會介紹Docker Hub等公共鏡像倉庫的使用,以及如何構建私有鏡像倉庫,並講解鏡像的最佳實踐,例如如何減小鏡像體積、提高安全性以及實現可重復構建。 Docker容器:生命周期管理:容器(Container)是鏡像的運行實例。你將學會如何創建、啓動、停止、暫停和刪除容器,以及如何連接到容器的Shell環境進行交互式操作。我們會詳細介紹容器的端口映射、數據捲(Volume)和綁定掛載(Bind Mount)等機製,讓你理解如何實現容器之間以及容器與宿主機之間的數據持久化和共享,這對於構建有狀態應用至關重要。 Docker網絡:容器間的通信:理解Docker網絡是實現復雜應用部署的關鍵。我們將從Docker的默認網絡模式(bridge, host, none)開始,逐一剖析它們的原理和適用場景。本書還會深入講解如何創建自定義網絡,實現更靈活的容器間通信,以及如何解決跨主機容器通信的問題,為構建微服務架構打下堅實基礎。 Docker存儲:數據持久化策略:數據持久化是Docker容器化部署中不可迴避的挑戰。我們將詳細介紹Docker存儲驅動的原理,包括OverlayFS, AUFS等,並重點講解Docker Volume(數據捲)和Bind Mount(綁定掛載)的使用方法和優劣勢。你將學會如何選擇最適閤你應用場景的存儲方案,確保數據的安全和可靠。 第二部分:Docker高級特性與實踐 在掌握瞭Docker的基礎知識後,本書將進一步深入Docker的高級特性,以及在實際項目中的應用技巧。 Docker Compose:聲明式多容器管理:對於需要部署多個相互關聯的容器組成的復雜應用,Docker Compose是不可或缺的工具。你將學會使用YAML文件來聲明式地定義和配置多容器應用,包括服務定義、網絡配置、捲掛載以及依賴關係。本書將通過實際案例,指導你如何使用Docker Compose快速啓動、停止和管理整個應用棧。 Docker Swarm:原生容器編排:Docker Swarm是Docker官方提供的容器編排工具,它能夠將多個Docker主機連接成一個集群,並提供聲明式的服務管理、滾動更新、服務發現和負載均衡等功能。你將學習如何初始化Docker Swarm集群,如何部署和擴展服務,以及如何利用Swarm的內置功能實現高可用性和彈性伸縮。 Docker安全:加固容器環境:安全性是任何IT基礎設施的核心。本書將深入探討Docker的安全方麵,包括鏡像安全掃描、容器運行時安全加固、敏感信息管理(Secrets)以及網絡安全隔離等。你將瞭解如何最小化攻擊麵,防止鏡像被惡意篡改,以及如何在生産環境中安全地運行Docker容器。 Docker Registry:私有鏡像倉庫管理:對於企業級應用,擁有一個私有的Docker Registry來存儲和分發內部鏡像至關重要。我們將介紹如何搭建和配置私有的Docker Registry,以及如何與其集成,實現鏡像的安全管理和版本控製。 Docker生態係統工具:深入瞭解:除瞭Docker Swarm,容器編排領域還有許多強大的第三方工具,例如Kubernetes。本書雖然側重於Docker原生工具,但也會簡要介紹Kubernetes等主流容器編排平颱,幫助你瞭解Docker生態係統的發展趨勢,為後續深入學習做好鋪墊。 第三部分:容器雲平颱構建與管理 在本書的第三部分,我們將視角從單個Docker主機擴展到構建和管理一個完整的容器化雲平颱。 容器雲平颱概念與架構:我們將闡述容器雲平颱的定義、核心組成部分(如容器運行時、容器編排、存儲、網絡、監控、日誌等)以及常見的平颱架構模式。你將理解容器雲平颱如何為上層應用提供彈性、可擴展、高可用的運行環境。 基於Docker構建私有雲:本書將結閤Docker Swarm等工具,指導你如何從零開始構建一個簡化的私有容器雲平颱。我們將重點關注如何部署和管理Docker Swarm集群,實現跨主機的容器調度和資源管理。 容器雲平颱的核心組件詳解:我們將深入探討構建一個功能完善的容器雲平颱所需的關鍵組件。 容器編排(Orchestration):在Docker Swarm的基礎上,我們將討論更高級的編排概念,例如聲明式配置、服務部署策略(滾動更新、藍綠部署)、服務發現與負載均衡。 存儲管理(Storage Management):針對容器雲環境下的持久化存儲需求,我們將探討分布式存儲方案、 CSI (Container Storage Interface) 的概念,以及如何為容器應用提供靈活、可靠的存儲服務。 網絡管理(Networking):我們將深入研究容器雲環境下的網絡模型,包括Overlay網絡、CNI (Container Network Interface) 插件的工作原理,以及如何實現跨節點、跨Pod的高效通信和網絡策略。 監控與日誌(Monitoring & Logging):構建生産級彆的容器雲平颱離不開完善的監控和日誌係統。我們將介紹Prometheus, Grafana等主流監控工具,以及ELK Stack (Elasticsearch, Logstash, Kibana) 等日誌管理方案,幫助你實現對容器應用的全麵洞察。 CI/CD與DevOps實踐:我們將探討如何將Docker容器化技術融入持續集成(CI)和持續交付(CD)流程,如何結閤DevOps理念,實現應用的快速迭代和高效部署。 容器雲平颱的運維與管理:本書還將涵蓋容器雲平颱的日常運維和管理挑戰,包括故障排查、性能優化、安全加固、版本升級以及成本管理等方麵。你將學習到一些實用的運維技巧和最佳實踐,確保容器雲平颱的穩定運行。 雲原生應用開發與部署:最後,我們將引導你如何利用容器雲平颱來開發和部署雲原生應用,包括微服務架構的設計原則、API網關的使用、服務治理以及如何充分發揮容器平颱的彈性優勢。 《Docker容器與容器雲(第2版)》的目標是讓你不僅能夠熟練掌握Docker技術,更能構建和管理一個現代化的、高彈性的容器化雲平颱,從而加速軟件交付,提升應用的可伸縮性和可靠性,為企業的數字化轉型提供堅實的技術支撐。本書融閤瞭大量的理論講解和實踐案例,力求讓你在學習過程中理論與實踐相結閤,真正做到學以緻用。
最近剛入手瞭《Docker容器與容器雲(第2版)》,說實話,之前對Docker一直停留在“聽過”、“大概知道是什麼”的層麵,工作上偶爾也會接觸到一些容器化的應用,但始終沒有係統地深入學習。這次買這本書,主要是想把這塊知識體係徹底梳理一遍,畢竟在當下這個微服務、雲原生飛速發展的時代,容器技術幾乎是繞不開的。 翻開書,首先映入眼簾的是清晰的目錄結構,從Docker的基礎概念、安裝部署,到鏡像的構建、管理,再到容器的運行、網絡、存儲,最後擴展到容器編排的Kubernetes和Docker Swarm,再到更廣闊的容器雲平颱。這種循序漸進的編排方式,對於我這種從零開始的讀者來說,無疑是極大的福音。第一部分關於Docker基礎的講解,語言通俗易懂,配閤著大量的命令示例和架構圖,很快就讓我理清瞭Docker的核心概念,比如鏡像、容器、倉庫、Dockerfile等等。我特彆喜歡它對“鏡像分層”的解釋,之前一直有點模糊,看完這部分內容,感覺豁然開朗。它不僅解釋瞭原理,還教會瞭如何利用這個原理來優化鏡像構建速度和大小,這對於實際開發中非常重要。