Docker实战
封頁
下載
電子版僅供預覽及學習交流使用,下載后請24小時內(nèi)刪除,支持正版,喜歡的請購買正版書籍
- 電子書下載 (訪問密碼: 3204)(皮皮云盤-點擊“普通下載”)
- 購買正版
編輯推薦
權(quán)威作者:具有十多年虛擬化研究經(jīng)驗,國內(nèi)首批研究Docker容器技術(shù)的專家,Docker開源項目貢獻者 快速入門:透過簡單的理論講解,帶你進入Docker的世界 步驟詳細:手把手教你配置方法,為你量身定制自己的Docker 內(nèi)容豐富:揭露鏡像制作過程,教你搭建鏡像倉庫
內(nèi)容簡介
自從2013年3月Docker 0.1版本發(fā)布以來,以其為代表的容器技術(shù)發(fā)展也走上了快車道,Docker容器在很大程度上改變了軟件的架構(gòu)設(shè)計、開發(fā)和運維部署方式,也給早些年就提出的微服務架構(gòu)模式插上了快速起飛的翅膀。本書由Docker社區(qū)第一人Jeff Nickoloff編寫,共分為三部分,第一部分(16章)重點介紹Docker容器的資源隔離和權(quán)限控制及基礎(chǔ)理論,第二部分(710章)詳細解釋了如何打包制作鏡像以及各種鏡像分發(fā)基礎(chǔ)設(shè)施的建設(shè),最后一部分(11~12章)聚焦于Docker容器的組合操作也就是多容器和多主機環(huán)境的管理。本書圖文并茂,結(jié)合基本原理和具體案例給大家提供了多個不錯的實戰(zhàn)機會。 作為目前最炙手可熱的容器技術(shù)類圖書,本書適用于互聯(lián)網(wǎng)、云計算及企業(yè)級軟件開發(fā)、架構(gòu)、測試及運維人員快速上手熟悉Docker容器,搭建以Docker為核心的基礎(chǔ)設(shè)施,并在生產(chǎn)環(huán)境中快速部署應用以及管理容器集群。
作者簡介
胡震,上海凡用信息科技有限公司CTO,長夜公司首席架構(gòu)師,DockOne社區(qū)優(yōu)秀翻譯。楊潤青,90后博士僧,研究方向是網(wǎng)絡(luò)和信息安全。 黃帥(Henry Huang),目前就職于趨勢科技,負責集群運維開發(fā)和維護工作,所在項目從2011年使用AWS服務至今,積累一定的AWS運維經(jīng)驗。 Jeff Nickoloff會建立大規(guī)模的服務站,寫關(guān)于技術(shù)的文字,并幫助人們實現(xiàn)他們的產(chǎn)品目標。他曾在Amazon.com、Limelight網(wǎng)絡(luò)和亞利桑那州立大學做這些事情。2014年離開亞馬遜,他創(chuàng)辦了一家咨詢公司,專注于為財富100強的企業(yè)和創(chuàng)業(yè)公司提供工具、培訓和實踐。 Jeff Nickoloff 會建立大規(guī)模的服務站,寫關(guān)于技術(shù)的文字,并幫助人們實現(xiàn)他們的產(chǎn)品目標。他曾在Amazon.com、Limelight 網(wǎng)絡(luò)和亞利桑那州立大學做這些事情。2014 年離開亞馬遜,他創(chuàng)辦了一家咨詢公司,專注于為財富100 強的企業(yè)和創(chuàng)業(yè)公司提供工具、培訓和實踐。如果你想與他聊天或者一起工作,可以在http://allingeek.com 找到他,或者在Twitter 上找@allingeek。
目 錄
目 錄
第1部分 保持一臺干凈的機器
第1章 歡迎來到Docker世界 2
1.1 什么是Docker 3
1.1.1 容器 3
1.1.2 容器不是虛擬化 4
1.1.3 在隔離的容器中運行軟件 4
1.1.4 分發(fā)容器 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 小結(jié) 13
第2章 在容器中運行軟件 14
2.1 從Docker命令行工具獲得幫助 14
2.2 控制容器:建立一個網(wǎng)站的監(jiān)控器 15
2.2.1 創(chuàng)建和啟動一個新的容器 16
2.2.2 運行交互式容器 17
2.2.3 列舉、停止、重新啟動和查看容器輸出 18
2.3 已解決的問題和PID命名空間 20
2.4 消除元數(shù)據(jù)沖突:構(gòu)建一個網(wǎng)站農(nóng)場 23
2.4.1 靈活的容器甄別 24
2.4.2 容器的狀態(tài)和依賴 26
2.5 構(gòu)建與環(huán)境無關(guān)的系統(tǒng) 28
2.5.1 只讀文件系統(tǒng) 29
2.5.2 環(huán)境變量的注入 31
2.6 建立持久的容器 34
2.6.1 自動重啟容器 35
2.6.2 保持容器運行init和supervisor進程 36
2.7 清理 38
2.8 小結(jié) 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 通過網(wǎng)站訪問Docker Hub 45
3.2.3 使用替代注冊服務器 47
3.2.4 鏡像文件 47
3.2.5 從Dockerfile安裝 49
3.3 安裝文件和隔離 49
3.3.1 鏡像層實戰(zhàn) 50
3.3.2 分層關(guān)系 51
3.3.3 容器文件系統(tǒng)抽象和隔離 52
3.3.4 工具集和文件系統(tǒng)結(jié)構(gòu)的好處 53
3.3.5 聯(lián)合文件系統(tǒng)的不足 53
3.4 小結(jié) 54
第4章 持久化存儲和卷間狀態(tài)共享 55
4.1 存儲卷的簡介 56
4.1.1 存儲卷提供容器無關(guān)的數(shù)據(jù)管理 56
4.1.2 NoSQL數(shù)據(jù)庫使用存儲卷 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 托管卷的權(quán)限 68
4.4.2 存儲卷的清理 69
4.5 存儲卷的高級容器模式 70
4.5.1 存儲卷容器模式 70
4.5.2 數(shù)據(jù)經(jīng)壓縮的存儲卷容器 72
4.5.3 多態(tài)容器模式 73
4.6 小結(jié) 74
第5章 網(wǎng)絡(luò)訪問 75
5.1 網(wǎng)絡(luò)相關(guān)的背景知識 76
5.1.1 基礎(chǔ):協(xié)議,接口和端口 76
5.1.2 高級:網(wǎng)絡(luò),NAT和端口轉(zhuǎn)發(fā) 77
5.2 Docker的網(wǎng)絡(luò) 79
5.2.1 本地Docker網(wǎng)絡(luò)的拓撲結(jié)構(gòu) 79
5.2.2 四種網(wǎng)絡(luò)結(jié)構(gòu)原型 80
5.3 Closed容器 81
5.4 Bridged容器 83
5.4.1 訪問外部網(wǎng)絡(luò) 84
5.4.2 自定義命名解析 85
5.4.3 開放對容器的訪問 88
5.4.4 跨容器通信 91
5.4.5 修改網(wǎng)橋接口的配置 92
5.5 Joined容器 93
5.6 Open容器 95
5.7 跨容器依賴 96
5.7.1 鏈接——本地服務發(fā)現(xiàn) 97
5.7.2 鏈接別名 98
5.7.3 環(huán)境變量的改動 99
5.7.4 鏈接的本質(zhì)和缺點 101
5.8 小結(jié) 102
第6章 隔離——限制危險 103
6.1 資源分配 104
6.1.1 內(nèi)存限制 104
6.1.2 CPU 105
6.1.3 設(shè)備的訪問權(quán) 108
6.2 共享內(nèi)存 108
6.2.1 跨容器的進程間通信 109
6.2.2 開放內(nèi)存容器 110
6.3 理解用戶 111
6.3.1 Linux用戶命令空間 111
6.3.2 run-as用戶 111
6.3.3 用戶和卷 114
6.4 能力——操作系統(tǒng)功能的授權(quán) 116
6.5 運行特權(quán)容器 117
6.6 使用加強工具創(chuàng)建更健壯的容器 118
6.6.1 指定額外的安全選項 119
6.6.2 微調(diào)LXC 120
6.7 因地制宜地構(gòu)建容器 121
6.7.1 應用 121
6.7.2 高層的系統(tǒng)服務 122
6.7.3 低層的系統(tǒng)服務 122
6.8 小結(jié) 122
第2部分 鏡像發(fā)布:如何打包軟件
第7章 在鏡像中打包軟件 126
7.1 從容器構(gòu)建鏡像 126
7.1.1 打包Hello World 127
7.1.2 打包Git 128
7.1.3 審查文件系統(tǒng)的改動 128
7.1.4 Commit——創(chuàng)建新鏡像 129
7.1.5 可配置的鏡像屬性 130
7.2 深入Docker鏡像和層 131
7.2.1 深入聯(lián)合文件系統(tǒng) 132
7.2.2 重新認識鏡像、層、倉庫和標簽 134
7.2.3 鏡像體積和層數(shù)限制 137
7.3 導出和導入扁平文件系統(tǒng) 139
7.4 版本控制的最佳實踐 141
7.5 小結(jié) 143
第8章 構(gòu)建自動化和高級鏡像設(shè)置 144
8.1 使用Dockerfile打包Git 144
8.2 Dockerfile入門 148
8.2.1 元數(shù)據(jù)指令 148
8.2.2 文件系統(tǒng)指令 152
8.3 注入下游鏡像在構(gòu)建時發(fā)生的操作 155
8.4 使用啟動腳本和多進程容器 158
8.4.1 驗證環(huán)境相關(guān)的先決條件 158
8.4.2 初始化進程 160
8.5 加固應用鏡像 161
8.5.1 內(nèi)容可尋址鏡像標識符 161
8.5.2 用戶權(quán)限 162
8.5.3 SUID和SGID權(quán)限 164
8.6 小結(jié) 166
第9章 公有和私有軟件分發(fā) 168
9.1 選擇一個分發(fā)方法 169
9.1.1 分發(fā)選項圖譜 169
9.1.2 選擇標準 169
9.2 通過托管Registry發(fā)布 172
9.2.1 通過公有倉庫發(fā)布:你好!Docker Hub 172
9.2.2 使用自動構(gòu)建發(fā)布公有項目 174
9.2.3 私有托管倉庫 176
9.3 私有Registry介紹 178
9.3.1 使用Registry鏡像 180
9.3.2 從Registry使用鏡像 181
9.4 鏡像的手動發(fā)布和分發(fā) 181
9.5 鏡像源代碼分發(fā)工作流程 186
9.6 小結(jié) 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 創(chuàng)建一個反向代理 197
10.2.2 在反向代理上配置HTTP(TLS) 199
10.2.3 添加身份認證層 202
10.2.4 客戶端兼容性 206
10.2.5 應用于生產(chǎn)環(huán)境之前 208
10.3 持久化的BLOB存儲 210
10.3.1 微軟Azure托管遠程存儲 211
10.3.2 AWS S3托管遠程存儲 212
10.3.3 RADOS(Ceph)的內(nèi)部遠程存儲 214
10.4 擴展訪問和延遲的改進 215
10.4.1 與元數(shù)據(jù)緩存集成 215
10.4.2 使用存儲中間件簡化BLOB傳輸 217
10.5 通過通知集成 219
10.6 小結(jié) 224
第3部分 多容器和多主機環(huán)境
第11章 Docker Compose聲明式環(huán)境 228
11.1 Docker Compose:第一天的啟動并運行 228
11.1.1 用一個簡單的開發(fā)環(huán)境入門 229
11.1.2 一個復雜的架構(gòu):分布式系統(tǒng)和Elasticsearch的集成 231
11.2 環(huán)境內(nèi)的迭代 233
11.2.1 構(gòu)建、啟動和重新構(gòu)建服務 234
11.2.2 服務伸縮和刪除 237
11.2.3 迭代和持久化狀態(tài) 238
11.2.4 網(wǎng)絡(luò)和連接問題 239
11.3 開始一個新項目:三個示例中的Compose YAML 240
11.3.1 啟動前的構(gòu)建、環(huán)境、元數(shù)據(jù)和網(wǎng)絡(luò) 240
11.3.2 已知的組件和綁定掛載卷 241
11.3.3 卷容器和擴展服務 242
11.4 小結(jié) 243
第12章 Docker Machine和Swarm集群 245
12.1 介紹Docker Machine 246
12.1.1 構(gòu)建和管理Docker Machine 246
12.1.2 配置Docker客戶端與遠程Daemon工作 249
12.2 Docker Swarm介紹 252
12.2.1 借助于Docker Machine構(gòu)建Swarm集群 252
12.2.2 Swarm擴展了Docker遠程API 255
12.3 Swarm調(diào)度 258
12.3.1 Spread算法 258
12.3.2 用過濾器調(diào)整調(diào)度 260
12.3.3 BinPack和隨機調(diào)度算法 263
12.4 Swarm服務發(fā)現(xiàn) 265
12.4.1 Swarm和單主機網(wǎng)絡(luò) 266
12.4.2 服務發(fā)現(xiàn)生態(tài)系統(tǒng)和權(quán)宜之計 268
12.4.3 展望多主機網(wǎng)絡(luò) 269
12.5 小結(jié) 270
后記 271
前 言
2011年,我開始在Amazon.com工作。在第一周我的生活就被改變了,因為我學會了如何使用他們的內(nèi)部版本,對組件依賴建模和制作部署工具。這種自動化的管理方法,我一直都知道是可能的,但從來沒有見過。我過去的團隊,每一季度部署一次,需要10小時完成。在亞馬遜公司,我看著滾動部署工具,將當天早些時候我做出的改動,推送到數(shù)百臺遍布全球的機器上。和其他公司的前景相比,這就是大科技公司的工程優(yōu)勢。
早在2013年,我想使用Graphite(監(jiān)控數(shù)據(jù)的收集和繪圖套件)工作。有一天,我要安裝該軟件,并開始整合個人項目。應付這些事情,我有幾年開源工具的使用經(jīng)驗,但很少依賴于Python這么大的生態(tài)系統(tǒng)。安裝說明很長且模糊,在接下來的幾個小時里,我發(fā)現(xiàn)許多安裝步驟沒有文檔說明。這對一個有較為深入的Python生態(tài)系統(tǒng)知識的人來說,可能顯而易見。但對我來說,在嘗試了幾個安裝指南,閱讀了相關(guān)的配置文件,并和代碼庫的依賴關(guān)系進行了史詩般地戰(zhàn)斗后,我認輸了。
那是我一生中最沮喪的幾個小時。我不想和這個項目再有任何關(guān)系。更糟糕的是,因為它,我改變了當前的系統(tǒng)環(huán)境,經(jīng)常使用的那些軟件現(xiàn)在變得無法兼容。而要還原這些變化,則需要很長一段時間,讓我尷尬不已。
我清楚地記得那年5月1日,我在辦公室,當我決定看看Hacker News上面有沒有新的方法來提高我的能力時,并于那個被稱為Docker的技術(shù)文章,一整個星期上了幾次的頭版。那天晚上,我決定去試試。我找到了那個網(wǎng)站,幾分鐘內(nèi)安裝了軟件。我在計算機桌面上運行著Ubuntu,而Docker只有兩個依賴:LXC和Linux內(nèi)核本身。
像其他人一樣,我嘗試了“Hello,World”的示例,但什么都不會。接下來,我安裝了Memcached,一分鐘內(nèi)下載并運行。然后我啟用了WordPress,它帶著捆綁好的MySQL數(shù)據(jù)庫。我還拉了幾個不同的Java、Python鏡像。此時我回想起安裝Graphite那可怕的一天。我打開Docker Index(在Docker Hub之前),并做了一個快速搜索。
結(jié)果出來了,它就在那里——某些用戶做好了Graphite鏡像。我抓取下來,并創(chuàng)建了一個新容器,一個簡單且配置好的Graphite服務器就在我的機器上運行了。我只用了不到一分鐘的下載時間就搞定了它,而幾個月前同樣的安裝花費了幾個小時,結(jié)果還是失敗。Docker能夠用最簡單的示例,以及最小的努力來展現(xiàn)它的價值,我臣服了。
接下來的一周,我通過和好朋友之間關(guān)于Docker和容器的直接對話,測試了他的耐心。我解釋了包管理的好處,以及文件系統(tǒng)默認強制隔離可解決的一些管理上的問題;我大談資源利用效率和初始化延遲問題。我向其他幾個同事反復地講摸索著使用容器的故事。每個人聽后都有類似的問題,“哦,這就像虛擬化嗎?”“如果我有虛擬機,為什么我還需要這個?”問的問題越多,我就想了解得更多。隨著項目的普及,我將這個故事分享給了許許多多的人。
當我有機會公開發(fā)言時,我開始談論有關(guān)Docker的內(nèi)容。在2013年和2014年,只有少數(shù)人聽說過Docker,甚至更少的人在實際中試過該軟件。大多數(shù)情況下,總有一些懷疑的系統(tǒng)管理員和興奮的開發(fā)人員,而且他們數(shù)量相當。人們的反應都大不相同。有些是純粹的反對者,顯然傾向于維持現(xiàn)狀。看得出來,他們經(jīng)歷過某些困難,曾經(jīng)遇到過很類似的日常問題。而另一些人的興奮反應和我很相似。
2014年的夏天,Manning的副發(fā)行人打電話給我,讓我談談Docker。在手機上談了一個多小時后,他問我是否有足夠的內(nèi)容構(gòu)成一本書。我的看法是這些內(nèi)容足夠幾本書。他問我,是否有興趣寫寫,這讓我變得更加興奮,雖然那時我用Docker已經(jīng)有一段時間了。那年秋天,我離開Amazon.com,然后開始了《Docker實戰(zhàn)》這本書的創(chuàng)作。
今天,我坐在完成的手稿面前。寫這本書的目的是讓更多的人能盡快學會使用Docker,在本書中,他們也將了解基本的機制和原理。我希望讀者有了這些知識后,可以理解Docker是如何被應用到實際問題中,以及如何更好地應用在自己的實例中。
總結(jié)
- 上一篇: centos yum 安装jdk
- 下一篇: c语言宴席排位置,图解中式婚宴主桌安排技