Docker 實踐, 2/e Docker in Practice, 2/e

Ian Miell,Aidan Hobson Sayers 楊銳 吳佳興 梁曉勇 黃博文

  • Docker 實踐, 2/e-preview-1
  • Docker 實踐, 2/e-preview-2
Docker 實踐, 2/e-preview-1

買這商品的人也買了...

商品描述

本書由淺入深地講解了Docker的相關內容,涵蓋從開發環境到DevOps流水線,
再一路到生產環境的整個落地過程以及相關的實用技巧。
書中介紹Docker的核心概念和架構,以及將Docker和開發環境有機、
高效地結合起來的方法,包括背Docker用作輕量級虛擬機、構建容器、
宿主機編排、配置管理、精簡鏡像等。
不僅如此,本書還通過“問題-解決方案-討論”的形式,
將Docker如何融入DevOps流水線、如何在生產環境落地等一系列難題拆解成114個相關的實用技巧,
為讀者提供解決方案以及一些細節和技巧方面的實踐經驗。
閱讀本書,讀者學到的不只是Docker,還包括持續集成、持續交付、
構建和鏡像管理、容器編排等相關領域的一線生產經驗。
本書編寫時一些案例參考的Docker版本是Docker 1.13。

本書要求讀者具備一定的容器管理和運維的基礎知識,
適合想要將Docker投入實踐的相關技術人員閱讀,
尤其適合具有中高級DevOps和運維背景的讀者閱讀。

作者簡介

Ian Miell

巴克萊的首席OpenShift架構師,也是一位經驗豐富的軟件工程師,
他是公司中首位發現Docker潛力的人,並且在Docker生態系統中創建了他自己的工具。


Aidan Hobson Sayers

對Docker實踐的細節有濃厚的興趣,他經常分析Docker源代碼。
他和Ian都為Docker的發展貢獻了自己的一份力量,
對在商業壓力開發環境中構建和維護Docker基礎設施有著豐富的經驗。

譯者簡介

楊銳

前ThoughtWorks諮詢師,DevOps領域持續關注者,曾任某海外大型項目DevOps工程師,
對其持續交付、基礎設施即代碼、流水線即代碼等方面進行了持續推動,
對雲計算、容器化和持續交付等有一定經驗。
現供職美團點評。

吳佳興

畢業於華東理工大學計算機系,主要研究方向有運維自動化、雲原生基礎設施建設和混沌工程等。
2014年年底有幸加入DockOne社區,作為譯者,利用閒暇時間為社區貢獻一些微薄的力量。
歡迎郵件聯繫(wjx_colstu@hotmail.com)。


梁曉勇

畢業於廈門大學,現任齊家網技術總監,DockOne社區編外人員。
長期奮戰在技術研發第一線,在網絡管理、技術開發、架構設計等方面略有心得。
熱愛互聯網技術,積極投身開源社區,對Docker等容器技術具有濃厚興趣。
歡迎郵件聯繫(sunlxy@yahoo.com)。


黃博文

ThoughtWorks資深軟件工程師/諮詢師,擁有豐富的敏捷團隊工作經驗。
目前專注於DevOps技術及雲端架構,在搭建持續集成及部署平台、
自動化構建基礎設施、虛擬化環境以及雲端運維等方面有著豐富的經驗。
擁有AWS解決方案架構師以及開發者證書。
譯作有《Effective JavaScript》《響應式Web設計:HTML5和CSS3實踐指南》《C#多線程編程實戰》等。
個人郵箱為huangbowen521@gmail.com。

目錄大綱

第 一部分 Docker基礎
第 1章 Docker初探 3
1.1 Docker是什麽以及為什麽用Docker 4
1.1.1 Docker是什麽 4
1.1.2 Docker有什麽好處 6
1.1.3 關鍵的概念 7
1.2 構建一個Docker應用程序 9
1.2.1 創建新的Docker鏡像的方式 10
1.2.2 編寫一個Dockerfile 11
1.2.3 構建一個Docker鏡像 12
1.2.4 運行一個Docker容器 13
1.2.5 Docker分層 16
1.3 小結 17

第 2章 理解Docker——深入引擎室 18
2.1 Docker的架構 18
2.2 Docker守護進程 20
技巧1 向世界開放Docker守護進程 20
技巧2 以守護進程方式運行容器 22
技巧3 將Docker移動到不同分區 25
2.3 Docker客戶端 26
技巧4 使用socat監控Docker API流量 26
技巧5 在瀏覽器中使用Docker 29
技巧6 使用埠連接容器 31
技巧7 允許容器通信 33
技巧8 鏈接容器實現埠隔離 34
2.4 Docker註冊中心 36
技巧9 建立一個本地Docker註冊中心 37
2.5 Docker Hub 38
技巧10 查找並運行一個Docker鏡像 39
2.6 小結 41

第二部分 Docker與開發
第3章 將Docker用作輕量級虛擬機 45
3.1 從虛擬機到容器 46
技巧11 將虛擬機轉換為容器 46
技巧12 類宿主機容器 49
技巧13 將一個系統拆成微服務容器 51
技巧14 管理容器內服務的啟動 54
3.2 保存和還原工作成果 57
技巧15 “保存游戲”的方式:廉價的源代碼管理 57
技巧16 給Docker打標簽 59
技巧17 在Docker Hub上分享鏡像 62
技巧18 在構建時指向特定的鏡像 64
3.3 進程即環境 65
技巧19 “保存游戲”的方式:在2048里獲勝 65
3.4 小結 67

第4章 構建鏡像 68
4.1 構建鏡像 68
技巧20 使用ADD指令將文件註入鏡像里 68
技巧21 不帶緩存的重新構建 71
技巧22 清除緩存 73
技巧23 使用build-args實現智能的緩存清除 74
技巧24 使用ADD指令實現智能的緩存清除 78
技巧25 在容器里設置正確的時區 81
技巧26 語言環境管理 83
技巧27 image-steper遍歷鏡像分層 86
技巧28 ONBUILD指令和golang 90
4.2 小結 93
第5章 運行容器 94
5.1 運行容器 94
技巧29 在Docker里運行GUI 94
技巧30 檢查容器 97
技巧31 乾凈地“殺死”容器 98
技巧32 使用Docker Machine置備Docker宿主機 100
技巧33 帶通配符的DNS 104
5.2 捲——持久化問題 105
技巧34 Docker捲——持久化的問題 105
技巧35 通過Resilio Sync 實現的分佈式捲 107
技巧36 保留容器的bash歷史 109
技巧37 數據容器 111
技巧38 使用SSHFS掛載遠程捲 113
技巧39 通過NFS共享數據 115
技巧40 開發工具容器 118
5.3 小結 119

第6章 Docker日常 120
6.1 保持陣型 120
技巧41 運行Docker時不加sudo 120
技巧42 清理容器 121
技巧43 清理捲 123
技巧44 無須停止容器,從容器里解綁 125
技巧45 使用Portainer來管理Docker守護進程 125
技巧46 生成Docker鏡像的依賴圖 126
技巧47 直接行動:在容器上執行命令 129
技巧48 你在容器里嗎 130
6.2 小結 131

第7章 配置管理,讓一切井然有序 132
7.1 配置管理和Dockerfile 132
技巧49 使用ENTRYPOINT創建可靠的定製工具 133
技巧50 在構建中指定版本來避免軟件包的漂移 134
技巧51 用perl -p -i -e替換文本 136
技巧52 鏡像的扁平化 138
技巧53 用Alien管理外來軟件包 140
7.2 傳統配置管理工具與Docker 142
技巧54 傳統方式:搭配make和Docker 142
技巧55 借助Chef Solo構建鏡像 145
7.3 小即是美 149
技巧56 讓鏡像變得更小的技巧 149
技巧57 通過BusyBox和Alpine精簡Docker鏡像 151
技巧58 Go模型的最小容器 153
技巧59 使用inotifywait給容器瘦身 156
技巧60 大也可以美 159
7.4 小結 161

第三部分 Docker與DevOps
第8章 持續集成:加快開發流水線 165
8.1 Docker Hub自動化構建 165
技巧61 使用Docker Hub工作流 166
8.2 更有效的構建 169
技巧62 使用eatmydata為I/O密集型構建提速 169
技巧63 設置一個軟件包緩存用於加快構建速度 171
技巧64 容器里的無頭Chrome 174
技巧65 在Docker內部運行Selenium測試 176
8.3 容器化CI過程 181
技巧66 在一個Docker容器里運行Jenkins主服務器 181
技巧67 包含一個復雜的開發環境 183
技巧68 使用Jenkins的Swarm插件擴展CI 188
技巧69 安全地升級容器化Jenkins服務器 191
8.4 小結 195

第9章 持續交付:與Docker原則完美契合 196
9.1 在CD流水線上與其他團隊互動 197
技巧70 Docker契約:減少摩擦 197
9.2 推動Docker鏡像的部署 199
技巧71 手動同步註冊中心鏡像 200
技巧72 通過受限連接交付鏡像 201
技巧73 以TAR文件方式共享Docker對象 203
9.3 為不同環境配置鏡像 205
技巧74 使用etcd通知容器 205
9.4 升級運行中的容器 208
技巧75 使用confd啟用零停機時間切換 209
9.5 小結 213

第 10章 網絡模擬:無痛的現實環境測試 214
10.1 容器通信:超越手工鏈接 214
技巧76 一個簡單的Docker Compose集群 214
技巧77 一個使用Docker Compose的SQLite服務器 218
10.2 使用Docker模擬真實世界的網絡 222
技巧78 使用Comcast模擬有問題的網絡 223
技巧79 使用Blockade模擬有問題的網絡 226
10.3 Docker和虛擬網絡 230
技巧80 創建另一個Docker虛擬網絡 231
技巧81 使用Weave建立一個基底網絡 234
10.4 小結 237

第四部分 從單機到雲的編排
第 11章 容器編排入門 241
11.1 簡單的單台宿主機 242
技巧82 使用systemd管理宿主機上的容器 242
技巧83 編排宿主機上的容器的啟動 246
11.2 手動多宿主機Docker 249
技巧84 使用Helios手動管理多宿主機Docker 249
11.3 服務發現:我們有什麽 254
技巧85 使用Consul發現服務 255
技巧86 使用Registrator進行自動化服務註冊 262
11.4 小結 264

第 12章 使用Docker實現數據中心即操作系統 265
12.1 多宿主機Docker 265
技巧87 swarm模式的無縫Docker集群 265
技巧88 使用Kubernetes集群 269
技巧89 在pod內訪問Kubernetes API 274
技巧90 使用OpenShift在本地運行AWS API 277
技巧91 在Mesos上構建框架 283
技巧92 使用Marathon細粒度管理Mesos 290
12.2 小結 293

第 13章 Docker平臺 294
13.1 組織選擇的因素 295
13.1.1 投放到市場的時間 297
13.1.2 購買與構建 297
13.1.3 單體與零散 298
13.1.4 開源與授權 299
13.1.5 安全態度 299
13.1.6 消費者獨立性 300
13.1.7 雲策略 300
13.1.8 組織結構 300
13.1.9 多平臺? 300
13.1.10 組織選擇因素結論 301
13.2 採用Docker時需要考慮的方面 301
13.2.1 安全與控制 301
13.2.2 構建和分發鏡像 307
13.2.3 運行容器 309
13.3 供應商、組織和產品 311
13.3.1 雲原生計算基金會(CNCF) 311
13.3.2 Docker公司 313
13.3.3 谷歌 313
13.3.4 微軟 313
13.3.5 亞馬遜 314
13.3.6 Red Hat 314
13.4 小結 315

第五部分 生產環境中的Docker
第 14章 Docker與安全 319
14.1 Docker訪問權限及其意味著什麽 319
你在乎嗎 320
14.2 Docker中的安全手段 320
技巧93 限制能力 321
技巧94 掃描一個“壞”Docker鏡像 324
14.3 保衛對於Docker的使用 325
技巧95 Docker實例上的HTTP認證 326
技巧96 保護Docker API 329
14.4 Docker外部的安全性 333
技巧97 使用DockerSlim來減少容器攻擊者的攻擊面 333
技巧98 去除在構建中加入的密碼 338
技巧99 OpenShift—— 一個應用程序平臺即服務 342
技巧100 使用安全選項 350
14.5 小結 357

第 15章 一帆風順:在生產環境中運行Docker 358
15.1 監控 358
技巧101 記錄容器的日誌到宿主機的syslog 358
技巧102 記錄Docker日誌的輸出 361
技巧103 使用cAdvisor監控容器 363
15.2 資源控制 365
技巧104 限制容器可以運行的內核 365
技巧105 給重要的容器更多CPU 366
技巧106 限制容器的內存使用 367
15.3 Docker的系統管理員用例 369
技巧107 使用Docker運行cron作業 369
技巧108 通過“保存游戲”的方法來備份 372
15.4 小結 374

第 16章 Docker生產環境實踐——應對各項挑戰 375
16.1 性能:不能忽略宿主機 375
技巧109 從容器訪問宿主機資源 375
技巧110 禁用內存溢出殺手 379
16.2 在容器出問題時——調試Docker 381
技巧111 使用nsenter調試容器的網絡 381
技巧112 無須重新配置,使用tcpflow進行實時調試 384
技巧113 調試在特定宿主機上出問題的容器 386
技巧114 從鏡像中提取文件 389
16.3 小結 391

附錄A 安裝並使用Docker 392
A.1 虛擬機的方式 392
A.2 連接到外部Docker服務器的Docker客戶端 393
A.3 原生Docker客戶端和虛擬機 393
Windows上的Docker 393
A.4 獲得幫助 395
附錄B Docker配置 396
B.1 配置Docker 396
B.2 重啟Docker 397
B.2.1 使用systemctl重啟 397
B.2.2 重啟服務 398
附錄C Vagrant 399
C.1 設置 399
C.2 圖形用戶界面 399
C.3 內存 400