天天看點

Docker技術入門與實戰(第2版)導讀

<b>前言</b>

在一台伺服器上同時運作一百個虛拟機,肯定會被認為是癡人說夢。而在一台伺服器上同時運作一千個docker容器,這已經成為現實。在計算機技術高速發展的今天,昔日的天方夜譚正在一個個變成現實。

多年的研發和運維(devops)經曆中,筆者時常會碰到這樣一個困境:使用者的需求越來越多樣,系統的規模越來越龐大,運作的軟體越來越複雜,環境配置問題所造成的麻煩層出不窮……為了解決這些問題,開源社群推出過不少優秀的工具。這些方案雖然在某些程度上确能解決部分“燃眉之急”,但是始終沒有一種方案能帶來“一勞永逸”的效果。

讓作為企業最核心資源的工程師們花費大量的時間,去解決各種環境和配置引發的 bug,這真的正常嗎?

回顧計算機的發展曆程,最初,程式設計人員需要直接操作各種枯燥的機器指令,程式設計效率之低可想而知。進階語言的誕生,将機器指令的具體實作成功抽象出來,從此揭開了計算機程式設計效率突飛猛進的大時代。那麼,為什麼不能把類似的理念(抽象與分層)也引入到現代的研發和運維領域呢?

docker無疑在這一方向上邁出了具有革新意義的一步。筆者在剛接觸docker時,就為它所能帶來的靈活工作流程而深深吸引,也為它能充分挖掘雲計算資源的效能而興奮不已。我們深信,docker的出現,必将給devops技術,甚至整個資訊技術産業的發展帶來深遠的影響。

筆者曾嘗試編寫了介紹docker技術的中文開源文檔。短短一個月的時間,竟收到了來自全球各個地區超過20萬次的閱讀量和全五星的好評。這讓我們看到國内技術界對于新興開源技術的敏銳嗅覺和迫切需求,同時也倍感壓力,生怕其中有不妥之處,影響了大家學習和推廣docker技術的熱情。在開源文檔撰寫過程中,我們一直在不斷思考,在生産實踐中到底怎麼用docker才是合理的?在“華章圖書”的幫助下,終于有了現在讀者手中的這本書。

與很多技術類書籍不同,本書中避免一上來就講述冗長的故事,而是試圖深入淺出、直奔主題,在最短時間内讓讀者了解和掌握最關鍵的技術點,并且配合實際操作案例和精煉的點評,給讀者提供真正可以上手的實戰指南。

本書在結構上分為三大部分。第一部分是docker技術的基礎知識介紹,這部分将讓讀者對docker技術能做什麼有個全局的認識;第二部分将具體講解各種典型場景的應用案例,供讀者體會docker在實際應用中的高效秘訣;第三部分将讨論一些偏技術環節的進階話題,試圖讓讀者了解docker在設計上的工程美學。最後的附錄歸納了應用docker的常見問題和一些常用的參考資料。讀者可根據自身需求選擇閱讀重點。全書主要由楊保華和戴王劍主筆,曹亞侖寫作了程式設計開發和實踐之道章節。

本書在寫作過程中參考了官方網站上的部分文檔,并得到了dockerpool技術社群網友們的積極回報和支援,在此一并感謝!

成稿之際,docker已經釋出了增強安全特性的1.3.2版本。衷心祝願docker及相關技術能夠快速成長和成熟,讓衆多it從業人員的工作和生活都更加健康、更加美好!

作者于2014年11月

<b>目  錄</b>

第1章 初識容器與docker  

<a href="https://yq.aliyun.com/articles/82419/" target="_blank">1.1 什麼是docker  </a>

<a href="https://yq.aliyun.com/articles/82426/" target="_blank">1.2 為什麼要使用docker  </a>

<a href="https://yq.aliyun.com/articles/82429/" target="_blank">1.3 docker與虛拟化  </a>

<a href="https://yq.aliyun.com/articles/82431/" target="_blank">1.4 本章小結  </a>

第2章 核心概念與安裝配置  

第3章 使用docker鏡像  

<a href="https://yq.aliyun.com/articles/82457/" target="_blank">3.1 擷取鏡像  </a>

<a href="https://yq.aliyun.com/articles/82483/" target="_blank">3.7 上傳鏡像  </a>

<a href="https://yq.aliyun.com/articles/82487/" target="_blank">3.8 本章小結  </a>

第4章 操作docker容器  34

4.1 建立容器  34

4.2 終止容器  39

4.3 進入容器  40

4.4 删除容器  42

4.5 導入和導出容器  42

4.6 本章小結  44

第5章 通路docker倉庫  45

5.1 docker hub公共鏡像市場  45

5.2 時速雲鏡像市場  47

5.3 搭建本地私有倉庫  48

5.4 本章小結  50

第6章 docker資料管理  51

6.1 資料卷  51

6.2 資料卷容器  52

6.3 利用資料卷容器來遷移資料  53

6.4 本章小結  54

第7章 端口映射與容器互聯  55

7.1 端口映射實作通路容器  55

7.2 互聯機制實作便捷互訪  57

7.3 本章小結  59

第8章 使用dockerfile建立鏡像  60

8.1 基本結構  60

8.2 指令說明  62

8.3 建立鏡像  67

8.4 使用.dockerignore檔案  67

8.5 最佳實踐  67

8.6 本章小結  68

第二部分 實戰案例

第9章 作業系統  71

9.1 busybox  71

9.2 alpine  72

9.3 debian/ubuntu  74

9.4 centos/fedora  76

9.5 本章小結  77

第10章 為鏡像添加ssh服務  78

10.1 基于commit指令建立  78

10.2 使用dockerfile建立  80

10.3 本章小結  82

第11章 web服務與應用  83

11.1 apache  83

11.2 nginx  87

11.3 tomcat  88

11.4 jetty  92

11.5 lamp  93

11.6 cms  94

11.6.1 wordpress  94

11.6.2 ghost  96

11.7 持續開發與管理  96

11.7.1 jenkins  97

11.7.2 gitlab  98

11.8 本章小結  99

第12章 資料庫應用  100

12.1 mysql  100

12.2 mongodb  102

12.2.1 使用官方鏡像  102

12.2.2 使用自定義dockerfile  104

12.3 redis  106

12.4 memcached  108

12.5 couchdb  108

12.6 cassandra  109

12.7 本章小結  110

第13章 分布式處理與大資料平台  111

13.1 rabbitmq  111

13.2 celery  113

13.3 hadoop  114

13.4 spark  115

13.4.1 使用官方鏡像  116

13.4.2 驗證  116

13.5 storm  117

13.6 elasticsearch  119

13.7 本章小結  120

第14章 程式設計開發  121

14.1 c/c++  121

14.1.1 gcc  121

14.1.2 llvm  122

14.1.3 clang  122

14.2 java  123

14.3 python  124

14.3.1 使用官方的python鏡像  124

14.3.2 使用pypy  124

14.4 javascript  125

14.5 go  127

14.5.1 搭建并運作go容器  127

14.5.2 beego  130

14.5.3 gogs:基于go的git服務  130

14.6 php  130

14.7 ruby  132

14.7.1 使用ruby官方鏡像  132

14.7.2 jruby  133

14.7.3 ruby on rails  134

14.8 perl  135

14.9 r  136

14.10 erlang  138

14.11 本章小結  140

第15章 容器與雲服務  141

15.1 公有雲容器服務  141

15.1.1 aws  141

15.1.2 google cloud platform  142

15.1.3 azure  143

15.1.4 騰訊雲  144

15.1.5 阿裡雲  144

15.1.6 華為雲  144

15.1.7 ucloud  145

15.2 容器雲服務  145

15.2.1 基本要素與關鍵特性  146

15.2.2 網易蜂巢  146

15.2.3 時速雲  147

15.2.4 daocloud  148

15.2.5 靈雀雲  148

15.2.6 數人雲  149

15.3 阿裡雲容器服務  150

15.4 時速雲容器平台  151

15.5 本章小結  153

第16章 容器實戰思考  154

16.1 docker為什麼會成功  154

16.2 研發人員該如何看容器  155

16.3 容器化開發模式  156

16.4 容器與生産環境  158

16.5 本章小結  160

第三部分 進階技能

第17章 docker核心實作技術  163

17.1 基本架構  163

17.2 命名空間  165

17.3 控制組  167

17.4 聯合檔案系統  169

17.5 linux網絡虛拟化  171

17.6 本章小結  174

第18章 配置私有倉庫  175

18.1 安裝docker registry  175

18.2 配置tls證書  177

18.3 管理通路權限  178

18.4 配置registry  181

18.4.1 示例配置  181

18.4.2 選項  183

18.5 批量管理鏡像  188

18.6 使用通知系統  190

18.6.1 相關配置  190

18.6.2 notif?ication的使用場景  192

18.7 本章小結  193

第19章 安全防護與配置  194

19.1 命名空間隔離的安全  194

19.2 控制組資源控制的安全  195

19.3 核心能力機制  195

19.4 docker服務端的防護  197

19.5 更多安全特性的使用  197

19.6 使用第三方檢測工具  198

19.6.1 docker bench  198

19.6.2 clair  199

19.7 本章小結  199

第20章 進階網絡功能  201

20.1 網絡啟動與配置參數  201

20.2 配置容器dns和主機名  203

20.3 容器通路控制  204

20.4 映射容器端口到宿主主機的實作  206

20.5 配置docker0網橋  207

20.6 自定義網橋  208

20.7 使用openvswitch網橋  209

20.8 建立一個點到點連接配接  211

20.9 本章小結  212

第21章 libnetwork插件化網絡功能  213

21.1 容器網絡模型  213

21.2 docker網絡相關指令  215

21.3 建構跨主機容器網絡  216

21.4 本章小結  219

第四部分 開源項目

第22章 etcd——高可用的鍵值資料庫  223

22.1 簡介  223

22.2 安裝和使用etcd  224

22.3 使用etcdctl用戶端  228

22.3.1 資料類操作  230

22.3.2 非資料類操作  233

22.4 etcd叢集管理  236

22.4.1 建構叢集  236

22.4.2 叢集參數配置  238

22.5 本章小結  240

第23章 docker三劍客之docker machine  241

23.1 簡介  241

23.2 安裝machine  241

23.3 使用machine  243

23.4 machine指令  244

23.5 本章小結  247

第24章 docker三劍客之docker compose  248

24.1 簡介  248

24.2 安裝與解除安裝  249

24.3 compose指令說明  252

24.4 compose環境變量  257

24.5 compose模闆檔案  257

24.6 compose應用案例一:web負載均衡  266

24.7 compose應用案例二:大資料spark叢集  271

24.8 本章小結  273

第25章 docker三劍客之docker swarm  274

25.1 簡介  274

25.2 安裝swarm  275

25.3 使用swarm  277

25.4 使用其他服務發現後端  281

25.5 swarm中的排程器  282

25.6 swarm中的過濾器  284

25.7 本章小結  286

第26章 mesos——優秀的叢集資源排程平台  287

26.1 簡介  287

26.2 mesos安裝與使用  288

26.3 原理與架構  296

26.3.1 架構  296

26.3.2 基本單元  297

26.3.3 排程  297

26.3.4 高可用性  298

26.4 mesos配置項解析  299

26.4.1 通用項  299

26.4.2 master專屬項  299

26.4.3 slave專屬項  301

26.5 日志與監控  304

26.6 常見應用架構  306

26.7 本章小結  307

第27章 kubernetes——生産級容器叢集平台  308

27.1 簡介  308

27.2 核心概念  309

27.2.1 叢集元件  311

27.2.2 資源抽象  312

27.2.3 輔助概念  315

27.3 快速體驗  318

27.4 安裝部署  322

27.5 重要元件  331

27.5.1 etcd  332

27.5.2 kube-apiserver  332

27.5.3 kube-scheduler  333

27.5.4 kube-controller-manager  333

27.5.5 kubelet  334

27.5.6 kube-proxy  335

27.6 使用kubectl  337

27.6.1 擷取kubectl  337

27.6.2 指令格式  337

27.6.3 全局參數  338

27.6.4 子指令  339

27.7 網絡設計  351

27.8 本章小結  353

第28章 其他相關項目  354

28.1 平台即服務方案  354

28.1.1 deis  354

28.1.2 flynn  355

28.2 持續內建平台drone  355

28.3 容器管理  357

28.3.1 citadel  357

28.3.2 shipyard  358

28.3.3 dockerui  358

28.3.4 panamax  358

28.3.5 seagull  359

28.3.6 dockerboard  361

28.4 程式設計開發  362

28.5 網絡支援  363

28.5.1 pipework  363

28.5.2 flannel   364

28.5.3 weave net  364

28.5.4 calico   365

28.6 日志處理  366

28.6.1 docker-fluentd  366

28.6.2 logspout  367

28.6.3 sematext-agent-docker  368

28.7 服務代理工具  368

28.7.1 traefik  369

28.7.2 muguet  370

28.7.3 nginx-proxy  370

28.8 标準與規範  372

28.9 其他項目  375

28.9.1 coreos  375

28.9.2 openstack支援  375

28.9.3 dockerize  376

28.9.4 unikernel  378

28.9.5 容器化的虛拟機  378

28.10 本章小結  379

附錄

附錄a 常見問題總結  382

附錄b docker指令查詢  388

附錄c 參考資源連結  393