自己動手寫Docker
內容簡介
本書在詳細分析Docker所依賴的技術棧的基礎上,一步一步地通過代碼實例,讓讀者可以自己循序漸進地用Go語言構建出一個容器的引擎。不同于其他Docker原理介紹或代碼剖析的書籍,本書旨在提供給讀者一條動手路線,一步一步地實現Docker的隔離性,構建Docker的鏡像、容器的生命周期及Docker的網絡等。本書涉及的代碼都托管在GitHub上,讀者可以對照書中的步驟從代碼層面學習構建流程,從而精通整個容器技術棧。本書也對目前業界容器技術的方向和實現做了簡單介紹,以加深讀者對容器生態的認識和理解。 本--自己動手寫Docker
前言/序言
精彩書摘
第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 User Namespace ………………………………………………………………16
XII 自己動手寫 Docker
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 跨主機容器網絡的IPAM …………………………………………………… 160
6.6.2 跨主機容器網絡通信的常見實現方式 …………………………………… 161
6.7 小結 ………………………………………………………………………………… 163
第7 章 高級實踐……………………………………………………………………………… 164
7.1 使用mydocker 創建一個可訪問的nginx 容器 …………………………………… 164
7.1.1 獲取nginx tar 包 …………………………………………………………… 164
7.1.2 構建自己的nginx 鏡像 ……………………………………………………… 165
7.1.3 運行mynginx 容器 ………………………………………………………… 167
7.2 使用mydocker 創建一個flask + redis 的計數器 ………………………………… 169
7.2.1 創建redis 容器 ……………………………………………………………… 169
7.2.2 制作flask 鏡像 ……………………………………………………………… 173
7.2.3 創建myflask 容器 …………………………………………………………… 176
7.3 runC ………………………………………………………………………………… 177
7.3.1 簡介 ………………………………………………………………………… 177
7.3.2 OCI 標準包(bundle) ……………………………………………………… 177
目錄XV
7.3.3 config.json …………………………………………………………………… 178
7.3.4 mounts ……………………………………………………………………… 178
7.3.5 process ……………………………………………………………………… 179
7.3.6 user …………………………………………………………………………… 179
7.3.7 hostname …………………………………………………………………… 180
7.3.8 platform ……………………………………………………………………… 180
7.3.9 鉤子(Hook) ……………………………………………………………… 181
7.4 runC 創建容器流程 ………………………………………………………………… 182
7.5 Docker containerd 項目介紹 ………………………………………………………… 186
7.5.1 架構 ………………………………………………………………………… 187
7.5.2 特性和路線圖 ……………………………………………………………… 188
7.5.3 containerd 和Docker 之間的關系 ………………………………………… 188
7.5.4 containerd、OCI 和runC 之間的關系 ……………………………………… 188
7.5.5 containerd 和容器編排系統的關系 ………………………………………… 189
7.6 Kubernetes CRI 容器引擎 …………………………………………………………… 189
7.6.1 什么是CRI ………………………………………………………………… 189
7.6.2 為什么需要CRI …………………………………………………………… 193
7.6.3 為什么CRI 是接口且是基于容器的而不是基于Pod 的 ………………… 193
7.6.4 如何使用CRI ……………………………………………………………… 193
7.6.5 CRI 的目標 ………………………………………………………………… 194
7.6.6 已知的問題 ………………………………………………………………… 194
7.7 小結 ………………………………………………………………………………… 195
· · · · · · 內容選自《自己動手寫Docker》

下載說明:本站所有pdf資源均來源于網絡,僅用于學習和交流!請在下載后24小時內刪除。禁用于商業用途!

上一篇:人類的認知      下一篇:Python編程快速上手
圖書分類
編程圖書下載排行
最新編程圖書下載
熱門圖書下載
永城彩票软件