通過講解 Docker 使用到的各種底層技術,例如Namespace、Cgroups等來自己一步步動手完成一個簡單版本的Docker。在自己動手的過程中,從而對Docker 這個技術有一個整體、細致的了解。能夠明白Docker 的原理以及結構,從而加深對目前熾手可熱的Docker 技術的理解,方便解決工作中使用Docker 遇到的各種問題。
2015年在 IBM CDL 從事研發工程師工作,方向為云計算與虛擬化。2016年初加入阿里云,就職容器服務,從事Docker 研發與容器化技術解決方案。
目錄
第1章容器與開發語言………………………………………………………………………1
1.1Docker ………………………………………………………………………………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.2Go ……………………………………………………………………………………5
1.2.1描述 …………………………………………………………………………5
1.2.2安裝Go ………………………………………………………………………6
1.2.3配置GOPATH ………………………………………………………………6
1.3小結 …………………………………………………………………………………7
第2章基礎技術………………………………………………………………………………8
2.1Linux Namespace 介紹 ………………………………………………………………8
2.1.1概念 …………………………………………………………………………8
2.1.2UTS Namespace ………………………………………………………………10
2.1.3IPC Namespace ………………………………………………………………11
2.1.4PID Namespace ………………………………………………………………13
2.1.5Mount Namespace ……………………………………………………………14
2.1.6User Namespace ………………………………………………………………16
2.1.7Network Namespace ………………………………………………………… 18
2.2Linux Cgroups 介紹 ………………………………………………………………… 20
2.2.1什么是Linux Cgroups ……………………………………………………… 20
2.2.2Docker 是如何使用Cgroups 的 …………………………………………… 24
2.2.3用Go 語言實現通過cgroup 限制容器的資源 …………………………… 25
2.3Union File System …………………………………………………………………… 26
2.3.1什么是Union File System …………………………………………………… 26
2.3.2AUFS ………………………………………………………………………… 27
2.3.3Docker 是如何使用AUFS 的 ……………………………………………… 27
2.3.4自己動手寫AUFS…………………………………………………………… 34
2.4小結 ………………………………………………………………………………… 37
第3 章構造容器……………………………………………………………………………… 38
3.1構造實現run 命令版本的容器 …………………………………………………… 38
3.1.1Linux 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.1busybox ……………………………………………………………………… 59
4.1.2pivot_root …………………………………………………………………… 60
4.2使用AUFS 包裝busybox …………………………………………………………… 63
4.3實現volume 數據卷 ………………&h
好。。。。z
通過這本書可以很容易理解docker的原理,寫的非常好