製作Docker基礎鏡像base image的戀愛三部曲

第一部曲:初選Docker

       老的項目還需要開發維護,但新的硬件已經很難安裝上舊的Linux OS。實際上,我們平時使用這個老系統,也僅是用來編譯版本而已,是一個非常受限應用場合,不會很頻繁地使用。那麼可選的一個部署途徑,就是安裝虛擬機,使用上慢點就慢點吧。       

        但是,虛擬機是安裝Docker類型的虛機mkimage-yum.sh,還是Virtualbox類型的虛機呢?

       對於這個問題,我思考、猶豫了好幾天,總覺得想不透徹。最後形成一個大致想法目標是想讓鏡像儘可能保持不變,以利於後期重複使用,而虛機又在使用中比較方便,符合平時使用習慣。

      從鏡像保持不變這個角度分析,docker的數據卷映射與Virtualbox的掛載共享目錄都有自己的解決方案,但docker對於鏡像不變的約束力,更是強大了很多!粗略驗證了下virtualbox的共享目錄的辦法,操作上還是比較繁瑣的和不自由,而docker的數據卷映射則自由的多。加上對比下,虛擬機的啓動速度,docker又擁有無與倫比的優勢,幾乎是秒起,就像執行普通的shell命令一樣;再加上docker+數據卷映射,幾乎可以無縫地切換和編譯。

      那麼,就選擇Docker虛擬機這條道走到黑吧!!!

 

第二部曲:如何製作基礎鏡像base image

        碰到的第二個攔路虎,就是如何製作一個docker的base image。雖然,docker hub提供了常見的CentOS、Ubuntu等基礎鏡像,但是,我用到的發行版是CentOS下游定製發行版,還是不能直接用docker hub上的CentOS基礎鏡像,特別是編譯代碼使用場合。某些一知半解的人,總想盡可能的環境一樣,也懶得給他們多費口舌,那麼,就剩下靠自己製作基礎鏡像了!

       在網上研究了Docker製作基礎鏡像的方法,有不少誤導,最後,發現只有一個是正途,其它可能都有點旁門左道了。。。,所以,覺得很有必要總結下,以利於擴大正能量。

       + 旁門左道A:對安裝鏡像ISO中的資料進行tar,然後導入docker。此種解決方法,誤解了安裝鏡像ISO。就像在石鐘山山上擇石一二扣之,其聲響亮,故曰石鐘山一樣。ISO安裝鏡像提供的是OS安裝文件,而非可以運行的OS環境。而搜索引擎上搜索從安裝ISO鏡像如何製作docker鏡像,經常遇到這些似是而非的網文。

      + 旁門左道B:利用同種OS環境的虛擬機或物理機,在環境裏面進行打包鏡像,而此種方法在docker官網中是禁止使用的。雖然,可能在實際中可以使用,但這種環境所帶來的硬件依賴信息,還是會比較多地進入打包鏡像中,污染較大。

 

    在Docker官網中建議,對於CentOS體系的操作系統製作基礎鏡像,建議使用febootstrap方式或yum方式進行docker鏡像打包。我所擁有的CentOS下游發行版,可能沒有那麼友好支持febootstrap,但是,考慮到此ISO鏡像是能夠支持作爲yum安裝包源的,那麼,使用yum方式從iso鏡像製作docker基礎鏡像base image將是可行的。

     理論上推演很順暢!

     正途:https://github.com/moby/moby/blob/master/contrib/mkimage-yum.sh

 

第三部曲:還有點小繞繞。

    從mkimage-yum.sh 腳本中的代碼和默認值,可以看出腳本製作基礎鏡像所要求的操作系統環境,最好與打包鏡像所對應的操作系統是一致的。

    但是,很可惜,對於這點不能直接滿足。

    在mkimage-yum的腳本中依賴dockcer操作,而docker對於最低的Linux內核是有要求的,我們要打包鏡像OS的Linux內核是不滿足的。那麼,還是有兩種方法,一是將腳本操作步驟分開來做,產生tar包與docker導入和驗證分開;二是可以選擇支持docker的環境,進行交叉製作,就像交叉編譯一樣。mkimage-yum腳本也是支持此種使用方法,通過特殊配置yum的配置文件,以及二次修改腳本代碼變更腳本中yum命令攜帶定製參數--disableplugin=fastestmirror --disablerepo=\* --enablerepo=C6-base,將yum安裝所依賴的信息,按照打包的鏡像OS環境進行配置。

    最後,製作的Docker基礎鏡像base image,可以在ubuntu/centos兩個系統上運行,如絲般順滑:)

 

     愛Docker,初來自不經意的選擇;相識於懵懂;最後,愛她,源於她和你相知!

 

 

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