Docker容器熱遷移研究歷程chapter1:go語言學習

         由於Docker項目是由go語言編寫,根據我前一段時間的研究思路的整理,我大致劃分來一下我的研究思路。

          我研究了Docker的架構模式如下:

          研究了該架構後我初步瞭解了docker背後的容器管理技術(http://www.cnblogs.com/plxx/p/5483100.html),Docker 是通過調用libcontainer這一對lxc封裝好的容器管理接口來實現對Docker容器的管理。libcontainer目前已經整合CRIU項目基於檢查點的checkpoint/restore的保存恢復的解決方案,僅就libcontainer而言已經可以實現容器的熱遷移功能。然而對於docker容器,由於criu的解決方案並不能支持nested namespace的熱遷移,故docker容器在遷移後,docker daemon與docker容器之前的父子關係將無法恢復,使得遷移後的docker容器脫離了docker daemon的控制,docker無法對該容器進行任何操作。

         根據上述分析,Docker容器熱遷移目前的主要問題就是在與當前CRIU項目的解決方案不能支持nested namespace(嵌套命名空間)的遷移,雖然libcontainer自身可以實現熱遷移,可無法維持Docker容器的父子關係。

         我對該問題進行初步的思考,對症下藥,既然要Docker原生支持容器的熱遷移,我需要從Docker的源碼進行解析,Docker是一款基於Go語言開發的工具,所以我需要了Go語言的基礎知識來對Docker源碼進行解讀。進一步充分了解namespace的機制,解析nested namespace 的遷移的難點所在。最後通過在Docker execdriver層完成對libcontianer的熱遷移接口調用並可以維持docker容器內部的嵌套父子關係。

          由此開始進入Go語言的基礎知識的學習~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章