發表於2024-12-23
√ 經阿裏雲戰火洗禮,將容器|Go|新規範和開源項目精密地融為一體。
√ 容器編排至佳實踐與生産環境容器化,是邁嚮高階應用的重大課題。
√ 理解容器底層實現原理,是攀登效用極限及創造其擴展應用的基石。
√ 造輪子可取之義在於知其所以然——全局、脈絡、趨勢及其特殊性。
《自己動手寫Docker》在詳細分析Docker所依賴的技術棧的基礎上,一步一步地通過代碼實例,讓讀者可以自己循序漸進地用Go語言構建齣一個容器的引擎。不同於其他Docker原理介紹或代碼剖析的書籍,《自己動手寫Docker》旨在提供給讀者一條動手路綫,一步一步地實現Docker的隔離性,構建Docker的鏡像、容器的生命周期及Docker的網絡等。《自己動手寫Docker》涉及的代碼都托管在GitHub上,讀者可以對照書中的步驟從代碼層麵學習構建流程,從而精通整個容器技術棧。《自己動手寫Docker》也對目前業界容器技術的方嚮和實現做瞭簡單介紹,以加深讀者對容器生態的認識和理解。
《自己動手寫Docker》適閤對容器技術已經使用過或有一些瞭解,希望更深層次掌握容器技術原理和至佳實踐的讀者。
陳顯鷺
阿裏雲高級研發工程師,對Docker有深入研究,是Docker多個項目的Contributor,專注於容器技術的編排與基礎環境研究。愛好摺騰源代碼,熱愛開源文化並積極參與社區開源項目的研發。
王炳燊
阿裏雲研發工程師,具有豐富的Linux開發經驗,對Docker有深入研究,多次提交Docker Patch。目前從事阿裏雲容器服務網絡方案的設計與實現,專注於容器技術的基礎環境研究。
秦妤嘉
阿裏雲高級研發工程師、DevOps工程師,有豐富的容器化持續集成和持續交付開發實戰經驗,進行過Jenkins源碼分析改造和Jenkins插件開發。目前從事阿裏雲容器服務持續集成和持續交付方案的設計和實現。
容器技術發展日新月異,除瞭不斷地跟進全新的版本和社區發展,優秀的深入學習方式就是通過模仿來造一個類似的輪子。
本書結閤瞭幾位作者在容器領域和阿裏雲上的生産實踐,涉及瞭從入門的容器技術和Go原理到全新的容器領域規範和開源項目OCI、containerd、CRI等,很精煉地將如何從零寫一個Docker娓娓道來,非常有助於提高讀者在Docker領域的深度動手能力。
——阿裏巴巴高級技術專傢,湯誌敏
本書通過從頭構建容器引擎、構造鏡像,深入淺齣地講解瞭容器背後的原理,是一本不可多得的好書。
——阿裏巴巴高級技術專傢,戒空
隨著Docker技術的不斷發展,Docker公司、阿裏雲及其他的雲産品公司都推齣瞭越來越成熟的、基於Docker的解決方案,一場Docker容器帶來的技術變革正在興起。本書內容由淺至深,通俗易懂,引導讀者通過學習容器技術的實現細節,一步步去構建一個簡單的容器,能幫助有一定Docker基礎的工程師學習到更有實踐性的經驗,對剛接觸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自己動手寫AUFS34
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數據捲 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.1setns 94
5.4.2Cgo 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.1Linux虛擬網絡設備 122
6.1.2Linux路由錶 124
6.1.3Linux iptables 126
6.1.4Go語言網絡庫介紹 127
6.2構建容器網絡模型 128
6.2.1模型 128
6.2.2調用關係 130
6.3容器地址分配 137
6.3.1bitmap算法介紹 138
6.3.2數據結構定義 138
6.3.3地址分配的實現 140
6.3.4地址釋放的實現 142
6.3.5測試 142
6.4創建Bridge網絡 144
6.4.1Bridge Driver Create實現 144
6.4.2Bridge Driver初始化Linux Bridge流程 144
6.4.3Bridge 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 創建一個?sk + redis的計數器 169
7.2.1創建redis容器 169
7.2.2製作?sk鏡像 173
7.2.3創建my?sk容器 176
7.3runC 177
7.3.1簡介 177
7.3.2OCI 標準包(bundle) 177
7.3.3con?.json 178
7.3.4mounts 178
7.3.5process 179
7.3.6user 179
7.3.7hostname 180
7.3.8platform 180
7.3.9鈎子(Hook) 181
7.4runC 創建容器流程 182
7.5Docker containerd 項目介紹 186
7.5.1架構 187
7.5.2特性和路綫圖 188
7.5.3containerd和Docker 之間的關係 188
7.5.4containerd、OCI和runC之間的關係 188
7.5.5containerd和容器編排係統的關係 189
7.6Kubernetes 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.5CRI的目標 194
7.6.6已知的問題 194
7.7小結 195
序
我是阿裏雲容器服務團隊的架構師易立,很榮幸為這本書作序。
當顯鷺等幾位同學跟我談起他們想寫一本介紹如何從頭打造一個Docker引擎的書時,我有些擔心這樣的內容是不是太小眾,畢竟絕大多數讀者都是Docker的使用者而非開發者。然而讀完樣章,看到這三位同學筆下翔實的內容,文中透齣的熱情和自信打消瞭我的顧慮。
Docker是技術圈中的當紅小鮮肉。自從2013年橫空齣世以來,迅速在開發者社區流行開來。在2016年9月,Docker鏡像在DockerHub的總下載量就已經超過瞭60億次,並且以每6周10億次的速度迅速增長。
大傢都知道Docker技術脫胎於LinuxContainer(LXC)技術,在LXC的發展過程中,IBM、Google、Redhat、Canonical等技術巨擘做齣瞭眾多的貢獻。然而,Docker到底有什麼魔力,能夠在這麼短的時間之內就風靡瞭整個技術圈呢?
Docker公司的創始人兼CTO—SolomonHykes,有機地把一係列技術CGroup、Namespace和UnionFS整閤起來,極大地降低瞭容器技術的復雜度,簡化瞭開發者用戶體驗。他敏銳地預測到一旦標準化容器技術最終齣現,整個技術行業將會受到怎樣深遠的影響。Docker公司開源瞭DockerEngine,定義瞭一個以容器鏡像為標準的應用打包格式;並且建立DockerHub服務進行鏡像分發和協作。這些舉措迅速創建瞭一個良好的社區和閤作夥伴生態圈,包含AWS、Google、Microsoft、IBM和國內的眾多公司。在短短幾年的時間內,Docker幾乎成為瞭容器技術的代名詞。
“得標準者得天下”,容器底層標準化之爭風雲再起。2014年底,CoreOS推齣rkt容器引擎,試圖挑戰Docker另立標準。Docker在2015年6月宣布成立OCI(OpenContainerInitiative)組織作為Linux基金會的協作項目,並將其容器標準和runtime參考實現(RunC)貢獻齣來,旨在圍繞容器格式和運行時製定一個開放的工業化標準。這一舉措化解瞭社區在容器標準上的第一次分歧。
隨著容器技術的快速發展,技術生態逐漸從圍繞單機環境構建和運行容器化應用,發展為支持大規模容器編排技術。雲平颱成為瞭分布式網絡操作係統,而容器成為瞭“進程”執行單元,可以動態地運行在不同宿主機環境中。其中,Kubernetes、Mesos、Docker諸強爭霸,各有所長。2016年6月,Docker宣布開始在DockerEngine中內置Swarmmode,這極大地簡化瞭容器編排的復雜性,但也遭到瞭社區的強烈反對。Google發起CRI(ContainerRuntimeInterface,容器運行時接口)項目,通過shim的抽象層使得調度框架支持不同的容器引擎實現。Mesos推齣瞭Uni?dContainerizer,以支持Docker、Appc、OCI等不同的鏡像格式,而無須再依賴DockerEngine。
麵對這些挑戰,2016年12月14日,Docker公司宣布將DockerEngine的核心組件Containerd捐贈到一個新的開源社區,任其獨立發展和運營,目標是提供一個標準化的容器runtime,其注重簡單、健壯性和可移植性。由於Containerd隻包含容器管理最基本的能力,因此上層框架可以有更大的靈活性來提供容器的調度和編排能力。阿裏雲、AWS、Google、IBM和Microsoft會作為Containerd的初始成員,為項目貢獻力量。
在技術爆發的年代,新技術層齣不窮,而快餐式的閱讀和瞭解無法幫助我們梳理和把握發展的脈絡。對一些核心技術既要知其然也要知其所以然,這樣纔能舉一反三,對技術趨勢建立起自己的理解和判斷。瞭解容器基礎知識,可以深入理解容器在進程管理、資源管理、安全隔離等方麵與傳統方式的不同,也有助於瞭解容器在網絡、存儲、安全等方麵的特殊性。
最好的學習方式莫過於自己親手實踐。計算機界的泰鬥AndrewTanenbaum教授為教學而構建瞭Minix,而這也啓發瞭LinusTorvalds大神創造瞭Linux。我們期待同學們能夠從本書循序漸進的講解中學習容器相關的技術細節,深入理解Docker的底層技術實現,圍繞容器技術實現創造性的擴展和應用。
易立
2017年1月
為什麼要寫這本書
Docker技術可謂是近年最火熱的技術之一,鋪天蓋地的技術論壇和各種講座,大傢都在分享關於如何容器化及如何使用Docker優化自己運維和開發流程的經驗。隨著Docker技術的逐漸普及,使用Docker已經不再是一個難題。現在更加重要的是生産環境容器化的最佳實踐,另外就是容器的編排框架之爭。但是,對於技術人員來說,除去Docker外錶的繁華外,什麼是容器,容器到底是怎麼創建的,容器底層的技術探秘也是非常重要的。
我在2014年開始接觸Docker,經曆瞭從最初的新奇—感嘆竟然還有Docker這樣的好工具,到逐漸熟悉Docker的各種功能,嘗試在生産環境中使用Docker技術的過程。但是,每每被人問到:“Docker技術到底是怎麼實現的呢?”我隻能粗粗淺淺地說:“Docker是使用LinuxKernel的Namespace和Cgroups實現的一種容器技術。”那麼,什麼是Namespace,什麼是Cgroups,Docker是怎麼使用它們的,容器到底是怎麼一步步被創建齣來的?問到這些,我就會支支吾吾地不知所以。由此可見,瞭解容器技術的底層技術,然後明白它們是如何工作的,尤為重要,這些纔是整個容器技術的基石,掌握瞭這些基石纔能更加容易地嚮上攀登。
單單講解底層的技術實現細節和源碼解讀是很枯燥的一件事,一般來說很難有耐心去一點點細讀然後揣摩其中的奧妙,這樣囫圇吞棗地過一遍技術細節,作用不大。因此,便萌生瞭寫一本《自己動手寫Docker》這樣的書的想法。本書不去刻意講解容器技術的細節,用到什麼講解什麼,點到為止,更加細節的內容留給讀者自己探索。通過閱讀本書,可以一步步地去瞭解容器技術的實現細節,更可以跟著作者一步步地用自己的代碼去實現它。本 自己動手寫Docker 下載 mobi epub pdf txt 電子書 格式
自己動手寫Docker 下載 mobi pdf epub txt 電子書 格式 2024
自己動手寫Docker 下載 mobi epub pdf 電子書書不錯
評分不錯,值得購買
評分南寜市女生!南寜市你那是那麼那麼隻能說明什麼那麼說明什麼是沒事媽媽每周末
評分內容比較淺,排版較差。
評分看著作者的名分來的。。不知寫的咋樣
評分商品質量很好,很滿意,配送速度快啊,而且配送員態度也非常好。
評分內容不錯,看瞭受益匪淺。
評分書不錯,應該是正版,給全五分好評。
評分東西很不錯下次還來買
自己動手寫Docker mobi epub pdf txt 電子書 格式下載 2024