Docker是一個(gè)開源的應(yīng)用容器引擎,開發(fā)者可以利用Docker打包自己的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。
本書由Docker公司前服務(wù)與支持副總裁James Turnbull編寫,是Docker開發(fā)指南。本書專注于Docker 1.9及以上版本,指導(dǎo)讀者完成Docker的安裝、部署、管理和擴(kuò)展,帶領(lǐng)讀者經(jīng)歷從測試到生產(chǎn)的整個(gè)開發(fā)生命周期,讓讀者了解Docker適用于什么場景。書中先介紹Docker及其組件的基礎(chǔ)知識(shí),然后介紹用Docker構(gòu)建容器和服務(wù)來完成各種任務(wù):利用Docker為新項(xiàng)目建立測試環(huán)境,演示如何使用持續(xù)集成的工作流集成Docker,如何構(gòu)建應(yīng)用程序服務(wù)和平臺(tái),如何使用Docker的API,如何擴(kuò)展Docker。
Docker技術(shù)圖書中文版。
Docker核心團(tuán)隊(duì)成員著作。
非常適合作為學(xué)習(xí)Docker的第1本入門書。
本書基于Docker 1.9及以上版本。
Docker是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以將他們的應(yīng)用和依賴包打包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。幾乎沒有性能開銷,可以很容易地在機(jī)器和數(shù)據(jù)中心中運(yùn)行。重要的是,它不依賴于任何語言、框架或包裝系統(tǒng)。
James是一位技術(shù)作家,還是一名開源極客。他的大作是一本講述流行開源日志工具的書——The LogStash Book。James還寫了兩本關(guān)于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曾擔(dān)任Docker公司服務(wù)與支持副總裁、Venmo公司工程副總裁和Puppet Labs的技術(shù)運(yùn)
李兆海 網(wǎng)名Googol Lee。使用Googol這個(gè)名字真的是因?yàn)椤?0的100次方”這個(gè)意思,和后來的Google公司沒有一點(diǎn)兒關(guān)系。多年后端程序員,早期以C、C++為主,后來轉(zhuǎn)向Python,現(xiàn)在以Go為生。曾寫過《Golang初探》發(fā)表于2011年2月號(hào)《程序員》。Docker早期使用者。平時(shí)喜歡亂翻書,遇到感興趣的都會(huì)研究一番。
劉斌 具有10余年軟件開發(fā)經(jīng)驗(yàn),關(guān)注后臺(tái)開發(fā)技術(shù)和各種編程語言。做過電子商務(wù)、金融、企業(yè)系統(tǒng)以及Android手機(jī)開發(fā);寫過Delphi,也兼做系統(tǒng)管理員和DBA(現(xiàn)在都改叫DevOps了);既做后臺(tái)應(yīng)用,也要調(diào)用前臺(tái)CSS和JavaScript,可還是不敢自稱“全!保‵ull Stack);今又舶來“增長黑客”(Growth Hacker),我想我要做一個(gè)“增長工程師”(Growth Engineer)。
巨震 北京大學(xué)軟件工程碩士,服務(wù)器端開發(fā)者。目前就職于創(chuàng)業(yè)公司,使用Node.js、Golang進(jìn)行服務(wù)器端開發(fā)。2013年年底開始研究Docker,是Docker中文社區(qū)的活躍貢獻(xiàn)者,負(fù)責(zé)Docker技術(shù)文章和視頻的翻譯、校對(duì)工作。生活中喜歡美食、騎行,熱衷于PC硬件,喜愛折騰,熱愛一切計(jì)算機(jī)相關(guān)的技術(shù),堅(jiān)信技術(shù)改變世界。崇拜的技術(shù)傳奇人物是前id Software首席程序員、現(xiàn)Oculus VR首席技術(shù)官John Carmack。
第1章 簡介 1
1.1 Docker簡介 2
1.1.1 提供一個(gè)簡單、輕量的建模方式 2
1.1.2 職責(zé)的邏輯分離 3
1.1.3 快速、高效的開發(fā)生命周期 3
1.1.4 鼓勵(lì)使用面向服務(wù)的架構(gòu) 3
1.2 Docker組件 3
1.2.1 Docker客戶端和服務(wù)器 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的技術(shù)組件 8
1.6 本書的內(nèi)容 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系發(fā)行版中安裝Docker 17
2.3.1 檢查前提條件 18
2.3.2 安裝Docker 19
2.3.3 在Red Hat系發(fā)行版中啟動(dòng)Docker守護(hù)進(jìn)程 21
2.4 在OS X中安裝Docker Toolbox 22
2.4.1 在OS X中安裝Docker Toolbox 22
2.4.2 在OS X中啟動(dòng)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中啟動(dòng)Docker Toolbox 25
2.5.3 測試Docker Toolbox 26
2.6 使用本書的Docker Toolbox示例 26
2.7 Docker安裝腳本 27
2.8 二進(jìn)制安裝 28
2.9 Docker守護(hù)進(jìn)程 28
2.9.1 配置Docker守護(hù)進(jìn)程 29
2.9.2 檢查Docker守護(hù)進(jìn)程是否正在運(yùn)行 30
2.10 升級(jí)Docker 31
2.11 Docker用戶界面 32
2.12 小結(jié) 32
第3章 Docker入門 33
3.1 確保Docker已經(jīng)就緒 33
3.2 運(yùn)行我們的第一個(gè)容器 34
3.3 使用第一個(gè)容器 36
3.4 容器命名 38
3.5 重新啟動(dòng)已經(jīng)停止的容器 39
3.6 附著到容器上 40
3.7 創(chuàng)建守護(hù)式容器 40
3.8 容器內(nèi)部都在干些什么 41
3.9 Docker日志驅(qū)動(dòng) 42
3.10 查看容器內(nèi)的進(jìn)程 43
3.11 Docker統(tǒng)計(jì)信息 44
3.12 在容器內(nèi)部運(yùn)行進(jìn)程 44
3.13 停止守護(hù)式容器 45
3.14 自動(dòng)重啟容器 46
3.15 深入容器 47
3.16 刪除容器 48
3.17 小結(jié) 49
第4章 使用Docker鏡像和倉庫 50
4.1 什么是Docker鏡像 50
4.2 列出鏡像 52
4.3 拉取鏡像 55
4.4 查找鏡像 57
4.5 構(gòu)建鏡像 58
4.5.1 創(chuàng)建Docker Hub賬號(hào) 59
4.5.2 用Docker的commit命令創(chuàng)建鏡像 60
4.5.3 用Dockerfile構(gòu)建鏡像 62
4.5.4 基于Dockerfile構(gòu)建新鏡像 65
4.5.5 指令失敗時(shí)會(huì)怎樣 67
4.5.6 Dockerfile和構(gòu)建緩存 68
4.5.7 基于構(gòu)建緩存的Dockerfile模板 69
4.5.8 查看新鏡像 70
4.5.9 從新鏡像啟動(dòng)容器 70
4.5.10 Dockerfile指令 74
4.6 將鏡像推送到Docker Hub 88
4.7 刪除鏡像 92
4.8 運(yùn)行自己的Docker Registry 94
4.8.1 從容器運(yùn)行Registry 94
4.8.2 測試新Registry 95
4.9 其他可選Registry服務(wù) 96
4.10 小結(jié) 96
第5章 在測試中使用Docker 97
5.1 使用Docker測試靜態(tài)網(wǎng)站 97
5.1.1 Sample網(wǎng)站的初始Dockerfile 98
5.1.2 構(gòu)建Sample網(wǎng)站和Nginx鏡像 100
5.1.3 從Sample網(wǎng)站和Nginx鏡像構(gòu)建容器 102
5.1.4 修改網(wǎng)站 104
5.2 使用Docker構(gòu)建并測試Web應(yīng)用程序 105
5.2.1 構(gòu)建Sinatra應(yīng)用程序 105
5.2.2 創(chuàng)建Sinatra容器 107
5.2.3 擴(kuò)展Sinatra應(yīng)用程序來使用Redis 110
5.2.4 將Sinatra應(yīng)用程序連接到Redis容器 113
5.2.5 Docker內(nèi)部連網(wǎng) 114
5.2.6 Docker Networking 119
5.2.7 使用容器連接來通信 131
5.2.8 連接容器小結(jié) 132
5.3 Docker用于持續(xù)集成 132
5.3.1 構(gòu)建Jenkins和Docker服務(wù)器 133
5.3.2 創(chuàng)建新的Jenkins作業(yè) 137
5.3.3 運(yùn)行Jenkins作業(yè) 141
5.3.4 與Jenkins作業(yè)有關(guān)的下一步 143
5.3.5 Jenkins設(shè)置小結(jié) 143
5.4 多配置的Jenkins 143
5.4.1 創(chuàng)建多配置作業(yè) 143
5.4.2 測試多配置作業(yè) 147
5.4.3 Jenkins多配置作業(yè)小結(jié) 149
5.5 其他選擇 149
5.5.1 Drone 149
5.5.2 Shippable 149
5.6 小結(jié) 149
第6章 使用Docker構(gòu)建服務(wù) 151
6.1 構(gòu)建第一個(gè)應(yīng)用 151
6.1.1 Jekyll基礎(chǔ)鏡像 152
6.1.2 構(gòu)建Jekyll基礎(chǔ)鏡像 153
6.1.3 Apache鏡像 153
6.1.4 構(gòu)建Jekyll Apache鏡像 154
6.1.5 啟動(dòng)Jekyll網(wǎng)站 155
6.1.6 更新Jekyll網(wǎng)站 158
6.1.7 備份Jekyll卷 159
6.1.8 擴(kuò)展Jekyll示例網(wǎng)站 161
6.2 使用Docker構(gòu)建一個(gè)Java應(yīng)用服務(wù) 161
6.2.1 WAR文件的獲取程序 161
6.2.2 獲取WAR文件 162
6.2.3 Tomecat7應(yīng)用服務(wù)器 163
6.2.4 運(yùn)行WAR文件 165
6.2.5 基于Tomcat應(yīng)用服務(wù)器的構(gòu)建服務(wù) 166
6.3 多容器的應(yīng)用!169
6.3.1 Node.js鏡像 169
6.3.2 Redis基礎(chǔ)鏡像 172
6.3.3 Redis主鏡像 173
6.3.4 Redis副本鏡像 174
6.3.5 創(chuàng)建Redis后端集群 174
6.3.6 創(chuàng)建Node容器 178
6.3.7 捕獲應(yīng)用日志 180
6.3.8 Node程序棧的小結(jié) 183
6.4 不使用SSH管理Docker容器 183
6.5 小結(jié) 185
第7章 Docker編配和服務(wù)發(fā)現(xiàn) 186
7.1 Docker Compose 187
7.1.1 安裝Docker Compose 187
7.1.2 獲取示例應(yīng)用 188
7.1.3 docker-compose.yml文件 191
7.1.4 運(yùn)行Compose 193
7.1.5 使用Compose 195
7.1.6 Compose小結(jié) 197
7.2 Consul、服務(wù)發(fā)現(xiàn)和Docker 197
7.2.1 構(gòu)建Consul鏡像 199
7.2.2 在本地測試Consul容器 202
7.2.3 使用Docker運(yùn)行Consul集群 203
7.2.4 啟動(dòng)具有自啟動(dòng)功能的Consul節(jié)點(diǎn) 206
7.2.5 啟動(dòng)其余節(jié)點(diǎn) 207
7.2.6 配合Consul,在Docker里運(yùn)行一個(gè)分布式服務(wù) 212
7.3 Docker Swarm 221
7.3.1 安裝Swarm 222
7.3.2 創(chuàng)建Swarm集群 222
7.3.3 創(chuàng)建容器 225
7.3.4 過濾器 227
7.3.5 策略 229
7.3.6 小結(jié) 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 小結(jié) 231
第8章 使用Docker API 233
8.1 Docker API 233
8.2 初識(shí)Remote API 234
8.3 測試Docker Remote API 236
8.3.1 通過API來管理Docker鏡像 237
8.3.2 通過API管理Docker容器 239
8.4 改進(jìn)TProv應(yīng)用 242
8.5 對(duì)Docker Remote API進(jìn)行認(rèn)證 246
8.5.1 建立證書授權(quán)中心 246
8.5.2 創(chuàng)建服務(wù)器的證書簽名請(qǐng)求和密鑰 248
8.5.3 配置Docker守護(hù)進(jìn)程 250
8.5.4 創(chuàng)建客戶端證書和密鑰 251
8.5.5 配置Docker客戶端開啟認(rèn)證功能 253
8.6 小結(jié) 254
第9章 獲得幫助和對(duì)Docker進(jìn)行改進(jìn) 255
9.1 獲得幫助 255
9.1.1 Docker用戶、開發(fā)郵件列表及論壇 255
9.1.2 IRC上的Docker 256
9.1.3 GitHub上的Docker 256
9.2 報(bào)告Docker的問題 257
9.3 搭建構(gòu)建環(huán)境 257
9.3.1 安裝Docker 257
9.3.2 安裝源代碼和構(gòu)建工具 257
9.3.3 檢出源代碼 258
9.3.4 貢獻(xiàn)文檔 258
9.3.5 構(gòu)建開發(fā)環(huán)境 259
9.3.6 運(yùn)行測試 261
9.3.7 在開發(fā)環(huán)境中使用Docker 261
9.3.8 發(fā)起pull request 262
9.3.9 批準(zhǔn)合并和維護(hù)者 263
9.4 小結(jié) 264