Docker,容器,虛擬機器和紅燒肉

北京的201個藍天發表於2017-01-17

Docker火了,有多火你自己看看下面的統計資料就知道了

在釋出4個月的時間裡,下載量就超過50000次,github上收到超過4000個star,湧現了超過100個貢獻者,並且有超過150個專案和超過1000個產品開始使用docker。

最有意思的事情是,在docker本身還沒有穩定之前,就有如RedHat和AWS這樣的公司為其提供官方支援,很多開發者和公司就急不可耐的把它用到生產環境,連docker自己的CEO都要跳出來勸說大家稍安勿躁,我們還沒有準備好嘞。在整個IT軟體發展歷史中,好像很少有這種情況,特別是這種企業級運維相關的系統,一般大家都是慎之又慎,為何這次如此不謹慎,如此不認真,如此不負責任把還在beta階段的系統上線執行?

我記得2014年8月,這時距離docker釋出僅僅1年的時間,我與湖南某家大型媒體的研發中心交流,開發人員已經在使用docker執行他們的系統,而且有些已經進入生產環境。而在過去的2年裡,每一個我所接觸的客戶,從C-level的管理人員,到中層管理者,到開發人員都在提這個東西。

它到底是什麼?這可能是每一個IT從業者都想搞明白的問題。

Docker是什麼?容器又是什麼?

Docker 直譯:碼頭工人。是在碼頭上搬運貨物的工人
容器 英文:Container,如果再翻譯回來就有2個不同的釋義:集裝箱/容器。

如果按照這世界上大多數正常人的理解,大家會把 Docker(碼頭工人)和 Container (集裝箱)這一對事物放在一起,他們的關係一目瞭然:碼頭工人搬運集裝箱。但是如果按照這世界上另外的一類人(程式設計師)的理解,我們會這樣組合 ,Docker (程式碼集裝箱搬運工)和 Container (容器)。

Docker與容器是完全2個不同的東西,Docker是用來組裝/搬運/拆包容器的工具。當然也可以是人,我們原來這些苦逼的程式設計師誰沒幹過zip/copy/paste/unzip的工作呢?其實Docker就是這樣一個工具,用來打包 (build)/傳送(push/pull)/拆包 (run) 那些需要執行的應用。而容器就是那個包。

docker-concept

那麼容器又是什麼?

其實和集裝箱很類似,就是把那些需要放在一起從A地運送到B地執行的,不能和其他程式混雜的程式碼封裝成的一個包而已。這個概念從計算機出現的那天基本上就存在了,只是這麼多年我們一直在不停的改進,但從來沒有一個像docker這樣的工具讓容器的使用變的如此簡單。在Unix/Linux的世界裡,它曾將叫做 Process Container,現在被稱為Control Group (cGroup);在Windows世界裡,我們曾經有元件。他們的目的都一樣,為了把程式從A地運送到B地,同時確保他們可以相互隔離的執行。

Docker絕對不等同於容器。一個是幹活的人,一個是被搬運的物品,能一樣嗎?但是我仍然在各種技術文章,會議演講上看到和聽到將他們混為一談的說法。實在覺得需要給他們正名,也是今天寫這個文章的主要原因。

Docker,容器與虛擬機器有啥區別?

在每一篇介紹Docker的文章裡面都會看到與虛擬機器比較的內容,其實我覺得這完全是拿蘋果和香蕉比較,它們完全不具備可比性,至少在技術上!
大家為啥要這樣比較,主要目的是讓那些不瞭解IT但是卻在管理IT的人(對,就是你的領導和你的客戶)理解為啥他們好不容易,花了n多錢建立起了虛擬化平臺/私有云,現在還要再花錢搞容器,搞docker。對的,這純粹是個市場行為,與技術無關,因為他們在技術上不具備可比性。
慣常的說法,容器啟動迅速(對,它只需要載入那些當前應用的程式)虛擬機器啟動緩慢(廢話,它要載入一堆和應用無關的程式好嗎)。你試試把100個應用打包到一個容器裡面然後啟動它,估計你一定會被98%的Windows使用者打敗。
給你一個hyper-v, vmware, kvm你跑不了容器,你還是需要在上面啟動虛擬機器,然後才能執行容器。就好像你要在家裡提供100個品類的選單,然後讓你兒子每天回來點餐,給他個沙漏,然後說你隨便點,我保證在10分鐘內上菜。你當你是謝霆鋒呢?人家謝大廚後面有10個幫廚,10個採購,10個餐廳經理,10個服務員,做的菜都是提前醃製的。你就算有三頭六臂也只能說:臣妾做不到啊!
所以,容器之所以快,是把每次都要啟動作業系統的操作預先完成了,這樣只需要啟動應用本身而已。而且,容器不會比直接啟動一個應用快,甚至還會更慢一點。

然並卵,那我要這七十二變有何用?

牢騷發夠了,還是說說Docker到底有啥用?Docker這個搬運工與其他搬運工不同的是,他在組裝容器的時候會把應用需要的其他配件都放在一個集裝箱裡。這樣,集裝箱到貨以後,直接開包就可以完成應用組裝;不用再到其他地方七拼八湊的去找各種配件了。這就好比你想做紅燒肉,原來的應用打包只給你打包了肉(應用),別的什麼八角,香葉,冰糖,生抽老抽(應用依賴環境)都不帶;現在商家提供一站式服務,一個包裡不光有肉,還有七七八八所有的東西。你家裡有爐子,有鍋就夠了(作業系統)。
另外,Docker厲害的地方在於,它不光提供了這些配料,還把物流給你搞定了。我們現在可以直接向商家(Docker Hub)下單,商家送貨上門(Docker Pull),你準備好爐子和鍋(作業系統),直接下鍋(Docker Run),菜就上桌嘍。

最後,用一句話定義Docker,那就是:優化應用運維過程的工具和生態系統。

晚上吃紅燒肉!祝大家胃口好!

hongshaorou


相關資料:


請關注微信公眾號 【devopshub】,獲取更多關於DevOps研發運維一體化的資訊

qrcode_for_gh_b7c158df1fd1_430

相關文章