自己動手寫Docker

自己動手寫Docker 下載 mobi epub pdf 電子書 2025

陳顯鷺
圖書標籤:
想要找書就要到 圖書大百科
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
第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所依賴的技術棧的基礎上,一步一步地通過代碼實例,讓讀者可以自己循序漸進地用Go語言構建齣一個容器的引擎。不同於其他Docker原理介紹或代碼剖析的書籍,本書旨在提供給讀者一條動手路綫,一步一步地實現Docker的隔離性,構建Docker的鏡像、容器的生命周期及Docker的網絡等。本書涉及的代碼都托管在GitHub上,讀者可以對照書中的步驟從代碼層麵學習構建流程,從而精通整個容器技術棧。本書也對目前業界容器技術的方嚮和實現做瞭簡單介紹,以加深讀者對容器生態的認識和理解。

本書適閤對容器技術已經使用過或有一些瞭解,希望更深層次掌握容器技術原理和最佳實踐的讀者。

用戶評價

評分

對著書寫瞭一遍,曆時三個星期

評分

##這本書救我狗命... namespace和cgroup看瞭一堆文章和視頻還是不大懂在乾嘛... 這本書提供瞭實踐中學習的路徑... 就是看一些中文翻譯特彆難受 英文應該也有類似主題的書? 我沒找到...

評分

##原來都是使用linux下的虛擬化技術編寫的

評分

##運用技術的具體實現,贊。此書更像是代碼的文檔。或許應閱讀代碼為主,會理解的更快。

評分

##草草看完。 docker 自己的東西確實不多,所以拼命的搞 OCI , containerd 等標準。 最後也隻能淪為標準。 對 linux namespace, cgroup 熟悉,可以很快寫齣一個 docker 這本書用 c ,代碼會更好看。

評分

##原來都是使用linux下的虛擬化技術編寫的

評分

##這本書救我狗命... namespace和cgroup看瞭一堆文章和視頻還是不大懂在乾嘛... 這本書提供瞭實踐中學習的路徑... 就是看一些中文翻譯特彆難受 英文應該也有類似主題的書? 我沒找到...

評分

##docker ≈ linux namespace + cgroups,對linux內核及其係統調用熟悉一點的程序員應該都能自己手寫一個簡單版。遺憾書裏部分內容已經過時,例如docker默認的存儲驅動已經從AUFS改成瞭overlay2。

評分

##四年瞭,大學的時候購買的,今天纔看完。

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.teaonline.club All Rights Reserved. 圖書大百科 版權所有