自己動手寫 Docker 自己动手写Docker

陳顯鷺

  • 出版商: 電子工業
  • 出版日期: 2017-07-01
  • 定價: $390
  • 售價: 8.5$332
  • 語言: 簡體中文
  • 頁數: 212
  • 裝訂: 平裝
  • ISBN: 7121317869
  • ISBN-13: 9787121317866
  • 相關分類: Docker

下單後立即進貨 (約4週~6週)

買這商品的人也買了...

商品描述

通過講解 Docker 使用到的各種底層技術,例如Namespace、Cgroups等來自己一步步動手完成一個簡單版本的Docker。在自己動手的過程中,從而對Docker 這個技術有一個整體、細致的瞭解。能夠明白Docker 的原理以及結構,從而加深對目前熾手可熱的Docker 技術的理解,方便解決工作中使用Docker 遇到的各種問題。

作者簡介

陳顯鷺阿里雲高級研發工程師,對Docker有深入研究,是Docker多個項目的Contributor,專注於容器技術的編排與基礎環境研究。愛好折騰源代碼,熱愛開源文化並積極參與社區開源項目的研發。

王炳燊阿里雲研發工程師,具有豐富的Linux開發經驗,對Docker有深入研究,多次提交Docker Patch。目前從事阿里雲容器服務網絡方案的設計與實現,專注於容器技術的基礎環境研究。

秦妤嘉阿里雲高級研發工程師、DevOps工程師,有豐富的容器化持續集成和持續交付開發實戰經驗,進行過Jenkins源碼分析改造和Jenkins插件開發。目前從事阿里雲容器服務持續集成和持續交付方案的設計和實現。

目錄大綱

第1章容器與開發語言………………………………………………………………………1 

1.1 Docker ……………………………… ………………………………………………1 
1.1.1簡介……………………………………………………………………… …1 
1.1.2容器和虛擬機比較…………………………………………………………2 
1.1.3容器加速開發效率………………………… ………………………………3 
1.1.4利用容器合作開發…………………………………………………………4 
1.1.5利用容器快速擴容…………………………………………………………4 
1.1.6安裝使用Docker ……………………………………………………… ……4 
1.2 Go ……………………………………………………………………………………5 
1.2.1描述…………………… …………………………………………… ……5 
1.2.2安裝Go ………………………………………………………………………6 
1.2.3配置GOPATH ……………………… ………………………………………6 
1.3小結…………………………………………………………………………………7 

第2章基礎技術………………………………………………………………………………8 

2.1 Linux Namespace介紹………………………… ……………………………………8 
2.1.1概念…………………………………………………………………………8 
2.1. 2 UTS Namespace ………………………………………………………………10 
2.1.3 IPC Namespace …………………………………………… …………………11 
2.1.4 PID Namespace ………………………………………………………………13 
2.1.5 Mount Namespace ………………… …………………………………………14 
2.1.6 Us er Namespace ………………………………………………………………16 
2.1.7 Network Namespace ……………………………………………… ………… 18 
2.2 Linux Cgroups介紹………………………………………………………………… 20 
2.2.1什麼是Linux Cgroups …………………… ………………………………… 20 
2.2.2 Docker是如何使用Cgroups的…………………………………………… 24 
2.2.3用Go語言實現通過cgroup限制容器的資源…………………………… 25 
2.3 Union File System …………………………………………………………………… 26 
2.3.1什麼是Union File System …………………………………………………… 26 
2.3.2 AUFS …………………………………………………… …………………… 27 
2.3.3 Docker是如何使用AUFS的……………………………………………… 27 
2.3.4自己動手寫AUFS……… ………………………………………………… 34 
2.4小結………………………………………………………………………… ……… 37 

第3章構造容器……………………………………………………………………………… 38 

3.1構造實現run命令版本的容器…… ……………………………………………… 38 
3.1.1 Linux proc文件系統介紹…………………………………………………… 38 
3.1. 2實現run命令……………………………………………………………… 39 
3.2增加容器資源限制………………………………………… ……………………… 45 
3.2.1定義Cgroups的數據結構………………………………………………… 45 
3.2.2在啟動容器時增加資源限制的配置……………………………………… 51 
3.3增加管道及環境變量識別………………………………………………………… 53 
3.4 結………………………………………………………………………………… 58 

第4章構造鏡像……………………………… ……………………………………………… 59 

4.1使用busybox創建容器…………………………………………………………… 59 
4.1. 1 busybox ……………………………………………………………………… 59 
4.1.2 pivot_root ………………………………………… ………………………… 60 
4.2使用AUFS包裝busybox …………………………………………………………… 63 
4.3實現volume數據卷…………… …………………………………………………… 67 
4.4實現簡單鏡像打包……………………………………………………………… … 75 
4.5小結………………………………………………………………………………… 77 

第5章構建容器進階………………… ……………… ……………………………………… 78 

5.1實現容器的後台運行……………………………………………………………… 78 
5.2實現查看運行中容器……………………………………………………………… 82 
5.2.1準備數據…………………………………………… ……………………… 82 
5.2.2實現mydocker ps …………………………………………………………… 87 
5.3實現查看容器日誌…………… …………………………………………………… 90 
5.4實現進入容器Namespace ………………………………………………………… 93 
5.4 .1 setns ………………………………………………………………………… 94 
5.4.2 Cgo …………………………………… ……………………………………… 94 
5.4.3實現命令…………………………………………………………………… 94 
5.5實現停止容器…… ……………………………………………………………… 100 
5.6實現刪除容器……………………………………………………… ……………… 104 
5.7實現通過容器製作鏡像…………………………………………………………… 105 
5.8實現容器指定環境變量運行……………… ……………………………………… 117 
5.8.1修改runCommand …………………………………………………………… 117 
5.8.2修改Run函數……………………………………………………………… 117 
5.8.3修改NewParentProcess函數……………………………………………… 118 
5.8.4修改mydocker exec命令…………………………………………………… 119 
5.9小結………………………………………………… ……………………………… 121 

第6章容器網絡………………………………………………………………………… …… 122 

6.1網絡虛擬化技術介紹……………………………………………………………… 122 
6.1.1 Linux虛擬網絡設備……………………… ………………………………… 122 
6.1.2 Linux路由表………………………………………………………………… 124 
6.1.3 Linux iptables ………………………………………………………………… 126 
6.1.4 Go語言網絡庫介紹……………………………………… ………………… 127 
6.2構建容器網絡模型………………………………………………………………… 128 
6.2.1模型………………… ……………………………………………………… 128 
6.2.2調用關係…………………………………………………………… ……… 130 
6.3容器地址分配……………………………………………………………………… 137 
6.3.1 bitmap算法介紹…………………… ……… …………………………… 138 
6.3.2數據結構定義……………………………………………………………… 138 
6.3.3地址分配的實現…………………………………………………………… 140 
6.3.4地址釋放的實現………………………………………………… ………… 142 
6.3.5測試………………………………………………………………………… 142 
6.4創建Bridge網絡…………………… ……………………………………………… 144 
6.4.1 Bridge Driver Create實現…………………………………………………… 144 
6.4.2 Bridge Driver初始化Linux Bridge流程…………………………………… 144 
6.4.3 Bridge Driver Delete實現…………………………………………………… 148 
6.4 .4測試………………………………………………………………………… 148 
6.5在Bridge網絡創建容器…………………… …………………………………… 149 
6.5.1掛載容器端點的流程……………………………………………………… 150 
6.5.2測試………………………………………………………………………… 156 
6.6容器跨主機網絡………………………………………… ………………………… 159 
6.6.1跨主機容