寫Dockerfile是構建Docker鏡像最一般的方式,接觸過Docker的童鞋多少了解一些。前段時間研究OpenShift(paas的一種),發現了另一種構建Docker鏡像的方式:S2I。html
S2I是Source-to-Image的縮寫。git
S2I是一套工具包和工做流程,用於從源代碼構建重複性Docker鏡像。github
S2I是一個框架,它使寫鏡像變得簡單。它把程序源代碼做爲輸入,生成一個運行已組裝應用程序的新鏡像並做爲輸出。框架
S2I的詳細介紹以及使用方法能夠參考如下官方文檔。本文就不復述(fan yi)了。工具
Talk is Cheap, Show me the Picture.
先上圖。ui
源代碼只是構建鏡像的多種輸入的一種,還有二進制文件等其它輸入。鏡像構建的過程也比較複雜。下圖是爲了清晰地進行對比,因此畫得簡單一些。
由上圖能夠看出,Dockerfile方式的構建過程比較直接:spa
而S2I方式的構建過程比較「曲折」:code
從上述過程能夠看出,S2I方式比Dockerfile方式多了一步,多了兩樣東西:S2I腳本和鏡像(中間)。orm
S2I腳本有4種。htm
關於引入S2I構建鏡像的好處,書面類的描述能夠參考官方文檔,這裏談談實踐下來我的的感覺和理解。
首先,要了解爲何要引入S2I。
若是必定要把構建鏡像分爲兩部分,能夠分爲
環境準備
源代碼相關
引入S2I的目的就是爲了分離
這兩部分的工做。
其中環境準備工做交給了構建器鏡像,
構建器鏡像一旦生成將保持不變,可理解爲靜態部分。
而源代碼相關工做交給了S2I腳本。
在構建鏡像(成品)過程當中,S2I將根據S2I腳本定義的步驟進行源代碼編譯、二進制程序部署、服務啓動預備,能夠理解爲動態部分。
這樣的分離帶來了以下好處。