*威作者:具有十多年虛擬化研究經驗,國內首批研究Docker容器技術的專傢,Docker開源項目貢獻者
快速入門:透過簡單的理論講解,帶你進入Docker的世界
步驟詳細:手把手教你配置方法,為你量身定製自己的Docker
內容豐富:揭露鏡像製作過程,教你搭建鏡像倉庫
自從2013年3月Docker 0.1版本發布以來,以其為代錶的容器技術發展也走上瞭快車道,Docker容器在很大程度上改變瞭軟件的架構設計、開發和運維部署方式,也給早些年就提齣的微服務架構模式插上瞭快速起飛的翅膀。本書由Docker社區**人Jeff Nickoloff編寫,共分為三部分,**部分(1~6章)重點介紹Docker容器的資源隔離和權限控製及基礎理論,第二部分(7~10章)詳細解釋瞭如何打包製作鏡像以及各種鏡像分發基礎設施的建設,*後一部分(11~12章)聚焦於Docker容器的組閤操作也就是多容器和多主機環境的管理。本書圖文並茂,結閤基本原理和具體案例給大傢提供瞭多個不錯的實戰機會。 作為目前*炙手可熱的容器技術類圖書,本書適用於互聯網、雲計算及企業級軟件開發、架構、測試及運維人員快速上手熟悉Docker容器,搭建以Docker為核心的基礎設施,並在生産環境中快速部署應用以及管理容器集群。
鬍震,上海凡用信息科技有限公司CTO,長夜公司首席架構師,DockOne社區優秀翻譯。
楊潤青,90後博士僧,研究方嚮是網絡和信息安全。
黃帥(Henry Huang),目前就職於趨勢科技,負責集群運維開發和維護工作,所在項目從2011年使用AWS服務至今,積纍一定的AWS運維經驗。
Jeff Nickoloff會建立大規模的服務站,寫關於技術的文字,並幫助人們實現他們的産品目標。他曾在****.com、Limelight網絡和亞利桑那州立大學做這些事情。2014年離開***,他創辦瞭一傢谘詢公司,專注於為財富100強的企業和創業公司提供工具、培訓和*佳實踐。
目 錄
第1部分 保持一颱乾淨的機器
第1章 歡迎來到Docker世界 2
1.1 什麼是Docker 3
1.1.1 容器 3
1.1.2 容器不是虛擬化 4
1.1.3 在隔離的容器中運行軟件 4
1.1.4 分發容器 6
1.2 Docker解決瞭什麼問題 6
1.2.1 有條理 7
1.2.2 提高可移植性 8
1.2.3 保護你的機器 9
1.3 為什麼Docker如此重要 10
1.4 何時何處使用Docker 11
1.5 案例:“hello world” 11
1.6 小結 13
第2章 在容器中運行軟件 14
2.1 從Docker命令行工具獲得幫助 14
2.2 控製容器:建立一個網站的監控器 15
2.2.1 創建和啓動一個新的容器 16
2.2.2 運行交互式容器 17
2.2.3 列舉、停止、重新啓動和查看容器輸齣 18
2.3 已解決的問題和PID命名空間 20
2.4 消除元數據衝突:構建一個網站農場 23
2.4.1 靈活的容器甄彆 24
2.4.2 容器的狀態和依賴 26
2.5 構建與環境無關的係統 28
2.5.1 隻讀文件係統 29
2.5.2 環境變量的注入 31
2.6 建立持久的容器 34
2.6.1 自動重啓容器 35
2.6.2 保持容器運行init和supervisor進程 36
2.7 清理 38
2.8 小結 39
第3章 軟件安裝的簡化 40
3.1 甄彆軟件 41
3.1.1 什麼是倉庫 41
3.1.2 使用標簽 42
3.2 查找和安裝軟件 43
3.2.1 命令行使用Docker Hub 43
3.2.2 通過網站訪問Docker Hub 45
3.2.3 使用替代注冊服務器 47
3.2.4 鏡像文件 47
3.2.5 從Dockerfile安裝 49
3.3 安裝文件和隔離 49
3.3.1 鏡像層實戰 50
3.3.2 分層關係 51
3.3.3 容器文件係統抽象和隔離 52
3.3.4 工具集和文件係統結構的好處 53
3.3.5 聯閤文件係統的不足 53
3.4 小結 54
第4章 持久化存儲和捲間狀態共享 55
4.1 存儲捲的簡介 56
4.1.1 存儲捲提供容器無關的數據管理 56
4.1.2 NoSQL數據庫使用存儲捲 57
4.2 存儲捲的類型 60
4.2.1 綁定掛載捲 60
4.2.2 Docker托管捲 63
4.3 共享存儲捲 65
4.3.1 主機依賴的共享 65
4.3.2 通用共享和volumes-from標誌 66
4.4 托管捲的生命周期 68
4.4.1 托管捲的權限 68
4.4.2 存儲捲的清理 69
4.5 存儲捲的高級容器模式 70
4.5.1 存儲捲容器模式 70
4.5.2 數據經壓縮的存儲捲容器 72
4.5.3 多態容器模式 73
4.6 小結 74
第5章 網絡訪問 75
5.1 網絡相關的背景知識 76
5.1.1 基礎:協議,接口和端口 76
5.1.2 高級:網絡,NAT和端口轉發 77
5.2 Docker的網絡 79
5.2.1 本地Docker網絡的拓撲結構 79
5.2.2 四種網絡結構原型 80
5.3 Closed容器 81
5.4 Bridged容器 83
5.4.1 訪問外部網絡 84
5.4.2 自定義命名解析 85
5.4.3 開放對容器的訪問 88
5.4.4 跨容器通信 91
5.4.5 修改網橋接口的配置 92
5.5 Joined容器 93
5.6 Open容器 95
5.7 跨容器依賴 96
5.7.1 鏈接――本地服務發現 97
5.7.2 鏈接彆名 98
5.7.3 環境變量的改動 99
5.7.4 鏈接的本質和缺點 101
5.8 小結 102
第6章 隔離――限製危險 103
6.1 資源分配 104
6.1.1 內存限製 104
6.1.2 CPU 105
6.1.3 設備的訪問權 108
6.2 共享內存 108
6.2.1 跨容器的進程間通信 109
6.2.2 開放內存容器 110
6.3 理解用戶 111
6.3.1 Linux用戶命令空間 111
6.3.2 run-as用戶 111
6.3.3 用戶和捲 114
6.4 能力――操作係統功能的授權 116
6.5 運行特權容器 117
6.6 使用加強工具創建更健壯的容器 118
6.6.1 指定額外的安全選項 119
6.6.2 微調LXC 120
6.7 因地製宜地構建容器 121
6.7.1 應用 121
6.7.2 高層的係統服務 122
6.7.3 低層的係統服務 122
6.8 小結 122
第2部分 鏡像發布:如何打包軟件
第7章 在鏡像中打包軟件 126
7.1 從容器構建鏡像 126
7.1.1 打包Hello World 127
7.1.2 打包Git 128
7.1.3 審查文件係統的改動 128
7.1.4 Commit――創建新鏡像 129
7.1.5 可配置的鏡像屬性 130
7.2 深入Docker鏡像和層 131
7.2.1 深入聯閤文件係統 132
7.2.2 重新認識鏡像、層、倉庫和標簽 134
7.2.3 鏡像體積和層數限製 137
7.3 導齣和導入扁平文件係統 139
7.4 版本控製的最佳實踐 141
7.5 小結 143
第8章 構建自動化和高級鏡像設置 144
8.1 使用Dockerfile打包Git 144
8.2 Dockerfile入門 148
8.2.1 元數據指令 148
8.2.2 文件係統指令 152
8.3 注入下遊鏡像在構建時發生的操作 155
8.4 使用啓動腳本和多進程容器 158
8.4.1 驗證環境相關的先決條件 158
8.4.2 初始化進程 160
8.5 加固應用鏡像 161
8.5.1 內容可尋址鏡像標識符 161
8.5.2 用戶權限 162
8.5.3 SUID和SGID權限 164
8.6 小結 166
第9章 公有和私有軟件分發 168
9.1 選擇一個分發方法 169
9.1.1 分發選項圖譜 169
9.1.2 選擇標準 169
9.2 通過托管Registry發布 172
9.2.1 通過公有倉庫發布:你好!Docker Hub 172
9.2.2 使用自動構建發布公有項目 174
9.2.3 私有托管倉庫 176
9.3 私有Registry介紹 178
9.3.1 使用Registry鏡像 180
9.3.2 從Registry使用鏡像 181
9.4 鏡像的手動發布和分發 181
9.5 鏡像源代碼分發工作流程 186
9.6 小結 189
第10章 運行自定義Registry 190
10.1 運行個人Registry 191
10.1.1 再度介紹鏡像 192
10.1.2 介紹V2 API 193
10.1.3 定製鏡像 195
10.2 集中式Registry的增強 196
10.2.1 創建一個反嚮代理 197
10.2.2 在反嚮代理上配置HTTP(TLS) 199
10.2.3 添加身份認證層 202
10.2.4 客戶端兼容性 206
10.2.5 應用於生産環境之前 208
10.3 持久化的BLOB存儲 210
10.3.1 微軟Azure托管遠程存儲 211
10.3.2 AWS S3托管遠程存儲 212
10.3.3 RADOS(Ceph)的內部遠程存儲 214
10.4 擴展訪問和延遲的改進 215
10.4.1 與元數據緩存集成 215
10.4.2 使用存儲中間件簡化BLOB傳輸 217
10.5 通過通知集成 219
10.6 小結 224
第3部分 多容器和多主機環境
第11章 Docker Compose聲明式環境 228
11.1 Docker Compose:第一天的啓動並運行 228
11.1.1 用一個簡單的開發環境入門 229
11.1.2 一個復雜的架構:分布式係統和Elasticsearch的集成 231
11.2 環境內的迭代 233
11.2.1 構建、啓動和重新構建服務 234
11.2.2 服務伸縮和刪除 237
11.2.3 迭代和持久化狀態 238
11.2.4 網絡和連接問題 239
11.3 開始一個新項目:三個示例中的Compose YAML 240
11.3.1 啓動前的構建、環境、元數據和網絡 240
11.3.2 已知的組件和綁定掛載捲 241
11.3.3 捲容器和擴展服務 242
11.4 小結 243
第12章 Docker Machine和Swarm集群 245
12.1 介紹Docker Machine 246
12.1.1 構建和管理Docker Machine 246
12.1.2 配置Docker客戶端與遠程Daemon工作 249
12.2 Docker Swarm介紹 252
12.2.1 藉助於Docker Machine構建Swarm集群 252
12.2.2 Swarm擴展瞭Docker遠程API 255
12.3 Swarm調度 258
12.3.1 Spread算法 258
12.3.2 用過濾器調整調度 260
12.3.3 BinPack和隨機調度算法 263
12.4 Swarm服務發現 265
12.4.1 Swarm和單主機網絡 266
12.4.2 服務發現生態係統和權宜之計 268
12.4.3 展望多主機網絡 269
12.5 小結 270
後記 271
譯 序
2016 年4 月中旬DockOne.io 社區的發起人李穎傑找到瞭楊潤青、黃帥和我三位社區譯者,說要配閤電子工業齣版社翻譯Docker 大神Jeff Nickoloff 的新書——《Docker 實戰》,我們仨欣然答應。這一方麵是齣於對大神的景仰,另一方麵也是我們DockOne.io 社區以及我們每一位會員想為國內Docker 容器技術的發展添磚加瓦。緊張的翻譯工作從今年4 月底開始,到6 月底交稿,之後我們又配閤齣版社完成瞭本書的審讀工作,今天我們終於看到本書中文版《Docker 實戰》的齣版。此時此刻的心情我們也是非常激動,感謝我們DockOne.io社區以及齣版社的小夥伴,大傢都是好樣的。
本書的內容,顧名思義,就是為廣大技術人員如何創建、部署和管理Docker 容器以及基於Docker 的應用程序進行理論及實戰練習準備的。對於Docker 容器的工作原理以及每一個具體功能都麵麵俱到,特彆地,對於如何在生産環境中部署管理Docker 容器和集群,本書也花瞭很多的筆墨在探討。
以Docker 為代錶的容器適閤運行所有的無桌麵的服務型應用,從2013 年3 月Docker0.1 版本發布以來,在短短的四年時間裏,Docker 已經風靡全球的互聯網技術圈。迴顧過去的四年,Docker 容器技術可以說是每年都上一個新颱階,2013 年的小試牛刀,2014 年年中的Docker 1.0 版本的發布以及年底Docker Machine、Swarm 和Compose 三劍客的推齣,2015 年Docker 開始進入互聯網公司的生産環境部署,以及2016 年開始發力進入企業級應用,CaaS 市場也日漸成熟,與此相呼應的就是整個容器生態圈包括K8S、Mesos 等集群調度係統在內的蓬勃發展以及微服務架構模式的落地開花。特彆地,微服務可以說與Docker容器是絕配,目前國內有不少互聯網公司包括一些創業公司正在打算或者已經實施基於Docker 容器部署實現各自的微服務架構模式瞭。
本書在翻譯齣版階段,適逢Docker 1.12 版本的發布,該版本的內置Swam 編排機製可以說是劃時代性的新特性。由於時間的關係,該部分最新的內容還無法及時寫入到本書中,不過沒有關係,大傢在閱讀本書時,也可以看到作者對於容器集群編排係統是如何做齣一些前瞻性的預判的介紹。相信大傢通過閱讀本書,都會受益匪淺!
鬍震
上海凡用信息科技有限公司 CTO
序
我第一次聽說Docker,是通過從2013 年PyCon 會議的YouTube 視頻,它被第一時間發布到瞭Hacker News。Docker 的創始人Solomon Hykes 在他題為“Linux 容器未來”的五分鍾談話中,揭開瞭未來我們如何對外交付和運行軟件,不僅僅是在Linux 中,而是在幾乎所有的平颱和架構之上。雖然他在第五分鍾突然語塞,但毫不影響我清晰地認識這項技術在沙箱環境中運行Linux 應用程序,配以用戶友好的命令行工具和鏡像分層的獨特概念,都將改變很多東西。
Docker 大大改變瞭多數軟件的開發和運維模式。架構設計、開發,以及運維方式,在Docker 齣現前後有很大的不同。盡管Docker 沒有規定具體的方案,但它迫使人們思考微服務和不可變基礎設施的方法。
一旦Docker 被更廣泛地采用,人們便開始調查Docker 所使用的低層技術,更明確瞭Docker 的成功並不是技術本身,而是圍繞這個項目的人性化接口、API 和生態係統。許多大公司如榖歌、微軟和IBM 都在Docker 項目聚首,並攜手閤作,使它變得更好,而不是去構建另一個競爭對手。事實上,像微軟、Joyent、英特爾和VMware 等公司,雖在Linux 容器實現中都換掉瞭Docker,卻為他們自己的容器産品保留瞭Docker 的命令行接口。在短短兩年時間裏,很多新公司都如雨後春筍般成立,為的是增強開發者的體驗和填補Docker 生態係統的空白,形成一個健康且熱心的Docker 社區。
就我個人而言,我幫助微軟發布瞭其第一款支持跨平颱ASP.NET 的正式Docker 鏡像。我的下一個貢獻,會將Docker 命令行接口移植到Windows。這個項目幫助瞭許多Windows開發人員熟悉Docker,奠定瞭微軟對Docker 項目進行長期貢獻的基礎。Windows 移植項目也讓我以少數Docker 貢獻者的視角工作瞭兩個多月。後來,我們還有許多其他的貢獻,以確保Docker 成為微軟Azure 雲服務的重要工具。我們下一個大的目標就是Windows 容器,以及將Windows Server 2016 的新功能與Docker 完全集成在一起。
令人興奮的是,我們還在容器革命的初期。一切快得令人難以置信,隨著每天齣現的新技術和開源工具,如今,我們認為這一切將理所當然地會在未來數個月內繼續發生改變。
就在這個領域,創新者和我們行業最偉大的頭腦正在閤作,為軟件行業的其他領域,打造大量的創新工具,使發布和運行軟件不再受到規模變化的影響。
通過許多發錶在網上有關Docker 和微服務的文章,Jeff Nickoloff 將自己定位為新興的Docker 社區的第一人。他良好的寫作功底加上對技術性話題的詳細解答,能幫助開發人員快速學習和使用Docker 生態係統,並從中受益。而且,同樣重要的是,他還指齣瞭Docker的缺點。本書從零開始,展示瞭在生産環境中Docker 的部署,描述瞭Docker 擁有的復雜功能,並對相同任務的多種實現方案進行瞭比較。
在閱讀本書時,你不僅要學會如何有效地使用Docker,也一定要弄明白它的工作原理,Docker 每一個詳細功能如何使用,以及在生産環境中使用Docker 的最佳方法。我個人在讀本書時,有很多“哦,這個功能是做這個的呀”的時刻。寫這本書,特彆是針對一項總是以驚人速度在變革的技術,就像是在一輛行駛速度為60 英裏/小時的車子上畫畫一樣睏難。Jeff 的齣色工作,既覆蓋瞭Docker 的前沿功能,又為本書奠定瞭一個堅實的理念基礎,即無論Docker 在未來的幾個月甚至幾年中有什麼樣的變化,本書關於容器和微服務的理念,不會改變。
希望你和我一樣覺得能從這本書受益匪淺。
Ahmet Alp Balkan
微軟開放源碼軟件工程師
Docker 貢獻者
感 謝
與寫書不同,過去我的人生中大部分時間在處理簡單的事情。在開始寫作本書之前我就知道,寫作需要高度的紀律性和積極性,但我沒有讓自己失望。
首先,我想感謝Manning 齣版社給我這個機會來完成這項工作、Ahmet Alp Baken 寫瞭序,以及Niek Palm 給整個書稿做瞭技術校對。許多人審閱書稿,並在成書的各個階段提供瞭很多意見,包括Robert Wenner, Jean-Pol Landrain, John Guthrie, Beno?t Benedetti,Thomas Peklak, Jeremy Gailor, Fernando Fraga Rodrigues, Gregor Zurowski, Peter Sellars, MikeShepard, Peter Krey, Fernando Kobayashi, 和Edward Kuns。
在這個最睏難的時刻,成功依賴於一個集體的貢獻和支持。如果沒有他們的貢獻,我不會站在這裏。
?? Portia Dean,她在過去一年給瞭我閤作和支持。Portia,你是我的夥伴,我的正義和堅持的核心。沒有你,我將在某處迷失一年。我愛冒險,對下一次會發生什麼總是缺乏等待的耐心。
?? 我的父母,Kathy 以及Jeff Nickoloff,從年輕時就支持我的技術好奇心,培養我堅強的意誌。
?? Neil Fritz,超過15 年和我一起做項目,為瞭得到切片比薩,我們彼此心靈相通。
?? Andy Will 以及PHX2 的優秀工程師們,他們歡迎我到亞馬遜,並始終在提高我們的技術門檻,與他們閤作本身就是一種學習。
?? Nick Ciubotariu,打瞭漂亮的一仗,提高瞭技術領導力的門檻。
?? 卡特爾咖啡工作室,今年我在你們的總部花的時間要比我在傢多很多。你那有世界上最好的烤肉之一。舊金山人都會想念它。
最後,我要感謝全世界誌同道閤的朋友,他們在這段旅程與我共同學習、分享、挑戰或傾聽。
關於本書
《Docker 實戰》的宗旨是嚮開發人員、係統管理員和混閤技能的其他計算機用戶,介紹Docker 項目和Linux 容器的概念。Docker 和Linux 都是開源的項目,有豐富的在綫文檔,但無論如何,入門仍是一項艱巨的任務。
Docker 是有史以來增長最快的開源項目之一,在其周圍的生態係統也是以類似的速度不斷發展。由於這些原因,本書的重點完全在於Docker 的工具集。這一範圍限定不僅能使內容選材更精準,幫助讀者瞭解在他們的特有實例中如何應用Docker 功能;一旦讀者們牢牢把握住瞭本書涉及的基礎知識,他們也能應對更大的問題,進而探索整個生態係統。
路綫圖
本書被分成3 個部分。
第1 部分介紹Docker 和容器的特點。幫助你理解如何安裝和卸載Docker 中發布的軟件。你將學習如何運行、管理,並在不同的容器結構連接不同類型的軟件。第一部分介紹每一個Docker 用戶需要的基本技能。
第2 部分介紹Docker 的封裝和軟件的分發,涵蓋瞭不同大小Docker 鏡像的底層機製,以及對不同的封裝和分發方法所進行的調查。這一部分還包括對Docker Distribution 項目的的深入分析。
第3 部分介紹多容器項目和多主機環境,覆蓋瞭Docker Compose、Machine 和Swarm項目。這部分內容會指導構建和部署多個真實的實例,規模接近於大型的服務器軟件。
代碼約定和下載
本書是關於一個多用途的工具,所以很少有“代碼”列入書中。取而代之的是數以百計的shell 命令和配置文件。它們通常來用POSIX 兼容的語法。針對Docker 提供的一些特定於Windows 的功能,用戶需要注意那些為瞭提高可讀性或澄清注解而分行的命令。代碼托管在GitHub 上(https://github.com/dockerinaction),引用的鏡像庫可在Docker Hub(https://hub.docker.com/u/dockerinaction/)中找到。運行這些示例並不需要Docker Hub 或GitHub 的經驗。
本書使用瞭幾個開源項目,既展示瞭Docker 的各種功能,又幫助讀者轉變瞭軟件管理的範式。沒有一個單獨的軟件“堆棧”或係列比Docker 本身更突齣。通過這些實例,讀者將會使用如WordPress、Elasticsearch、Postgres、shell 腳本、Netcat、Flask、JavaScript、NGINX和Java 等工具。唯一的依賴就是Linux 內核。
關於封麵插圖
《Docker 實戰》的封麵,標題為“漁父”的插圖,是從19 世紀的許多藝術傢珍藏中挑選齣來的,由Louis Curmer 編輯,於1841 年在巴黎齣版。藏品的標題意為他們自己所畫的法國人。每個插圖,都是手繪,藏品豐富的變化生動地勾勒齣200 年前在世界各地區、城鎮、村莊和鄰裏文化有多麼不同。由於相互隔離,說著不同的方言或語言,在街道上或農村,從人們的著裝中很容易辨認他們住在哪裏,以及交易著什麼,生活的狀態如何。自那時以來,著裝規範改變瞭,那時豐富的地區多樣性,也已經消失瞭。現在很難分辨來自不同大陸的居民,更彆說不同的城市或地區。也許我們已經為更多樣化的個人生活,當然包括更多樣化和快節奏的技術化生活,犧牲瞭文化的多樣性。
而此時也很難區分計算機類的書籍,Manning 齣版社用該書封麵來紀念計算機業務的開創性和創新性,以及200 年前豐富的地域和多樣性的生活——就像這個藏品的那些圖片,把我們帶迴到瞭生活本身。
2011年,我開始在Amazon.com工作。在第一周我的生活就被改變瞭,因為我學會瞭如何使用他們的內部版本,對組件依賴建模和製作部署工具。這種自動化的管理方法,我一直都知道是可能的,但從來沒有見過。我過去的團隊,每一季度部署一次,需要10小時完成。在亞馬遜公司,我看著滾動部署工具,將當天早些時候我做齣的改動,推送到數百颱遍布全球的機器上。和其他公司的前景相比,這就是大科技公司的工程優勢。
早在2013年,我想使用Graphite(監控數據的收集和繪圖套件)工作。有一天,我要安裝該軟件,並開始整閤個人項目。應付這些事情,我有幾年開源工具的使用經驗,但很少依賴於Python這麼大的生態係統。安裝說明很長且模糊,在接下來的幾個小時裏,我發現許多安裝步驟沒有文檔說明。這對一個有較為深入的Python生態係統知識的人來說,可能顯而易見。但對我來說,在嘗試瞭幾個安裝指南,閱讀瞭相關的配置文件,並和代碼庫的依賴關係進行瞭史詩般地戰鬥後,我認輸瞭。
那是我一生中最沮喪的幾個小時。我不想和這個項目再有任何關係。更糟糕的是,因為它,我改變瞭當前的係統環境,經常使用的那些軟件現在變得無法兼容。而要還原這些變化,則需要很長一段時間,讓我尷尬不已。
我清楚地記得那年5月1日,我在辦公室,當我決定看看Hacker News上麵有沒有新的方法來提高我的能力時,並於那個被稱為Docker的技術文章,一整個星期上瞭幾次的頭版。那天晚上,我決定去試試。我找到瞭那個網站,幾分鍾內安裝瞭軟件。我在計算機桌麵上運行著Ubuntu,而Docker隻有兩個依賴:LXC和Linux內核本身。
像其他人一樣,我嘗試瞭“Hello,World”的示例,但什麼都不會。接下來,我安裝瞭Memcached,一分鍾內下載並運行。然後我啓用瞭WordPress,它帶著捆綁好的MySQL數據庫。我還拉瞭幾個不同的Java、Python鏡像。此時我迴想起安裝Graphite那可怕的一天。我打開Docker Index(在Docker Hub之前),並做瞭一個快速搜索。
結果齣來瞭,它就在那裏——某些用戶做好瞭Graphite鏡像。我抓取下來,並創建瞭一個新容器,一個簡單且配置好的Graphite服務器就在我的機器上運行瞭。我隻用瞭不到一分鍾的下載時間就搞定瞭它,而幾個月前同樣的安裝花費瞭幾個小時,結果還是失敗。Docker能夠用最簡單的示例,以及最小的努力來展現它的價值,我臣服瞭。
接下來的一周,我通過和好朋友之間關於Docker和容器的直接對話,測試瞭他的耐心。我解釋瞭包管理的好處,以及文件係統默認強製隔離可解決的一些管理上的問題;我大談資源利用效率和初始化延遲問題。我嚮其他幾個同事反復地講摸索著使用容器的故事。每個人聽後都有類似的問題,“哦,這就像虛擬化嗎?”“如果我有虛擬機,為什麼我還需要這個?”問的問題越多,我就想瞭解得更多。隨著項目的普及,我將這個故事分享給瞭許許多多的人。
當我有機會公開發言時,我開始談論有關Docker的內容。在2013年和2014年,隻有少數人聽說過Docker,甚至更少的人在實際中試過該軟件。大多數情況下,總有一些懷疑的係統管理員和興奮的開發人員,而且他們數量相當。人們的反應都大不相同。有些是純粹的反對者,顯然傾嚮於維持現狀。看得齣來,他們經曆過某些睏難,曾經遇到過很類似的日常問題。而另一些人的興奮反應和我很相似。
2014年的夏天,Manning的副發行人打電話給我,讓我談談Docker。在手機上談瞭一個多小時後,他問我是否有足夠的內容構成一本書。我的看法是這些內容足夠幾本書。他問我,是否有興趣寫寫,這讓我變得更加興奮,雖然那時我用Docker已經有一段時間瞭。那年鞦天,我離開Amazon.com,然後開始瞭《Docker實戰》這本書的創作。
今天,我坐在完成的手稿麵前。寫這本書的目的是讓更多的人能盡快學會使用Docker,在本書中,他們也將瞭解基本的機製和原理。我希望讀者有瞭這些知識後,可以理解Docker是如何被應用到實際問題中,以及如何更好地應用在自己的實例中。
我最近剛剛啃完《Docker實戰》,總體感受就是——“太值瞭”!在讀這本書之前,我對Docker的理解可能還停留在“它能打包應用”的層麵,很多時候在實際工作中遇到問題,就像大海撈針一樣找不到方嚮。這本書給我打開瞭一個全新的視角。它不僅僅是教你如何使用Docker命令,更重要的是,它教會瞭我如何“思考”Docker。比如,在講到Docker Compose的時候,它不僅僅是演示瞭如何編排多個服務,還深入探討瞭服務之間的依賴關係、網絡配置、以及如何實現高可用性的初步思路。我印象最深刻的是,有一章詳細講解瞭如何進行Docker鏡像的安全加固,包括如何使用最小化的基礎鏡像、移除不必要的工具、以及對暴露端口的控製等等,這些都是在實際生産環境中非常關鍵的點,但往往容易被忽略。書中對這些細節的關注,讓我覺得作者是真的有豐富的實戰經驗,並且願意把這些寶貴的經驗毫無保留地分享齣來。讀完後,我感覺自己在部署和管理微服務應用時,信心大增,很多以前覺得棘手的問題,現在都有瞭清晰的解決方案。
評分作為一名有幾年開發經驗的工程師,《Docker實戰》這本書給瞭我很多啓發。我之前接觸Docker,更多的是把它當做一個“黑盒”,能運行起來就好。但是這本書讓我開始思考“為什麼”。比如,它在介紹如何構建一個高效的Dockerfile時,不僅僅是給齣一堆命令,還深入分析瞭鏡像分層、緩存機製,以及如何通過多階段構建來減小最終鏡像的大小。這讓我意識到,理解Docker的底層原理,對於寫齣更健壯、更優化的Dockerfile至關重要。還有一個讓我印象深刻的部分是,書中討論瞭如何利用Docker來模擬復雜的生産環境,包括數據庫、消息隊列、緩存服務等,並通過Docker Compose進行統一管理。這對於我們進行本地開發、測試和CI/CD流程的搭建,簡直是神器。以前我們經常為瞭搭建一個完整的測試環境而頭疼,現在有瞭這本書的指導,感覺效率提升瞭一個量級。這本書真正地做到瞭“實戰”,讓我覺得學到的知識都能立刻應用到工作中,解決實際問題。
評分《Docker實戰》這本書,我花瞭不少時間去消化,但每一分鍾都覺得物有所值。我之前對Docker的認知,可能還停留在“能運行容器”的層麵,對於如何更好地管理、監控和自動化部署,一直沒有一個清晰的思路。這本書給我帶來的最大價值在於,它將Docker的生態係統描繪得非常完整,並且指齣瞭各種工具之間的聯係和配閤方式。我特彆喜歡它對Docker Hub和Registry的講解,以及如何構建私有鏡像倉庫,這對於我們在企業內部進行統一鏡像管理,提供瞭非常有效的解決方案。而且,書中關於Docker監控和日誌收集的部分,也給瞭我很多新的思路。如何高效地收集、聚閤和分析Docker容器的日誌,以及如何進行容器的性能監控,這些都是我們在生産環境中經常會遇到的難題。這本書不僅僅是教授技術,更是提供瞭一種解決問題的思維方式,讓我能夠更全麵地思考Docker在整個DevOps流程中的價值。
評分這本《Docker實戰》我拿到手的時候,說實話,有點小興奮。我一直對容器化技術很感興趣,也知道Docker是這個領域的翹楚,但總覺得理論知識學瞭不少,實操起來總有點不得要領。拿到書後,我立刻翻閱起來。最吸引我的地方在於,它不是那種枯燥的理論堆砌,而是用一種非常貼近實際應用場景的方式來展開。書裏大量的例子,從最基礎的安裝配置,到構建自己的鏡像,再到部署和管理應用,都講得非常細緻。我尤其喜歡它在講解過程中,會穿插一些“為什麼這麼做”的解釋,而不是簡單地給齣命令。比如,當它介紹如何優化Dockerfile的時候,不僅僅是羅列一些優化技巧,還會深入分析為什麼這些技巧能提升效率,或者避免哪些潛在的問題。這對於我這種想知其所以然的讀者來說,簡直太有幫助瞭。而且,書中的代碼示例都非常清晰,可以直接復製粘貼到自己的環境中進行嘗試,這種邊學邊練的模式,讓學習過程充滿瞭成就感。我感覺通過這本書,我真的能把Docker從一個概念變成一個可以熟練運用的工具。
評分說實話,我拿到《Docker實戰》的時候,並沒有抱太大的期望,因為市麵上關於Docker的書籍真的不少,但很多都感覺不夠接地氣。這本書給我帶來的驚喜是巨大的。它從一個非常實用的角度切入,直接切中瞭我在日常開發和部署中遇到的痛點。我最喜歡的是它對Docker網絡模式的講解,清晰地闡述瞭host、bridge、none等模式的應用場景和優劣,以及如何通過自定義網絡來解決服務發現和通信的問題。這部分內容,我之前在網上搜集瞭很多資料,但總覺得零散,而且容易混淆,而這本書用非常係統的方式,配以生動的圖示和代碼示例,讓我茅塞頓開。另外,關於Docker Swarm和Kubernetes的初步介紹,雖然篇幅不長,但卻給我指明瞭未來深入學習的方嚮。它讓我明白,Docker不僅僅是一個獨立的容器化工具,更是構建更復雜、更強大應用架構的基礎。總的來說,這本書就像一個經驗豐富的引路人,把我從Docker的迷霧中帶瞭齣來,讓我能夠更清晰地規劃自己的學習路徑和實踐方嚮。
評分京東送貨很給力,書也不錯
評分2、每個章節都有一個引言,一個結語。但在我看來,這些詞句有大量冗餘,且多有自以為是的自誇之嫌。例如”本章理清瞭xxx的脈絡,著重介紹xxx重點技術,並分析瞭xxx的優勢和劣勢,從而得齣瞭xxx的結論,最後為讀者勾勒瞭xxx的發展方嚮,從而使讀者對xxx有瞭全麵清晰的認識“這樣的段落,讓人讀著非常不舒服。尤其是最後一句,作者又不是讀者,你是怎麼知道讀者讀完就有瞭全麵清晰的認識呢?
評分書不錯,快遞也很快,就想看這本書裏的內容,好評哦!
評分還沒來得及看呢
評分朋友推薦,物美價廉,相信京東,非常好,還會再來。
評分包裝很好,還沒看呢,給公司買的書。看書是件好事,人醜就該多讀書。
評分不需要過多的評論,看看就知道瞭,我就想看看我一年買的書有沒有一萬以上,話說是不是按照新的計稅標準,這個算我再教育的投入吧。
評分做網站架構設計是分布式還是微服務,通過本書將會瞭解一些微服務的核心
評分SDN入門級書籍吧,自己很快就要轉這個方嚮瞭,不知道是不是未來的趨勢
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有