Docker是一個開源的應(yīng)用容器引擎,開發(fā)者可以利用Docker打包自己的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實現(xiàn)虛擬化。
本書由Docker公司前服務(wù)與支持副總裁James Turnbull編寫,是Docker開發(fā)指南。本書專注于Docker 1.9及以上版本,指導(dǎo)讀者完成Docker的安裝、部署、管理和擴(kuò)展,帶領(lǐng)讀者經(jīng)歷從測試到生產(chǎn)的整個開發(fā)生命周期,讓讀者了解Docker適用于什么場景。書中先介紹Docker及其組件的基礎(chǔ)知識,然后介紹用Docker構(gòu)建容器和服務(wù)來完成各種任務(wù):利用Docker為新項目建立測試環(huán)境,演示如何使用持續(xù)集成的工作流集成Docker,如何構(gòu)建應(yīng)用程序服務(wù)和平臺,如何使用Docker的API,如何擴(kuò)展Docker。
Docker技術(shù)圖書中文版。
Docker核心團(tuán)隊成員著作。
非常適合作為學(xué)習(xí)Docker的第1本入門書。
本書基于Docker 1.9及以上版本。
Docker是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以將他們的應(yīng)用和依賴包打包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實現(xiàn)虛擬化。容器完全使用沙箱機(jī)制,相互之間不會有任何接口。幾乎沒有性能開銷,可以很容易地在機(jī)器和數(shù)據(jù)中心中運行。重要的是,它不依賴于任何語言、框架或包裝系統(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ù)運
李兆海 網(wǎng)名Googol Lee。使用Googol這個名字真的是因為“10的100次方”這個意思,和后來的Google公司沒有一點兒關(guān)系。多年后端程序員,早期以C、C++為主,后來轉(zhuǎn)向Python,現(xiàn)在以Go為生。曾寫過《Golang初探》發(fā)表于2011年2月號《程序員》。Docker早期使用者。平時喜歡亂翻書,遇到感興趣的都會研究一番。
劉斌 具有10余年軟件開發(fā)經(jīng)驗,關(guān)注后臺開發(fā)技術(shù)和各種編程語言。做過電子商務(wù)、金融、企業(yè)系統(tǒng)以及Android手機(jī)開發(fā);寫過Delphi,也兼做系統(tǒng)管理員和DBA(現(xiàn)在都改叫DevOps了);既做后臺應(yīng)用,也要調(diào)用前臺CSS和JavaScript,可還是不敢自稱“全!保‵ull Stack);今又舶來“增長黑客”(Growth Hacker),我想我要做一個“增長工程師”(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ù)文章和視頻的翻譯、校對工作。生活中喜歡美食、騎行,熱衷于PC硬件,喜愛折騰,熱愛一切計算機(jī)相關(guān)的技術(shù),堅信技術(shù)改變世界。崇拜的技術(shù)傳奇人物是前id Software首席程序員、現(xiàn)Oculus VR首席技術(shù)官John Carmack。
第1章 簡介 1
1.1 Docker簡介 2
1.1.1 提供一個簡單、輕量的建模方式 2
1.1.2 職責(zé)的邏輯分離 3
1.1.3 快速、高效的開發(fā)生命周期 3
1.1.4 鼓勵使用面向服務(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ā)行版中啟動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中啟動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 二進(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)程是否正在運行 30
2.10 升級Docker 31
2.11 Docker用戶界面 32
2.12 小結(jié) 32
第3章 Docker入門 33
3.1 確保Docker已經(jīng)就緒 33
3.2 運行我們的第一個容器 34
3.3 使用第一個容器 36
3.4 容器命名 38
3.5 重新啟動已經(jīng)停止的容器 39
3.6 附著到容器上 40
3.7 創(chuàng)建守護(hù)式容器 40
3.8 容器內(nèi)部都在干些什么 41
3.9 Docker日志驅(qū)動 42
3.10 查看容器內(nèi)的進(jìn)程 43
3.11 Docker統(tǒng)計信息 44
3.12 在容器內(nèi)部運行進(jìn)程 44
3.13 停止守護(hù)式容器 45
3.14 自動重啟容器 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賬號 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 指令失敗時會怎樣 67
4.5.6 Dockerfile和構(gòu)建緩存 68
4.5.7 基于構(gòu)建緩存的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服務(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 運行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)建第一個應(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 啟動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)建一個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 運行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 運行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運行Consul集群 203
7.2.4 啟動具有自啟動功能的Consul節(jié)點 206
7.2.5 啟動其余節(jié)點 207
7.2.6 配合Consul,在Docker里運行一個分布式服務(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 初識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 對Docker Remote API進(jìn)行認(rèn)證 246
8.5.1 建立證書授權(quán)中心 246
8.5.2 創(chuàng)建服務(wù)器的證書簽名請求和密鑰 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章 獲得幫助和對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 報告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 運行測試 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