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

Docker火了,有多火你本身看看下面的統計數據就知道了git

在發佈4個月的時間裏,下載量就超過50000次,github上收到超過4000個star,涌現了超過100個貢獻者,而且有超過150個項目和超過1000個產品開始使用docker。程序員

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

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

它究竟是什麼?這多是每個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地,同時確保他們能夠相互隔離的運行。ui

Docker絕對不等同於容器。一個是幹活的人,一個是被搬運的物品,能同樣嗎?可是我仍然在各類技術文章,會議演講上看到和聽到將他們混爲一談的說法。實在以爲須要給他們正名,也是今天寫這個文章的主要緣由。spa

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

相關文章
相關標籤/搜索