其實連Docker公司都把Docker用錯啦

gdgo4514 8年前發布 | 10K 次閱讀 Docker

 

【編者的話】這是一篇去年發的文章,但是有些見解目前來看,我覺得還是不錯的。用戶總是希望Docker能把什么工作都做了,提供自己的虛擬文件系統,提供強大的網絡空間隔離,提供配套的編排工具。。。然而,這也為自己埋下了無數的坑。

前言

好吧,我承認我標題黨了。但是這篇內容應該讓你從一個新的角度理解Docker的本質是什么。

Docker其實是static link 的一種回歸

我們在學C的時候,就有靜態鏈接,動態鏈接,本質上是程序代碼庫的復用而已。那個時候我們認為動態鏈接庫是最優的。為什么呢?因為一開始磁盤很貴,內存很貴,網絡也很貴!是的,我們節省了硬件相關的東西,但是我們也為處理系統的各種鏈接庫版本而付出了慘重的代價,浪費了程序員多少光年。Hey,身為程序員的你,是不是多次為編譯依賴的鏈接庫而苦惱不已。而隨著程序規模的不斷龐大,各種依賴沖突也是不斷。

現在,是時候讓靜態鏈接發揮作用的時候了。你看Docker容器動則幾百M。如果是以前,你分發一個程序要幾百M,你自己都吐血了,但是現在,大家已經毫不猶豫的感覺什么都沒有發生的一樣,接受了動則幾百M的鏡像了。

Docker無侵入性的讓現存的進程變成具有資源限制的進程

假設你用Docker運行MySQL。當你使用ps命令,你只能看到MySQL進程,而看不到包裹他的殼(容器)的影子。是的這里的主體依然是MySQL,而不是殼,我們有時候會因為這個漂亮的殼而出現買櫝還珠的有趣事情。

既然Docker只是無侵入性的讓現存的進程變成具有資源限制的進程,那么進程原來是什么樣,就應該是什么樣:

對于網絡,Host 模式足夠啦,高效而不帶性能損失。其他的模式讓你無謂的各種復雜

對于硬盤,mout 本地磁盤足夠了,為什么還有新的文件系統?

為什么有registry 這個東西? Image 不就是個文件么,提供一個標準的文件下載服務器存放image不就行了?

程序和鏡像本身也不是耦合的。只是程序運行的時候順帶加上容器這個殼,從而實現資源的隔離。這種模式該是怎么樣的呢?

比如,我部署tomcat服務,以前是要現在服務器上部署調試好tomcat,然后分發war包運行。現在是我把war包放到一個目錄,然后運行tomcat docker容器并且加載它就好(我們最漂亮-v參數)。對的,我們只是運行一個進程,并且指定了他的數據目錄或者程序目錄,就是這樣。

MySQL也是,你為什么要糾結能不能把MySQL的存儲也放到容器里呢?Docker容器+MySQL 就是MySQL啊,只是給MySQL包了個跨平臺的殼,但它依然只是個普通的進程呀,所以數據還是應該在宿主機的磁盤上。

我們的思想會被羈絆,這也是Docker公司的誤導導致的,他為什么要在進程里面虛擬出一個文件系統的,而且各種各種的實現,讓有選擇障礙性的人糾結的要死,因為他是一家商業公司,希望把大家綁定在自己的生態上。所以,把數據剝離出來,和以前一樣的方式,Docker容器只是一個殼,我們真正的主題還是被包裹的應用。

推銷下我開發的一套容器調度工具: mammuthus-yarn-docker-scheduler

via:dockone

 本文由用戶 gdgo4514 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!