更多書籍點擊進入>> CiCi島php
電子版僅供預覽及學習交流使用,下載後請24小時內刪除,支持正版,喜歡的請購買正版書籍html
適合不一樣開發者的Docker工具書! 內容全面:基礎命令、進階用法悉數囊括,知識點全覆蓋。 活學活用:大量實踐案例展現,指導上手使用,深化理解。 知識新鮮:以*文檔、材料爲基礎,跟進Docker演進的步伐。git
做爲引領近幾年容器虛擬化領域的技術,Docker的發展方興未艾。但因爲其出現不過數年,關於它的資料,特別是中文資料仍然相對匱乏,致使國內許多開發者對其感到陌生。本書正是以佈道Docker爲理念,由淺入深地從闡述Docker的基本概念、講解常規使用方法、進行操做實踐的演示、展現提升和進階用法、剖析內部原理和底層架構等多個方面,全方面的展示Docker所具備的魅力。本書由概念及至實踐,從不一樣方面向讀者展示了Docker,實用性很是強,既能夠做爲一本學習Docker的入門教材,也能做爲進行Docker操做實踐的說明書,甚至能夠做爲提升和進階的知識寶庫。不管是對Docker認知程度不一樣,有着不一樣知識儲備的人,仍是處於程序軟件研發部署流程中的開發人員、測試人員或運維人員,本書都有着很強的可閱讀性。github
熊昌隆,資深架構師,Web全棧開發者,知名博主,Beaver框架做者,開源小組Funcuter的發起者,致力於新興技術的研究和推廣。早年參與智慧路由的研究,多項研究成果影響了家用路由器的發展。設計實現的Beaver框架,已經應用於千萬級系統的底層程序架構中。發起組建的Funcuter開源小組,旨在彙集國內的優秀開源項目和開發者,目前已經擁有多個開源項目。近年來一直致力於前沿技術的研究和推廣,但願讓更多的開發者更輕鬆的接觸、瞭解*興科技成果,並應用於開發實踐中。docker
目 錄
第一部分 基礎篇
第1章 初識Docker 1
1.1 虛擬化 2
1.1.1 虛擬化技術 2
1.1.2 虛擬化的分類 4
1.2 容器技術與Docker 6
1.2.1 容器技術 6
1.2.2 Docker簡介 8
1.2.3 改變世界的發明 10
1.3 Docker的安裝 10
1.3.1 在Ubuntu中安裝Docker 11
1.3.2 在CentOS中安裝Docker 12
1.3.3 在Windows中安裝Docker 13
1.3.4 在Mac OS中安裝Docker 15
1.3.5 在其餘系統中安裝Docker 16
1.4 Docker的優點 17
1.4.1 革命性的虛擬化方案 17
1.4.2 高效的容器技術 18
1.4.3 社區的力量 19
1.5 Docker的應用場景 20
1.5.1 超短期部署運行 20
1.5.2 節約遷移時間 21
1.6 本章小結 21
第2章 鏡像與倉庫 22
2.1 鏡像的概念 22
2.1.1 聯合文件系統 22
2.1.2 Docker中的鏡像 23
2.1.3 鏡像的分層結構 24
2.1.4 鏡像的寫時複製 25
2.2 使用和管理鏡像 26
2.2.1 獲取鏡像 26
2.2.2 列出鏡像 28
2.2.3 得到鏡像的詳細信息 28
2.2.4 刪除鏡像 31
2.2.5 鏡像的遷移 32
2.3 Docker Hub 33
2.3.1 鏡像倉庫 33
2.3.2 Docker Hub 34
2.3.3 註冊Docker Hub帳號 35
2.3.4 搜索鏡像 36
2.3.5 共享自動構建鏡像 38
2.4 搭建私有倉庫 40
2.4.1 鏡像分發服務 40
2.4.2 Docker Registry HTTP API 41
2.4.3 部署私有倉庫 42
2.5 本章小結 44
第3章 管理和使用容器 45
3.1 管理容器 45
3.1.1 建立容器 45
3.1.2 容器的啓動過程 48
3.1.3 列出容器 49
3.1.4 容器的命名 51
3.1.5 啓動和中止 52
3.1.6 暫停和恢復 53
3.1.7 重啓容器 54
3.1.8 刪除容器 55
3.2 鏈接到容器 55
3.2.1 查看進程信息 56
3.2.2 查看容器信息 56
3.2.3 容器日誌 62
3.2.4 銜接到容器 63
3.2.5 在容器中執行命令 64
3.3 容器的保存與遷移 65
3.3.1 提交容器更改 65
3.3.2 容器的導入/導出 68
3.4 本章小結 70
第4章 數據卷與網絡 71
4.1 數據卷 71
4.1.1 關於數據卷 71
4.1.2 數據卷的特色 72
4.1.3 建立數據卷 73
4.1.4 掛載數據卷 74
4.1.5 刪除數據卷 76
4.2 數據卷容器 77
4.2.1 關於數據卷容器 77
4.2.2 建立數據卷容器 78
4.2.3 鏈接數據卷容器 79
4.2.4 數據卷的遷移 80
4.3 網絡基礎 82
4.3.1 網絡簡介 82
4.3.2 查看網絡配置 83
4.4 網絡訪問 85
4.4.1 宿主機端口映射 85
4.4.2 容器鏈接 87
4.5 本章小結 90
第5章 製做鏡像 91
5.1 瞭解Dockerfile 91
5.1.1 Dockerfile簡介 92
5.1.2 使用Dockerfile建立鏡像 94
5.2 基礎指令 96
5.2.1 FROM 97
5.2.2 MAINTAINER 97
5.3 控制指令 97
5.3.1 RUN 97
5.3.2 WORKDIR 99
5.3.3 ONBUILD 99
5.4 引入指令 100
5.4.1 ADD 100
5.4.2 COPY 102
5.5 執行指令 102
5.5.1 CMD 102
5.5.2 ENTRYPOINT 104
5.6 配置指令 107
5.6.1 EXPOSE 108
5.6.2 ENV 108
5.6.3 LABEL 109
5.6.4 USER 110
5.6.5 ARG 111
5.6.6 STOPSIGNAL 112
5.6.7 SHELL 113
5.7 特殊用法 113
5.7.1 環境變量 113
5.7.2 指令解析 114
5.7.3 忽略文件 116
5.8 本章小結 117
第二部分 實踐篇
第6章 SSH服務 118
6.1 在Docker中使用SSH 118
6.1.1 SSH簡介 119
6.1.2 SSH使用方法簡介 119
6.1.3 數據卷管理容器 121
6.1.4 使用SSH服務容器 122
6.2 構建SSH服務鏡像 124
6.2.1 構建方式比較 124
6.2.2 經過提交構建 125
6.2.3 使用Dockerfile構建 127
6.3 本章小結 131
第7章 Web服務器 132
7.1 Web服務簡介 132
7.1.1 萬維網與網站 132
7.1.2 Web服務 133
7.1.3 Web服務程序 135
7.2 Apache 135
7.2.1 Apache簡介 135
7.2.2 安裝Apache 136
7.2.3 構建Apache鏡像 139
7.2.4 測試Apache容器 142
7.3 Nginx 143
7.3.1 關於Nginx 143
7.3.2 安裝Nginx 144
7.3.3 構建Nginx鏡像 146
7.3.4 測試Nginx鏡像 148
7.4 Tomcat 148
7.4.1 Tomcat簡介 149
7.4.2 安裝Tomcat 149
7.4.3 構建Tomcat鏡像 152
7.5 本章小結 153
第8章 數據庫程序 155
8.1 MySQL 155
8.1.1 MySQL簡介 156
8.1.2 安裝MySQL 156
8.1.3 構建MySQL鏡像 162
8.1.4 測試MySQL容器 164
8.2 MongoDB 166
8.2.1 MongoDB簡介 166
8.2.2 安裝MongoDB 167
8.2.3 構建MongoDB鏡像 171
8.2.4 測試MongoDB容器 173
8.3 本章小結 176
第9章 緩存工具 177
9.1 Memcached 178
9.1.1 Memcached簡介 178
9.1.2 安裝Memcached 179
9.1.3 構建Memcached鏡像 184
9.1.4 測試Memcached容器 186
9.2 Redis 188
9.2.1 Redis簡介 188
9.2.2 安裝Redis 188
9.2.3 構建Redis鏡像 193
9.2.4 測試Redis容器 195
9.3 本章小結 196
第10章 動態處理程序 197
10.1 Java 197
10.1.1 Java簡介 198
10.1.2 安裝Java 198
10.1.3 構建Java鏡像 204
10.1.4 測試Java容器 206
10.2 PHP 207
10.2.1 PHP簡介 207
10.2.2 安裝PHP 208
10.2.3 構建PHP鏡像 214
10.2.4 測試PHP容器 216
10.3 Python 217
10.3.1 Python簡介 217
10.3.2 安裝Python 218
10.3.3 構建Python鏡像 223
10.3.4 測試Python容器 224
10.4 Node.js 225
10.4.1 Node.js簡介 225
10.4.2 安裝Node.js 226
10.4.3 構建Node.js鏡像 228
10.4.4 測試Node.js容器 230
10.5 本章小結 231
第11章 綜合演練 232
11.1 演練目標 232
11.1.1 目標概述 232
11.1.2 代碼編寫 233
11.2 環境搭建 237
11.2.1 準備鏡像 237
11.2.2 程序配置 239
11.3 項目運行 248
11.3.1 啓動容器 248
11.3.2 測試項目 249
11.4 本章小結 253
第三部分 提升篇
第12章 網絡進階 254
12.1 網絡實現 254
12.1.1 容器網絡基礎 255
12.1.2 網絡模型 257
12.2 Docker中的網絡 258
12.2.1 默認網絡 258
12.2.2 自定義網絡 261
12.2.3 容器與外部通訊 262
12.2.4 容器間通訊 264
12.3 網絡實踐 265
12.3.1 管理容器網絡 265
12.3.2 容器鏈接網絡 267
12.3.3 配置docker0網橋 269
12.3.4 自定義網橋 271
12.3.5 配置DNS 271
12.3.6 使用IPv6 273
12.4 本章小結 274
第13章 安全加固 275
13.1 深刻理解Docker安全 275
13.1.1 命名空間隔離 276
13.1.2 資源控制組 277
13.1.3 內核能力機制 277
13.2 資源使用限制 278
13.2.1 經過控制組限制 278
13.2.2 經過ulimit限制 280
13.2.3 網絡訪問限制 280
13.3 校驗與監控 281
13.3.1 鏡像簽名 281
13.3.2 運行狀態監控 283
13.4 聯級防禦 284
13.4.1 組合虛擬化 284
13.4.2 文件系統安全 284
13.5 內核安全技術 285
13.5.1 Capability 286
13.5.2 SELinux 287
13.5.3 AppArmor 288
13.6 本章小結 289
第14章 Docker API 290
14.1 關於Docker API 290
14.1.1 通用操做接口 290
14.1.2 關於RESTful 291
14.1.3 Docker API的優點 292
14.1.4 Docker API的分類 293
14.2 使用Docker Remote API 293
14.2.1 關於Docker Remote API 294
14.2.2 Docker Remote API的版本 299
14.2.3 經過Remote API列出容器 300
14.2.4 經過Remote API列出鏡像 302
14.3 使用Docker Registry API 303
14.3.1 關於Docker Registry API 304
14.3.2 Docker Registry API的主要功能 304
14.3.3 Docker Registry API的版本 305
14.3.4 經過Registry API拉取鏡像 306
14.3.5 經過Registry API推送鏡像 307
14.4 本章小結 309
第15章 管理工具 310
15.1 Docker Compose 310
15.1.1 Docker Compose簡介 311
15.1.2 安裝Docker Compose 313
15.1.3 Docker Compose配置文件 314
15.1.4 經常使用的Docker Compose命令 315
15.2 Docker Machine 318
15.2.1 Docker Machine簡介 318
15.2.2 安裝Docker Machine 320
15.2.3 Docker Machine常見命令 321
15.3 Docker Swarm 322
15.3.1 Docker Swarm簡介 322
15.3.2 Docker Swarm結構 323
15.3.3 使用Docker Swarm 323
15.3.4 Docker Swarm常見命令 325
15.4 本章小結 327
第16章 Docker的技術架構 328
16.1 命名空間 328
16.1.1 關於Linux命名空間 328
16.1.2 命名空間的系統調用 329
16.1.3 命名空間的分類 330
16.2 控制組 332
16.2.1 關於Linux控制組 332
16.2.2 Cgroups的組成 333
16.2.3 容器與控制組 334
16.3 聯合文件系統 336
16.3.1 關於UFS 336
16.3.2 Docker中的UFS 337
16.4 Docker Engine架構 338
16.4.1 Docker Engine的組成結構 338
16.4.2 Docker Daemon 339
16.4.3 Docker CLI 342
16.5 本章小結 344數據庫
前 言
在快速發展的互聯網領域,總在涌現引領潮流的新技術,最近幾年,Docker就成爲了這些技術中的一員。Docker做爲近幾年備受關注的程序部署方案,實現了程序的快速部署,爲分佈式等場景下的部署提供了有力的幫助。在雲計算以及虛擬化領域,Docker這個誕生不過數年的項目,只能算是新生兒,在功能完整性和穩定性方面,都不及其餘已經經受過歷史考驗的項目。但爲什麼僅僅幾年的風光,就讓Docker成爲了業界公認的優秀項目,關鍵在於Docker真正解決了分佈式部署效率這一行業痛點。Docker所提供的嶄新分佈式部署方案,不但像其餘虛擬化方案同樣,大幅減低了部署過程當中適配環境所帶來的額外工做,還充分弱化了虛擬化程序在虛擬化過程當中對性能的影響,使得在Docker中運行的程序的效率可以與直接運行在真實操做系統中的程序的效率相媲美。
不過Docker可以受到各界追捧的緣由並不只僅在於其在部署領域帶來的變化,其受到讚譽的緣由也在於它可以打通開發、測試、運維等多個環節,爲整個項目的開發流程營造統一的運行環境。因爲Docker提供了很是輕量級的容器虛擬化方案,使得Docker可以以很是低的消耗運行在系統中。這也就使得咱們不只可使用Docker在服務器中部署程序,也能在開發過程當中利用Docker在本地系統中搭建程序運行環境。
因爲Docker誕生不過數年,而且發展和迭代的速度很是快,因此其相關的教學資料比較匱乏,特別是中文文獻,相對其餘發展數十年的技術來講,簡直是上少之又少。本書正是創建在幫助但願瞭解和使用Docker的讀者的基礎上,收集了與Docker相關的資料,特別是缺乏中文翻譯的外文資料,集合整理成文,並與相關的案例、實踐組合搭配,給讀者提供瞭解Docker的捷徑。
本書由淺及深,從不一樣維度解讀和展示了Docker的概念、原理、使用方法、實踐案例以及周邊工具,不一樣崗位的開發者,或者是對Docker有着不一樣認知的開發者都能從中獲得想要的知識。本書雖不能全面地闡述Docker的全部功能與特性,但系統性的知識梳理、理論與實踐相結合的方式,都爲讀者瞭解和使用Docker提供了有效的幫助和指導。不論你將本書看做Docker的入門教材,仍是當成提高Docker知識儲備的工具手冊,都能爲你帶來不錯的效果。
因受做者水平和成書時間所限,本書不免存有疏漏和不當之處,敬請指正。
本書特點
由淺及深,適合不一樣知識層面的讀者
本書的內容涵蓋了Docker的基礎概念和常規使用方法,常見服務器程序在Docker中搭建和使用的實踐,安全策略和輔助工具等知識概述,由淺入深,按部就班,爲不一樣的讀者準備了不一樣的知識盛宴。對於Docker中的重點知識,必備、經常使用的操做方法和策略,本書不惜筆墨,進行了充分甚至反覆的闡述和演示。而可供延展的知識點,雖然因爲篇幅限制不能詳細講解,也都一一列出,供你們自行查閱,進行延伸閱讀。本書的章節脈絡清晰明確,使讀者能循序漸近地掌握Docker知識,是一本不可多得的Docker資料手冊和教材。
通俗易懂,理論與實踐結合
本書的行文中穿插了不少對Docker使用方法的展現,並提供了專門的章節演示Docker的實踐之道。經過這些操做示例的引導,避免了讀者進行紙上談兵式的閱讀,也使得章節之間的知識能夠由這些演示串聯起來,可以減小知識脫節的現象發生。而對於理論知識的說明,本書毫不是生搬硬套地進行教條式的列舉,也沒有以堆砌專有詞彙的方式簡單歸納,而是經過通俗語言將晦澀的知識以生活化的方式展示出來,讓讀者,特別是Docker初學者更容易地理解Docker。
跟進時代,採起最新資料編寫
Docker是一門新興技術,也是一門快速發展的技術,僅僅誕生數年就已經迭代了數十個版本。因爲Docker在迭代的過程當中不斷地優化、完善、補充,因此不一樣版本之間所具備的功能和使用方法都存在很大的區別,因此學習Docker必定要使用新鮮的一手資料。本書在編寫的過程當中,收集和參考了大量最新的材料,特別是從Docker官方文檔中提取了不少Docker最新的特性和使用方法,也從Docker的技術說明和源代碼中總結了Docker的架構邏輯。因爲本書是在對這些嶄新的材料的收集彙總以及精心梳理的基礎上完成的,因此本書能夠爲你們學習Docker提供強有力的支持。
本書的內容及體系結構
本書主要分爲三部分,分別從基礎、實踐和提升的角度向讀者介紹Docker的知識概念和使用方法。
第一部分爲基礎篇,包含了第1~5章的內容。在基礎篇中,咱們會講解了Docker的歷史和基本概念,介紹最多見且最基礎的Docker使用方法。
第1章 初始Docker
本章從虛擬化、容器技術的發展歷史與現狀出發,逐步引入和展現Docker這項全新的虛擬化解決方案。除了向讀者介紹Docker的組成結構以及發展歷史,咱們還將比較Docker與以往的部署及虛擬化方案的不一樣,分析使用Docker的優點所在,並介紹適合使用Docker的常見場景。另外,咱們還將教會你們如何在經常使用的幾種操做系統中安裝Docker。
第2章 鏡像與倉庫
本章由Docker鏡像的概念出發,講解Docker鏡像的結構特色與組成形式,比較Docker鏡像與其餘虛擬化方案中鏡像的異同,同時將經常使用的Docker鏡像管理方法介紹給讀者。除此以外,咱們還將介紹如何使用Docker特有的鏡像倉庫存儲、共享和遷移鏡像,以及Docker官方所提供的Docker Hub鏡像倉庫的使用方法。
第3章 管理和使用容器
本章主要介紹了Docker的核心,也就是容器技術中容器的實現。本章將逐一談及新增、運行、中止、刪除等經常使用的容器操做方法,也將向讀者展現如何查看容器的運行狀態以及如何進行到容器中操做。另外,本章也會說起如何進行容器的遷移。
第4章 數據卷與網絡
本章從容器的網絡數據和文件數據的交換出發,引出和介紹了Docker提供的容器網絡和數據卷這兩個模塊。在有關數據卷的部分,讀者能夠了解到數據卷的基本概念,以及如何建立或者從宿主機中掛載數據卷。在有關容器網絡的部分,讀者能夠了解到容器網絡的基本知識,以及如何讓外部網絡訪問到容器或者實現容器間的網絡通訊。
第5章 製做鏡像
本章主要介紹如何根據須要,經過編寫Dockerfile構建Docker鏡像。在展現瞭如何將程序打包到鏡像中以後,咱們還對Dockerfile的寫法以及可能使用到的指令進行了全方位的講解。
第二部分是實踐篇,由第6~11章的內容組成。在實踐篇中,咱們將以基礎篇中所學到的知識,分別對常見的服務器程序在Docker中的使用進行實踐。
第6章 SSH服務
本章主要展現了SSH服務在Docker容器中運行的方式,並介紹了SSH服務在Docker中所扮演的角色,還帶領讀者進行了在Docker容器中搭建SSH服務,以及構建包含SSH服務的Docker鏡像的實踐。
第7章 Web服務器
本章首先簡單介紹了Web服務和可以提供Web服務的常見程序,也分別在Docker容器中搭建了Apache、Nginx和Tomcat這幾個常見的Web服務程序,還將經過編寫Dockerfile的方式將這幾款Web服務程序封裝成Docker鏡像。
第8章 數據庫程序
本章對目前最受歡迎的開源關係型數據庫MySQL和非關係型數據庫MongoDB作簡單介紹,展現如何在Docker容器中使用它們,也會說起如何讓這些數據庫向外提供服務。咱們還將把這幾款數據庫軟件經過Dockerfile構建成鏡像,方便在Docker中使用。
第9章 緩存工具
本章首先說起在服務器中使用緩存工具的意義,並介紹Memcached和Redis這兩款經常使用做處理緩存的工具。在瞭解Memcached和Redis的使用以後,咱們還會將它們部署到Docker容器之中,並經過搭建程序的實踐,將這兩款程序封裝到Docker鏡像裏。
第10章 動態處理程序
本章主要介紹了Java、PHP、Python和Node.js這幾款經常使用的處理Web請求的程序,並講解了如何在Docker容器中安裝或搭建這些程序。在瞭解了這些程序在容器中安裝或搭建的過程以後,咱們還將經過Dockerfile將這幾款軟件封裝成獨立的Docker鏡像。
第11章 綜合演練
本章在以前所進行的實踐的基礎上,將實踐過的Web服務程序、數據庫程序、緩存工具和動態處理程序,經過運行它們的Docker容器進行組合,講解如何經過Docker構建和運行一套完整的Web服務體系。
第三部分是提升篇,彙總在第12~16章的內容中。在提升篇中,咱們主要針對一些Docker更深刻的使用方法和概念、原理進行學習和探究。
第12章 網絡進階
本章在以前所介紹的Docker網絡基礎概念和使用方法的基礎之上,進一步深刻地介紹了Docker網絡的實現方法,闡述Docker網絡的底層架構以及容器網絡模型的概念,對用於管理容器網絡的命令,也作了專門介紹。另外,本章還向讀者介紹瞭如何進行深度定製的Docker容器網絡配置和控制。
第13章 安全加固
本章從Docker的底層隔離機制出發,闡述了隔離機制是如何保證容器中程序互不干擾的,並由此展開,談到了控制容器使用資源的方式和原理。咱們還介紹瞭如何經過內核的安全機制及相關安全防禦程序,來控制程序權限以及防範可能發生的攻擊與破壞。另外,咱們還將展現經常使用於Docker的安全策略和防禦方法。
第14章 Docker API
本章主要講解Docker中最基礎也最重要的與外界溝通的方式,即Docker API。在對Docker API的實現方式與分類進行介紹以後,咱們還將抽取最經常使用的用於管理Docker核心模塊的Docker Remote API,以及用於與遠程鏡像倉庫鏡像交互的Docker Registry API進行專門地講解和示範。
第15章 管理工具
本章主要展現了Docker Compose、Docker Machine、Docker S緩存
本篇文章由一文多發平臺ArtiPub自動發佈安全