産品特色
編輯推薦
Docker技術圖書中文版。 Docker核心團隊成員著作。 非常適閤作為學習Docker的第1本入門書。 本書基於Docker 1.9及以上版本。 Docker是一個開源的應用容器引擎,讓開發者可以將他們的應用和依賴包打包到一個可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化。容器完全使用沙箱機製,相互之間不會有任何接口。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。重要的是,它不依賴於任何語言、框架或包裝係統。
內容簡介
Docker是一個開源的應用容器引擎,開發者可以利用Docker打包自己的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化。 本書由Docker公司前服務與支持副總裁James Turnbull編寫,是Docker開發指南。本書專注於Docker 1.9及以上版本,指導讀者完成Docker的安裝、部署、管理和擴展,帶領讀者經曆從測試到生産的整個開發生命周期,讓讀者瞭解Docker適用於什麼場景。書中先介紹Docker及其組件的基礎知識,然後介紹用Docker構建容器和服務來完成各種任務:利用Docker為新項目建立測試環境,演示如何使用持續集成的工作流集成Docker,如何構建應用程序服務和平颱,如何使用Docker的API,如何擴展Docker。
作者簡介
James是一位技術作傢,還是一名開源極客。他的大作是一本講述流行開源日誌工具的書——The LogStash Book。James還寫瞭兩本關於Puppet的書,一本是Pro Puppet,另一本是較早的Pulling Strings with Puppet: Configuration Management Made Easy。此外,James還寫瞭Pro Linux System Administration、Pro Nagios 2.0和Hardening Linux這三本書。 James是Kickstarter公司的CTO。之前,James曾擔任Docker公司服務與支持副總裁、Venmo公司工程副總裁和Puppet Labs的技術運 李兆海 網名Googol Lee。使用Googol這個名字真的是因為“10的100次方”這個意思,和後來的Google公司沒有一點兒關係。多年後端程序員,早期以C、C++為主,後來轉嚮Python,現在以Go為生。曾寫過《Golang初探》發錶於2011年2月號《程序員》。Docker早期使用者。平時喜歡亂翻書,遇到感興趣的都會研究一番。 劉斌 具有10餘年軟件開發經驗,關注後颱開發技術和各種編程語言。做過電子商務、金融、企業係統以及Android手機開發;寫過Delphi,也兼做係統管理員和DBA(現在都改叫DevOps瞭);既做後颱應用,也要調用前颱CSS和JavaScript,可還是不敢自稱“全棧”(Full Stack);今又舶來“增長黑客”(Growth Hacker),我想我要做一個“增長工程師”(Growth Engineer)。 巨震 北京大學軟件工程碩士,服務器端開發者。目前就職於創業公司,使用Node.js、Golang進行服務器端開發。2013年年底開始研究Docker,是Docker中文社區的活躍貢獻者,負責Docker技術文章和視頻的翻譯、校對工作。生活中喜歡美食、騎行,熱衷於PC硬件,喜愛摺騰,熱愛一切計算機相關的技術,堅信技術改變世界。崇拜的技術傳奇人物是前id Software首席程序員、現Oculus VR首席技術官John Carmack。
目錄
第1章 簡介 1
1.1 Docker簡介 2
1.1.1 提供一個簡單、輕量的建模方式 2
1.1.2 職責的邏輯分離 3
1.1.3 快速、高效的開發生命周期 3
1.1.4 鼓勵使用麵嚮服務的架構 3
1.2 Docker組件 3
1.2.1 Docker客戶端和服務器 4
1.2.2 Docker鏡像 5
1.2.3 Registry 5
1.2.4 容器 5
1.3 能用Docker做什麼 6
1.4 Docker與配置管理 7
1.5 Docker的技術組件 8
1.6 本書的內容 9
1.7 Docker資源 10
第2章 安裝Docker 11
2.1 安裝Docker的先決條件 12
2.2 在Ubuntu和Debian中安裝Docker 13
2.2.1 檢查前提條件 14
2.2.2 安裝Docker 16
2.2.3 Docker與UFW 17
2.3 在Red Hat和Red Hat係發行版中安裝Docker 17
2.3.1 檢查前提條件 18
2.3.2 安裝Docker 19
2.3.3 在Red Hat係發行版中啓動Docker守護進程 21
2.4 在OS X中安裝Docker Toolbox 22
2.4.1 在OS X中安裝Docker Toolbox 22
2.4.2 在OS X中啓動Docker Toolbox 23
2.4.3 測試Docker Toolbox 24
2.5 在Windows中安裝Docker Toolbox 24
2.5.1 在Windows中安裝Docker Toolbox 25
2.5.2 在Windows中啓動Docker Toolbox 25
2.5.3 測試Docker Toolbox 26
2.6 使用本書的Docker Toolbox示例 26
2.7 Docker安裝腳本 27
2.8 二進製安裝 28
2.9 Docker守護進程 28
2.9.1 配置Docker守護進程 29
2.9.2 檢查Docker守護進程是否正在運行 30
2.10 升級Docker 31
2.11 Docker用戶界麵 32
2.12 小結 32
第3章 Docker入門 33
3.1 確保Docker已經就緒 33
3.2 運行我們的第一個容器 34
3.3 使用第一個容器 36
3.4 容器命名 38
3.5 重新啓動已經停止的容器 39
3.6 附著到容器上 40
3.7 創建守護式容器 40
3.8 容器內部都在乾些什麼 41
3.9 Docker日誌驅動 42
3.10 查看容器內的進程 43
3.11 Docker統計信息 44
3.12 在容器內部運行進程 44
3.13 停止守護式容器 45
3.14 自動重啓容器 46
3.15 深入容器 47
3.16 刪除容器 48
3.17 小結 49
第4章 使用Docker鏡像和倉庫 50
4.1 什麼是Docker鏡像 50
4.2 列齣鏡像 52
4.3 拉取鏡像 55
4.4 查找鏡像 57
4.5 構建鏡像 58
4.5.1 創建Docker Hub賬號 59
4.5.2 用Docker的commit命令創建鏡像 60
4.5.3 用Dockerfile構建鏡像 62
4.5.4 基於Dockerfile構建新鏡像 65
4.5.5 指令失敗時會怎樣 67
4.5.6 Dockerfile和構建緩存 68
4.5.7 基於構建緩存的Dockerfile模闆 69
4.5.8 查看新鏡像 70
4.5.9 從新鏡像啓動容器 70
4.5.10 Dockerfile指令 74
4.6 將鏡像推送到Docker Hub 88
4.7 刪除鏡像 92
4.8 運行自己的Docker Registry 94
4.8.1 從容器運行Registry 94
4.8.2 測試新Registry 95
4.9 其他可選Registry服務 96
4.10 小結 96
第5章 在測試中使用Docker 97
5.1 使用Docker測試靜態網站 97
5.1.1 Sample網站的初始Dockerfile 98
5.1.2 構建Sample網站和Nginx鏡像 100
5.1.3 從Sample網站和Nginx鏡像構建容器 102
5.1.4 修改網站 104
5.2 使用Docker構建並測試Web應用程序 105
5.2.1 構建Sinatra應用程序 105
5.2.2 創建Sinatra容器 107
5.2.3 擴展Sinatra應用程序來使用Redis 110
5.2.4 將Sinatra應用程序連接到Redis容器 113
5.2.5 Docker內部連網 114
5.2.6 Docker Networking 119
5.2.7 使用容器連接來通信 131
5.2.8 連接容器小結 132
5.3 Docker用於持續集成 132
5.3.1 構建Jenkins和Docker服務器 133
5.3.2 創建新的Jenkins作業 137
5.3.3 運行Jenkins作業 141
5.3.4 與Jenkins作業有關的下一步 143
5.3.5 Jenkins設置小結 143
5.4 多配置的Jenkins 143
5.4.1 創建多配置作業 143
5.4.2 測試多配置作業 147
5.4.3 Jenkins多配置作業小結 149
5.5 其他選擇 149
5.5.1 Drone 149
5.5.2 Shippable 149
5.6 小結 149
第6章 使用Docker構建服務 151
6.1 構建第一個應用 151
6.1.1 Jekyll基礎鏡像 152
6.1.2 構建Jekyll基礎鏡像 153
6.1.3 Apache鏡像 153
6.1.4 構建Jekyll Apache鏡像 154
6.1.5 啓動Jekyll網站 155
6.1.6 更新Jekyll網站 158
6.1.7 備份Jekyll捲 159
6.1.8 擴展Jekyll示例網站 161
6.2 使用Docker構建一個Java應用服務 161
6.2.1 WAR文件的獲取程序 161
6.2.2 獲取WAR文件 162
6.2.3 Tomecat7應用服務器 163
6.2.4 運行WAR文件 165
6.2.5 基於Tomcat應用服務器的構建服務 166
6.3 多容器的應用棧 169
6.3.1 Node.js鏡像 169
6.3.2 Redis基礎鏡像 172
6.3.3 Redis主鏡像 173
6.3.4 Redis副本鏡像 174
6.3.5 創建Redis後端集群 174
6.3.6 創建Node容器 178
6.3.7 捕獲應用日誌 180
6.3.8 Node程序棧的小結 183
6.4 不使用SSH管理Docker容器 183
6.5 小結 185
第7章 Docker編配和服務發現 186
7.1 Docker Compose 187
7.1.1 安裝Docker Compose 187
7.1.2 獲取示例應用 188
7.1.3 docker-compose.yml文件 191
7.1.4 運行Compose 193
7.1.5 使用Compose 195
7.1.6 Compose小結 197
7.2 Consul、服務發現和Docker 197
7.2.1 構建Consul鏡像 199
7.2.2 在本地測試Consul容器 202
7.2.3 使用Docker運行Consul集群 203
7.2.4 啓動具有自啓動功能的Consul節點 206
7.2.5 啓動其餘節點 207
7.2.6 配閤Consul,在Docker裏運行一個分布式服務 212
7.3 Docker Swarm 221
7.3.1 安裝Swarm 222
7.3.2 創建Swarm集群 222
7.3.3 創建容器 225
7.3.4 過濾器 227
7.3.5 策略 229
7.3.6 小結 230
7.4 其他編配工具和組件 230
7.4.1 Fleet和etcd 230
7.4.2 Kubernetes 231
7.4.3 Apache Mesos 231
7.4.4 Helios 231
7.4.5 Centurion 231
7.5 小結 231
第8章 使用Docker API 233
8.1 Docker API 233
8.2 初識Remote API 234
8.3 測試Docker Remote API 236
8.3.1 通過API來管理Docker鏡像 237
8.3.2 通過API管理Docker容器 239
8.4 改進TProv應用 242
8.5 對Docker Remote API進行認證 246
8.5.1 建立證書授權中心 246
8.5.2 創建服務器的證書簽名請求和密鑰 248
8.5.3 配置Docker守護進程 250
8.5.4 創建客戶端證書和密鑰 251
8.5.5 配置Docker客戶端開啓認證功能 253
8.6 小結 254
第9章 獲得幫助和對Docker進行改進 255
9.1 獲得幫助 255
9.1.1 Docker用戶、開發郵件列錶及論壇 255
9.1.2 IRC上的Docker 256
9.1.3 GitHub上的Docker 256
9.2 報告Docker的問題 257
9.3 搭建構建環境 257
9.3.1 安裝Docker 257
9.3.2 安裝源代碼和構建工具 257
9.3.3 檢齣源代碼 258
9.3.4 貢獻文檔 258
9.3.5 構建開發環境 259
9.3.6 運行測試 261
9.3.7 在開發環境中使用Docker 261
9.3.8 發起pull request 262
9.3.9 批準閤並和維護者 263
9.4 小結 264
前言/序言
《容器化浪潮:從零開始掌握Docker與微服務架構》 簡介 在這個快速迭代、技術飛速發展的數字時代,如何構建、部署和管理現代化應用程序成為瞭所有開發者和運維人員麵臨的核心挑戰。傳統的部署方式因其固有的復雜性、環境不一緻性以及資源浪費等問題,已經越來越難以滿足敏捷開發和彈性擴展的需求。與此同時,以微服務為代錶的分布式係統架構正在成為構建大型、復雜應用程序的主流選擇,它帶來瞭更高的靈活性、可維護性和可伸縮性,但也隨之而來瞭更高的管理和協作成本。 《容器化浪潮:從零開始掌握Docker與微服務架構》正是在這樣的背景下應運而生。本書並非一本介紹特定工具(如“第一本Docker書”)的書籍,而是聚焦於容器化技術這一革命性的理念及其在現代軟件開發和運維實踐中的深度應用,特彆是與微服務架構的完美結閤。我們將帶領讀者,從宏觀的容器化願景齣發,逐步深入到Docker這一事實上的行業標準,並以此為基石,探討如何設計、構建、部署和管理基於微服務理念的復雜係統。 本書旨在為所有希望在這個技術浪潮中乘風破浪的開發者、架構師、運維工程師以及技術決策者提供一套係統、全麵且極具實踐指導意義的學習路徑。我們不迴避技術細節,但更注重概念的理解和實際應用。通過本書,您將不僅能夠掌握Docker的核心概念和常用命令,更能理解容器化技術如何賦能微服務架構,解決實際業務中的痛點,實現更高效、更可靠、更靈活的軟件生命周期管理。 目標讀者 初學者: 對容器化技術和微服務概念感到好奇,希望從零開始構建紮實基礎的開發者和運維人員。 有一定經驗的開發者: 已經接觸過Docker或微服務,但希望係統性地深化理解,掌握更高級的用法和最佳實踐。 係統架構師: 正在規劃或重構係統架構,希望瞭解容器化和微服務如何幫助實現更優的係統設計和部署策略。 運維工程師: 緻力於提升部署效率、簡化環境管理、自動化運維流程,並希望掌握現代化部署工具的專業人士。 技術經理和項目負責人: 需要瞭解容器化和微服務技術對項目開發、部署和成本的影響,以便做齣明智的技術選型和資源分配決策。 本書核心內容概覽 第一部分:容器化世界的基石——理解容器的本質與Docker的魅力 在這一部分,我們將首先為讀者構建對“容器化”這一概念的深刻認知。容器化並非憑空齣現,而是對軟件部署和運行模式的一次重大革新。我們將深入探討: 虛擬化與容器化的區彆與聯係: 澄清虛擬化(如VMware、VirtualBox)與容器化(如Docker)的核心差異,理解為何容器化在許多場景下更具優勢。我們將重點分析資源隔離、啓動速度、鏡像大小等關鍵對比點。 容器化帶來的核心價值: 詳細闡述容器化如何解決“在我的機器上可以運行”的世紀難題,如何實現環境的一緻性、應用的快速部署、資源的有效利用以及開發與生産環境的無縫對接。 Docker的誕生與演進: 迴顧Docker項目的起源,瞭解其核心組件(如Docker Engine、Docker Daemon、Docker Client)的設計理念,以及它如何迅速成為容器化領域的領導者。 Docker核心概念詳解: 鏡像 (Image): 深入理解鏡像的構成(分層文件係統、Dockerfile)、構建方式(Dockerfile指令解析、構建過程)、倉庫(Docker Hub、私有倉庫)和生命周期。我們將通過實際的Dockerfile示例,展示如何構建滿足不同需求的精簡、高效鏡像。 容器 (Container): 詳細講解容器是如何由鏡像實例化而來,其生命周期(創建、啓動、停止、刪除),以及容器之間的隔離機製(命名空間、控製組)。 Docker文件係統 (OverlayFS/AUFS): 探索Docker底層的文件係統技術,理解容器層和鏡像層的工作原理,以及它如何實現高效的存儲和共享。 網絡 (Networking): 掌握Docker的網絡模型,包括橋接模式、主機模式、None模式等,學習如何配置容器網絡,實現容器間的通信以及與外部世界的互聯。 存儲 (Storage): 理解Docker的數據持久化方案,包括捲 (Volumes) 和綁定掛載 (Bind Mounts),以及如何管理和遷移容器數據。 Docker核心命令實踐: 通過大量實操案例,熟練掌握Docker CLI的常用命令,包括`docker build`, `docker run`, `docker ps`, `docker images`, `docker exec`, `docker logs`, `docker commit`, `docker push`, `docker pull`等,並講解其參數和最佳實踐。 Dockerfile的最佳實踐: 學習如何編寫健壯、高效、安全的Dockerfile,包括多階段構建 (Multi-stage builds)、最小化鏡像體積、利用緩存、善用`COPY`和`ADD`命令、設置健康檢查 (Healthcheck) 等。 第二部分:擁抱微服務——容器化架構下的設計、構建與部署 在掌握瞭Docker的基礎知識後,我們將進入更廣闊的應用領域——微服務架構。這一部分將聚焦於如何利用容器化技術,高效地構建和管理由多個獨立服務組成的復雜係統。 微服務架構的核心理念: 深入理解微服務的設計原則,如單一職責、獨立部署、技術異構性、去中心化治理等,以及它與傳統單體架構的對比優勢。 微服務與容器化的天然契閤: 闡釋為何容器化是實現微服務架構的理想技術。容器如何提供獨立的運行環境、簡化服務的打包與部署、隔離不同服務的依賴,並為彈性伸縮奠定基礎。 設計微服務: 服務拆分策略: 探討如何根據業務領域、數據關聯性、技術棧等因素,閤理地將大型應用拆分成獨立的微服務。 服務間通信: 學習不同通信模式(如同步RESTful API、異步消息隊列Kafka/RabbitMQ)的設計與實現,以及在容器化環境中如何配置服務發現 (Service Discovery)。 數據一緻性: 討論在分布式係統中處理數據一緻性的挑戰,如最終一緻性、Saga模式等。 構建與打包微服務: 為每個微服務創建獨立的Docker鏡像: 學習如何為不同的編程語言和框架(如Java Spring Boot, Python Flask/Django, Node.js Express)編寫精簡高效的Dockerfile,確保每個服務都能獨立構建。 統一的構建流程: 建立標準化的CI/CD流水綫,實現微服務鏡像的自動化構建、測試和推送。 容器編排——應對復雜性的關鍵: Docker Compose: 學習使用Docker Compose來定義和運行多容器Docker應用程序。我們將演示如何配置YAML文件,以聲明式的方式管理多個服務的網絡、存儲和依賴關係,實現本地開發環境的快速搭建。 Kubernetes (K8s) 簡介與核心概念: 深入介紹Kubernetes作為容器編排領域的領導者。我們將解析其核心概念,如Pod、Deployment、Service、Namespace、ReplicaSet、StatefulSet、Ingress等,並解釋它們在管理大規模容器化應用中的作用。 Kubernetes的部署與使用: 學習如何使用kubectl命令行工具與Kubernetes集群交互,如何部署微服務應用,如何配置服務的伸縮、滾動更新和迴滾。 服務發現與負載均衡: 在Kubernetes中,Service如何實現服務之間的通信和負載均衡。 配置管理與持久化存儲: 學習ConfigMap和Secret如何管理應用配置,以及PersistentVolume和PersistentVolumeClaim如何為有狀態應用提供持久化存儲。 構建高可用與彈性伸縮的微服務係統: Kubernetes的自動伸縮: 配置Horizontal Pod Autoscaler (HPA) 實現基於CPU或內存使用率的自動擴縮容。 故障轉移與自我修復: 理解Kubernetes如何通過ReplicaSet和Deployment確保應用的高可用性,並在節點或Pod發生故障時進行自動恢復。 滾動更新與藍綠部署/金絲雀發布: 學習如何在不中斷服務的情況下更新微服務,以及如何通過Kubernetes實現零停機更新策略。 第三部分:生産級的容器化實踐與高級主題 在掌握瞭基礎知識和微服務應用後,我們將進一步探討如何在生産環境中安全、高效地運行容器化應用程序,並介紹一些高級主題。 容器安全: 鏡像安全掃描: 學習使用工具(如Clair, Trivy)掃描鏡像中的漏洞。 運行時安全: 探討容器的安全配置,如限製容器權限、使用安全策略(如AppArmor, SELinux)、最小化容器運行時用戶等。 Secret管理: 如何安全地管理敏感信息(如密碼、API密鑰)。 日誌管理與監控: 容器日誌收集: 學習如何配置Docker日誌驅動,以及如何使用ELK Stack (Elasticsearch, Logstash, Kibana) 或Prometheus/Grafana等工具集中收集、查詢和分析容器日誌。 容器性能監控: 介紹Prometheus等監控係統如何收集容器的資源使用情況,以及如何設置告警。 CI/CD流水綫整閤: Jenkins、GitLab CI/GitHub Actions等工具與Docker/Kubernetes的集成: 學習如何構建自動化構建、測試、部署的CI/CD流水綫,實現微服務從代碼提交到生産環境的快速、可靠交付。 服務網格 (Service Mesh) 簡介: Istio/Linkerd等服務網格的概念與作用: 瞭解服務網格如何解決微服務架構中的服務發現、流量管理、安全通信、可觀察性等復雜問題,並探索其與Docker/Kubernetes的結閤應用。 Serverless與容器化: Knative等Serverless框架: 探索容器化技術如何支持Serverless計算模型,實現按需啓動、自動縮容等特性。 未來的趨勢與展望: WebAssembly (Wasm) 與容器化: 簡要介紹Wasm在雲原生領域的應用潛力。 可持續的雲原生實踐。 結語 《容器化浪潮:從零開始掌握Docker與微服務架構》的目標是成為您在這個快速變化的IT世界中,探索和掌握容器化技術及其在現代軟件架構中核心地位的可靠嚮導。我們相信,通過本書係統性的講解和大量的實踐指導,您將能夠自信地駕馭Docker,深刻理解並成功實踐微服務架構,從而構建齣更具競爭力、更具韌性的現代化應用程序。加入我們,一同迎接容器化浪潮的到來,賦能您的技術未來!