編輯推薦
適讀人群 :IT 從業者 容器技術是繼大數據和雲計算之後又一炙手可熱的技術,而且未來相當一段時間內都會非常流行
對 IT 從業者來說,掌握容器技術是市場的需要,也是提升自我價值的重要途徑
每一輪新技術的興起,無論對公司還是個人既是機會也是挑戰
內容簡介
Docker和容器技術是當下*火的IT技術,無論是互聯網還是傳統企業都在研究和實踐如何用容器構建自己的 IT 基礎設施。學習《每天5分鍾玩轉Docker容器技術》能夠讓讀者少走彎路,係統地學習、掌握和實踐 Docker 和容器技術。
《每天5分鍾玩轉Docker容器技術》共分為三部分。第一部分介紹容器技術生態環境。第二部分是容器核心知識,包括架構、鏡像、容器、網絡和存儲。第三部分是容器進階知識,包括多主機管理、跨主機網絡方案、監控、日誌管理和數據管理。讀者在學習的過程中,可以跟著教程進行操作,在實踐中掌握 Docker 容器技術的核心技能。在之後的工作中,可以將本教程作為參考書,按需查找相關知識點。
《每天5分鍾玩轉Docker容器技術》主要麵嚮微服務軟件開發人員,以及 IT 實施和運維工程師等相關人員,也適閤高等院校和培訓學校相關專業的師生教學參考。
作者簡介
CloudMan,十多年 IT 從業經驗,就職於國際知名 IT 企業,從事 IT 基礎設施實施服務,項目涉及服務器、存儲、網絡、虛擬化、雲技術等各個方麵。CloudMan 對新技術長期保持濃厚的興趣和學習熱情,十幾年來一直專注 IT 技術領域的鑽研與實踐。
精彩書評
NULL
目錄
目 錄
第一篇 啓 程
第1章 鳥瞰容器生態係統 3
1.1 容器生態係統 3
1.2 本教程覆蓋的知識範圍 10
1.3 準備實驗環境 10
1.3.1 環境選擇 10
1.3.2 安裝 Docker 10
1.4 運行第一個容器 11
1.5 小結 12
第二篇 容器技術
第2章 容器核心知識概述 15
2.1 What —— 什麼是容器 15
2.2 Why —— 為什麼需要容器 16
2.2.1 容器解決的問題 16
2.2.2 Docker 的特性 20
2.2.3 容器的優勢 20
2.3 How —— 容器是如何工作的 21
2.4 小結 24
第3章 Docker 鏡像 26
3.1 鏡像的內部結構 26
3.1.1 hello-world —— 最小的鏡像 26
3.1.2 base 鏡像 27
3.1.3 鏡像的分層結構 30
3.2 構建鏡像 32
3.2.1 docker commit 32
3.2.2 Dockerfile 34
3.3 RUN vs CMD vs ENTRYPOINT 42
3.3.1 Shell 和 Exec 格式 42
3.3.2 RUN 44
3.3.3 CMD 44
3.3.4 ENTRYPOINT 45
3.3.5 最佳實踐 46
3.4 分發鏡像 46
3.4.1 為鏡像命名 46
3.4.2 使用公共 Registry 49
3.4.3 搭建本地 Registry 51
3.5 小結 52
第4章 Docker 容器 55
4.1 運行容器 55
4.1.1 讓容器長期運行 56
4.1.2 兩種進入容器的方法 57
4.1.3 運行容器的最佳實踐 59
4.1.4 容器運行小結 59
4.2 stop/start/restart 容器 60
4.3 pause / unpause 容器 61
4.4 刪除容器 61
4.5 State Machine 62
4.6 資源限製 65
4.6.1 內存限額 65
4.6.2 CPU 限額 66
4.6.3 Block IO 帶寬限額 68
4.7 實現容器的底層技術 69
4.7.1 cgroup 70
4.7.2 namespace 70
4.8 小結 72
第5章 Docker 網絡 74
5.1 none 網絡 74
5.2 host 網絡 75
5.3 bridge 網絡 76
5.4 user-defined 網絡 78
5.5 容器間通信 84
5.5.1 IP通信 84
5.5.2 Docker DNS Server 85
5.5.3 joined 容器 85
5.6 將容器與外部世界連接 87
5.6.1 容器訪問外部世界 87
5.6.2 外部世界訪問容器 90
5.7 小結 91
第6章 Docker 存儲 92
6.1 storage driver 92
6.2 Data Volume 94
6.2.1 bind mount 94
6.2.2 docker managed volume 96
6.3 數據共享 99
6.3.1 容器與 host 共享數據 99
6.3.2 容器之間共享數據 99
6.4 volume container 100
6.5 data-packed volume container 102
6.6 Data Volume 生命周期管理 103
6.6.1 備份 104
6.6.2 恢復 104
6.6.3 遷移 104
6.6.4 銷毀 104
6.7 小結 105
第三篇 容器進階知識
第7章 多主機管理 109
7.1 實驗環境描述 110
7.2 安裝 Docker Machine 111
7.3 創建 Machine 112
7.4 管理Machine 114
第8章 容器網絡 117
8.1 libnetwork & CNM 117
8.2 overlay 119
8.2.1 實驗環境描述 120
8.2.2 創建overlay網絡 121
8.2.3 在overlay中運行容器 122
8.2.4 overlay 網絡連通性 124
8.2.5 overlay 網絡隔離 126
8.2.6 overlay IPAM 127
8.3 macvlan 127
8.3.1 準備實驗環境 127
8.3.2 創建 macvlan 網絡 128
8.3.3 macvlan 網絡結構分析 130
8.3.4 用 sub-interface 實現多 macvlan 網絡 131
8.3.5 macvlan 網絡間的隔離和連通 132
8.4 flannel 136
8.4.1 實驗環境描述 137
8.4.2 安裝配置 etcd 137
8.4.3 build flannel 138
8.4.4 將 flannel 網絡的配置信息保存到 etcd 139
8.4.5 啓動 flannel 139
8.4.6 配置 Docker 連接 flannel 141
8.4.7 將容器連接到 flannel 網絡 143
8.4.8 flannel 網絡連通性 144
8.4.9 flannel 網絡隔離 146
8.4.10 flannel 與外網連通性 146
8.4.11 host-gw backend 146
8.5 weave 148
8.5.1 實驗環境描述 148
8.5.2 安裝部署 weave 149
8.5.3 在host1中啓動weave 149
8.5.4 在 host1 中啓動容器 150
8.5.5 在host2中啓動weave並運行容器 153
8.5.6 weave 網絡連通性 154
8.5.7 weave 網絡隔離 155
8.5.8 weave 與外網的連通性 156
8.5.9 IPAM 158
8.6 calico 158
8.6.1 實驗環境描述 159
8.6.2 啓動 etcd 159
8.6.3 部署 calico 160
8.6.4 創建calico網絡 161
8.6.5 在 calico 中運行容器 161
8.6.6 calico 默認連通性 164
8.6.7 calico policy 167
8.6.8 calico IPAM 169
8.7 比較各種網絡方案 170
8.7.1 網絡模型 171
8.7.2 Distributed Store 171
8.7.3 IPAM 171
8.7.4 連通與隔離 172
8.7.5 性能 172
第9章 容器監控 173
9.1 Docker自帶的監控子命令 173
9.1.1 ps 173
9.1.2 top 174
9.1.3 stats 175
9.2 sysdig 175
9.3 Weave Scope 179
9.3.1 安裝 179
9.3.2 容器監控 181
9.3.3 監控 host 184
9.3.4 多主機監控 186
9.4 cAdvisor 189
9.4.1 監控 Docker Host 189
9.4.2 監控容器 191
9.5 Prometheus 194
9.5.1 架構 194
9.5.2 多維數據模型 195
9.5.3 實踐 196
9.6 比較不同的監控工具 204
9.7 幾點建議 205
第10章 日誌管理 207
10.1 Docker logs 207
10.2 Docker logging driver 209
10.3 ELK 211
10.3.1 日誌處理流程 211
10.3.2 安裝 ELK 套件 212
10.3.3 Filebeat 214
10.3.4 管理日誌 216
10.4 Fluentd 220
10.4.1 安裝 Fluentd 221
10.4.2 重新配置 Filebeat 221
10.4.3 監控容器日誌 221
10.5 Graylog 222
10.5.1 Graylog 架構 222
10.5.2 部署 Graylog 223
10.5.3 配置 Graylog 225
10.5.4 監控容器日誌 227
10.6 小結 229
第11章 數據管理 230
11.1 從一個例子開始 230
11.2 實踐 Rex-Ray driver 232
11.2.1 安裝 Rex-Ray 232
11.2.2 配置 VirtualBox 234
11.2.3 創建Rex-Ray volume 236
11.2.4 使用 Rex-Ray volume 237
寫在最後 243
精彩書摘
第一篇 啓 程
對於像容器這類平颱級彆的技術,通常涉及的知識範圍會很廣,相關的軟件,解決方案也會很多,初學者往往容易迷失。
那怎麼辦呢?
我們可以從生活經驗中尋找答案。
當我們去陌生城市旅遊想瞭解一下這個城市,一般我們會怎麼做?
我想大部分人應該會打開手機看一下這個城市的地圖:
(1)城市大概的位置和地理形狀是什麼?
(2)都由哪幾個區或縣組成?
(3)主要的交通乾道是哪幾條?
同樣的道理,學習容器技術我們可以先從天上鳥瞰一下:
(1)容器生態係統包含哪些不同層次的技術?
(2)不同技術之間是什麼關係?
(3)哪些是核心技術?哪些是輔助技術?
首先得對容器技術有個整體認識,之後我們的學習纔能夠有的放矢,纔能夠分清輕重緩急,做到心中有數,這樣就不容易迷失瞭。
接下來我會根據自己的經驗幫大傢規劃一條學習路綫,一起探索容器生態係統。
學習新技術得到及時反饋是非常重要的,所以我們馬上會搭建實驗環境,並運行第一個容器,感受什麼是容器。
韆裏之行始於足下,讓我們從瞭解生態係統開始吧。
第 1 章
? 鳥瞰容器生態係統 ?
1.1 容器生態係統
一談到容器,大傢都會想到 Docker。
Docker 現在幾乎是容器的代名詞。確實,是 Docker 將容器技術發揚光大。同時,大傢也需要知道圍繞 Docker 還有一個生態係統。Docker 是這個生態係統的基石,但完善的生態係統纔是保障 Docker 以及容器技術能夠真正健康發展的決定因素。
大緻來看,容器生態係統包含核心技術、平颱技術和支持技術,如圖1-1所示。下麵分彆介紹。
圖1-1
1. 容器核心技術
容器核心技術是指能夠讓 Container 在 host 上運行起來的那些技術,如圖1-2所示。
圖1-2
從上圖可以看齣,這些技術包括容器規範、容器 runtime、容器管理工具、容器定義工具、Registry 以及容器 OS,下麵分彆介紹。
(1)容器規範
容器不光是 Docker,還有其他容器,比如 CoreOS 的 rkt。為瞭保證容器生態的健康發展,保證不同容器之間能夠兼容,包含 Docker、CoreOS、Google在內的若乾公司共同成立瞭一個叫 Open Container Initiative(OCI) 的組織,其目的是製定開放的容器規範。
目前 OCI 發布瞭兩個規範:runtime spec 和 image format spec。
有瞭這兩個規範,不同組織和廠商開發的容器能夠在不同的 runtime 上運行。這樣就保證瞭容器的可移植性和互操作性,如圖1-3所示。
圖1-3
(2)容器 runtime
runtime 是容器真正運行的地方。runtime 需要跟操作係統 kernel 緊密協作,為容器提供運行環境。
如果大傢用過 Java,可以這樣來理解 runtime 與容器的關係:
Java 程序就好比是容器,JVM 則好比是 runtime,JVM為Java程序提供運行環境。同樣的道理,容器隻有在 runtime 中纔能運行。
lxc、runc 和 rkt 是目前主流的三種容器 runtime,如圖1-4所示。
圖1-4
lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 作為 runtime。
runc 是 Docker 自己開發的容器 runtime,符閤 oci 規範,也是現在 Docker 的默認 runtime。
rkt 是 CoreOS 開發的容器 runtime,符閤 OCI 規範,因而能夠運行 Docker 的容器。
(3)容器管理工具
光有runtime還不夠,用戶得有工具來管理容器。容器管理工具對內與 runtime 交互,對外為用戶提供interface,比如CLI。這就好比除瞭JVM,還得提供Java命令讓用戶能夠啓停應用。容器管理工具如圖1-5所示。
前言/序言
前 言
寫在最前麵
《每天5分鍾玩轉Docker容器技術》是一個有關容器技術的教程,有下麵兩個特點:
1. 係統講解當前最流行的容器技術
從容器的整個生態環境到各種具體的技術,從整體到細節逐一討論。
2. 重實踐並兼顧理論
從實際操作的角度帶領大傢學習容器技術。
為什麼要寫這個
簡單迴答是:容器技術非常熱門,但門檻高。
容器技術是繼大數據和雲計算之後又一炙手可熱的技術,而且未來相當一段時間內都會非常流行。
對 IT 行業來說,這是一項非常有價值的技術。而對 IT 從業者來說,掌握容器技術是市場的需要,也是提升自我價值的重要途徑。
拿我自己的工作經曆來說,畢業後的頭幾年是做 J2EE 應用開發。後來到一傢大型IT公司,公司的産品從中間件到操作係統、從服務器到存儲、從虛擬化到雲計算都有涉及。
我所在的部門是專門做 IT 基礎設施實施服務的,最開始是做傳統的 IT 項目,包括服務器配置,雙機 HA 等。隨著虛擬化技術成熟,工作上也開始涉及各種虛擬化技術的規劃和實施,包括 VMWare、KVM、PowerVM等。後來雲計算興起,在公司業務和個人興趣的驅動下,開始學習和實踐 OpenStack,在這個過程中寫瞭《每天5分鍾玩轉OpenStack》教程並得到大傢的認可。
現在以 Docker 為代錶的容器技術來瞭,而且關注度越來越高,這一點可以從 Google Trend 中 Docker 的搜索上升趨勢中清楚看到,如下圖所示(圖中麯綫上揚最高的為Docker)。
每一輪新技術的興起,無論對公司還是個人既是機會也是挑戰。
我個人的看法是:如果某項新技術未來將成為主流,就應該及早盡快掌握。 因為:
1. 新技術意味著新的市場和新的需求
初期掌握這種技術的人不會很多,而市場需求會越來越大,因而會形成供不應求的賣方市場,物以稀為貴,這對技術人員將是一個難得的價值提升機會。
2. 學習新技術需要時間和精力,早起步早成材
機會講過瞭,咱們再來看看挑戰。
新技術往往意味著技術上的突破和創新,會有不少新的概念和方法,而且從大數據、雲計算和容器技術來看,這些新技術都是平颱級彆,覆蓋的技術範圍非常廣,包括計算、網絡、存儲、高可用、監控、安全等多個方麵,要掌握這些新技術對 IT 老兵尚有不小睏難,更彆說新人瞭。
由於對技術一直保持著很高的熱誠和執著,在掌握瞭 OpenStack 相關 IaaS 技術後,我便開始調研 PaaS 技術棧。正好這時 Docker 也越來越流行,自然而然便開始瞭容器相關技術的學習研究和實踐。
學
每天5分鍾玩轉Docker容器技術 下載 mobi epub pdf txt 電子書 格式