容器霸業:2 誰主沉浮

容器

Docker 的大熱也把一個名詞迅速傳播給了廣大的程序員群體:容器。

何為容器?海納百川,有容乃大。在編程界,容器是一系列相似功法的統稱。容,包含萬物,器,取用隨心。容器的概念由來已久,這個概念并不是 Docker 首創的,卻隨著 Docker 廣為流傳,甚至有的新手入行,以為容器即 Docker,Docker 即容器。

“大師兄,聽說現在有種新的容器功法,特別厲害,而且還是公開的,要不我們也練練?” 小刀一早就跑到大師兄的旁邊問到。

見大師兄沒有理會,小刀繼續說到:“好像叫什么~Docker,對,叫 Docker!現在可流行啦~”

大師兄仍舊不語,心想:雖然我們門派不大,但是我作為門派大師兄,豈能震不住這種初出茅廬的小師弟。

“為何如此興奮?”大師兄故意壓低了語氣,緩緩說到:“你知道何為容器?”

“就是 Docker 能創建一個隔離的虛擬環境,和虛擬機一樣,但是比虛擬機更快更輕。” 小刀馬上說到。

“胡說!不要看了點小報就瞎傳。現在可是練功時間,一會掌門來了!” 見小刀回到了自己的位置,大師兄趕緊悄悄地搜索起來。

午休時間,小刀又和眾師兄弟們聊起了容器功法。大師兄恰巧路過,看到大家聊的火熱,上前問到,“你們可知這 Docker 和容器的淵源?”

"容器就是 Docker 啟動的進程!",小刀一聽可來勁了,想把這兩天從編程小報上看的內容都說出來,“有了 Docker,應用就可以像貨物一樣到處搬運,到處運行了。”

“不要只看皮毛,你可知這容器功法早就有了。”大師兄側身看向遠方,余光卻瞟向小刀。

“這......”小刀欲言又止。

大師兄搶先說到:“早在 1979 年,Unix 中引入了 chroot 功法,這個功法能讓修煉者修改進程及其子進程的根目錄,創建一套獨立的文件空間。不過當初此功法比較簡單,也未考慮安全因素。”

“這也太早了吧,那時候我還沒出生呢!”一個弟子說到。

“而后,FreeBSD 系統在 2000 年為 chroot 引入了 Jail,通過 Chroot Jail 相關的功法,在這個根目錄下的進程,就處于一個隔離的環境中,就如同在「監獄」一樣。”大師兄接著說。

image.png

如果想要修習,秘籍就在參考文獻,小心走火入魔。

“Linux 系統也在 2001 年推出了自己的 Jail「監獄」:Linux VServer。它能夠把資源劃分成一個個區域,稱為安全上下文,security context,而其中的虛擬系統,被稱為虛擬私有服務器,virtual private server,VPS。”看大家聽的津津有味,大師兄繼續說,“技術巨人 Sun 門派,在 2004 年也在自家的 Solaris 系統中推出了 Solaris Containers,兩者異曲同工。隨后一年,Linux 上又出現了 openVZ,通過對內核注入補丁,提供了更完整的隔離支持。”

“這個我知道,Sun 門派后來被 Oracle 門派兼并了。”一個雙下巴的弟子興奮地說到。

大師兄瞟了他一眼,繼續說:“容器功法的發展肯定少不了各大門派的力量,Google 門派的 CGroups,Control Groups,在 2007 年并入了 Linux 內核,此功法可用于限制一組進程的資源使用,比如 CPU,內存、IO。”

“CGroups 不就是 Docker 的......”小刀剛說出口,就立刻閉了嘴。

“Docker 確實建立在 CGroups 功法之上,不止 CGroups,還有其他的功法,且聽我往下說。”大師兄看向小刀,接著說到。

“其實 Google 早就已經偷偷研習「容器」功法了,在 Google 內部,「容器」就是指被 CGroups 管理的一組進程。”大師兄繼續說。

“Google 門派果然在容器功法上貢獻很多啊!” 雙下巴的弟子用手托著自己的下巴,若有所思的說到。

“在 2008 年,第一個完善的 Linux 容器方案 LXC 問世。LXC 即 LinuX Container,由 Canonical 門派研發,結合了 Linux Namespace 和 CGroups 功法,提供了完善且無需補丁的容器之術。”

“Canonical 是什么門派,怎么沒聽說過?” 一個弟子問到。

“Canonical 都不知道,你的 Ubuntu 白用了!”一個戴眼睛的弟子馬上搶話道,“大師兄,你接著說。”

“嗯。Cloud Foundry 聯盟也在 2011 年推出了 warden,目標是為任何操作系統提供隔離的環境,而不僅僅是 Linux。不過,早期的 Linux 版 warden,也是基于 LXC 修煉而成的。”

“此外,Google 門派的另一大貢獻就是 lmctfy,Google 容器棧的開源實現,后來合并到了 libcontainer,也就是如今的 runc 中了。”

“到了 2013 年,你所說的 Docker 功法才流傳開來。”大師兄拍拍小刀的肩膀,“不過說真的,它確實很好用,所以這么流行。”

“哦~原來還有這么一段歷史。”小刀說到。

“大師兄知道的可真多,讓我們受教了。”眼睛師兄說到。

“是啊是啊!”其他師兄弟附和道。

“好了,午休時間差不多了,都回去練功吧。”大師兄說完,轉身走了,眾弟子也逐漸散去。

小刀心想:大師兄果然是大師兄啊,我還得多向他討教才行。

鏡像

“大師兄!”下午的內功研習會過后,小刀拉住大師兄,輕輕地問道,“這個容器我還有一事不明,想要請教一下大師兄。”

“你說吧。”大師兄看了眼時間,說到,“一會我還要去和幾位長老匯報。”

“就是既然容器功法都已經發展這么多年了,像 Cloud Foundry 等聯盟把 Paas 也搞的火熱,為什么 Docker 還能一下這么火呢?”小刀趕緊問道。

“這就要說到讓廣大程序員最頭疼的問題了。”大師兄說到,“對于應用開發的程序員來說,應用開發的什么環節最頭疼?”

“是部署!”小刀立馬脫口而出,“每次上線部署,都要和運維的師兄弟們搞半天,有一次還差點打起來。”

“對!即使是 Cloud Foundry 等 Paas 平臺,也需要針對不同的語言,搞不同的部署腳本。”大師兄接著說到,“你還記得之前的獨行俠-巴斯嗎?”

“哦,就是那個修煉 Linux 內核功法的?”小刀想了一會說到,“他是真的厲害!”

“他確實很厲害,Shell 語言耍的非常溜。Linux 內核功力遠在我們的掌門之上,當初掌門和幾大長老,也想將他收入帳下,做內核功法的教頭呢。”大師兄說到。

“還有這事?”小刀一臉詫異,“要是他來了,豈不是......”

“那為什么他沒來呢?”小刀反問到。

“那就是為什么他叫獨行俠了。”大師兄冷笑一聲,說到,“他當初隨掌門參觀了師兄弟們的修習,提出了很多問題,把掌門問的啞口無言,隨后他就揚長而去了。”

“我們的幾個運維的弟子來給他演示,被他形容為:連 TCP 協議都整不明白,還敢來玩 Nginx。內核功法也是被他批評為:只有其表。”大師兄接著說到。

“內核功法深入確實很難,而且用處比較少。”小刀說到。

“所以 Docker 給了廣大不熟悉內核功法的程序員一個機會,讓他們也能自己快速部署一個應用。”大師兄感慨道,“從前需要半天的部署配置工作,現在一分鐘就能完成,還沒什么沖突問題。沒有什么能比一分鐘部署一個 WordPress 應用更令人興奮了。”

“嗯,確實如此。”小刀說到,“以前,我想都不敢想,現在我也會自己部署應用了。”

“PaaS 的目標,就是讓程序員只關注于業務。”大師兄說到,“但在 Docker 出現之前,這還只是一個美好的目標。”

“Docker 解決的是應用打包這個根本性的問題。它讓廣大的應用開發者從此解放了對內核的恐懼。”大師兄繼續說,“同時,PaaS 的普及已經為廣大的程序員做好了心理建設,他們需要的就是這樣一個便捷而又輕量的方案。”

docker run -d -p 8080:80 nginx

“你看,一個命令就能從 Nginx 鏡像啟動一個 Nginx 容器,而且多個容器毫不干擾。”大師兄拍拍小刀的肩膀,說到,“正是 Docker 的鏡像,將應用「標準化」,能夠像商品一樣批量生產,批量銷售。”

“明白了,感謝大師兄教導!”小刀深鞠一躬。

“看你對這塊很有興趣,多去了解下。”大師兄說到,“我們門派也很快就會用到了,說不定到時,你就可以給師兄弟們講習了。”

“對了,什么時辰了?”大師兄一看時間,“不好,掌門要削我了!”

小刀抬起頭,大師兄已然不見了。

后記

Docker 如此神奇,又有什么秘傳心法呢?

欲知后事如何,請看下回分解。

請關注「容器霸業」,知乎專欄同步更新。

上一章:容器霸業:1 群雄逐鹿

下一章:容器霸業:3 秘傳心法

參考文獻

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容