昨天在第一篇的結(jié)尾硫惕,預(yù)告了今天的主題杨赤,那就是這幾年容器虛擬化的明星Docker敞斋。可以說疾牲,在互聯(lián)網(wǎng)技術(shù)圈里植捎,已經(jīng)很難找到?jīng)]有聽說過Docker的工程師;感覺沒將開發(fā)和測試環(huán)境通過Docker來部署阳柔,都不好意思給人家打招呼焰枢,更別說騰訊,京東舌剂,Weibo這些大廠早就將Docker大規(guī)模的運用在生產(chǎn)環(huán)境中了济锄。所以,今天我會結(jié)合自己和Docker的故事來聊聊這項技術(shù)霍转。
初見Docker
說之前荐绝,有個背景故事要交待一下:2014年底,我已經(jīng)離開eBay, 加入順豐避消,參與順豐海淘的建設(shè)低滩。那時候,正是項目大興土木岩喷,百廢待興的階段恕沫,那時候5-6個項目并行開發(fā)是家常便飯,同時纱意,由于我們從一開始就走的微服務(wù)路線婶溯,十幾個Dubbo服務(wù),前端,緩存迄委,ZK等等褐筛,全部部署單例擠在一起,再怎么省跑筝,每搭一套環(huán)境也需要8-9臺VM死讹,算下來,還是有一定的成本的曲梗。
本著降低維護成本+節(jié)約作為出發(fā)點,團隊里有兩位運維的兄弟妓忍,就開始琢磨Docker虏两,希望引入Docker降低維護和機器的成本。實際上世剖,我后續(xù)對Docker的入門定罢,就是從他們兩位身上學(xué)到的。:)
簡單來說旁瘫,Docker是一個Linux容器管理工具祖凫,Linux容器技術(shù)基于Linux內(nèi)核提供的兩個機制:Cgroups(實現(xiàn)資源按需分配)和Namespace(實現(xiàn)任務(wù)隔離)。
Container和VM的對比
由于使用的技術(shù)完全不同酬凳,容器和虛擬機也有很多不同的地方:
相比于VM上部署的二進制文件惠况,服務(wù)可以通過以docker鏡像的方式交付,其部署非常輕量宁仔、快速稠屠,并且額外開銷很低。做過VM鏡像的朋友都知道翎苫,VM的鏡像一般需要達到幾個GB甚至10GB以上权埠,而當(dāng)我們通過docker制作容器鏡像的時候,發(fā)現(xiàn)鏡像才幾十MB煎谍;VM啟動一般都要分鐘級別攘蔽,而啟動容器只需要秒級。
所以兩者最大的區(qū)別就是容器比虛擬機明顯更輕量級呐粘,對宿主機操作系統(tǒng)而言满俗,容器就跟一個進程差不多。因此容器有著更快的啟動速度事哭,更高密度的存儲和使用漫雷、更方便的集群管理等優(yōu)點。很重要的一點在于鳍咱,在容器中運行應(yīng)用和直接在宿主機上幾乎沒有性能損失降盹,同時比虛擬機明顯性能上有優(yōu)勢。
最后谤辜,我們將所有的測試環(huán)境全部做成了基于Docker的環(huán)境蓄坏,并且做了一鍵部署新環(huán)境的腳本(當(dāng)時感覺真是很贊)价捧,唯一遺憾的是,由于時間原因涡戳,當(dāng)時我們對Docker吃得還不透结蟋,比如容器內(nèi)外服務(wù)通信的坑,沒有一個明確的解決方案渔彰,所以到最后也未敢將Docker引入到生產(chǎn)環(huán)境中嵌屎。
Container能完全取代VM?
在我看來恍涂,這個問題的答案是否定的宝惰。
首先,容器最近幾年才真正興起再沧,配套技術(shù)和標(biāo)準(zhǔn)還在完善中尼夺。而虛擬機技術(shù)已經(jīng)發(fā)展了很多年了,虛擬機和虛擬化層間的接口炒瘸、虛擬機鏡像格式等都已經(jīng)標(biāo)準(zhǔn)化了淤堵,相應(yīng)的管理工具、分布式集群管理工具都有比較完善的解決方案顷扩,
其次拐邪,如前文所說,docker的隔離技術(shù)主要基于linux內(nèi)核namespace和cgroup這2個功能屎即,但里面還有很多隔離不完善的地方庙睡,如/proc、/dev設(shè)備技俐、內(nèi)核模塊乘陪、syslog等信息并沒有包含在namespace之中,決定了同宿主上的docker不能提供給多個用戶同時使用雕擂。
最后啡邑,虛擬機由于有自身的OS存在,可以和宿主機運行不同OS井赌,而容器只能支持和宿主機內(nèi)核相同的操作系統(tǒng)谤逼。而且虛擬機由于有VMM的存在,虛擬機之間仇穗、虛擬機和宿主機之間隔離性很好流部,而容器之間公用宿主機的內(nèi)核,共享系統(tǒng)調(diào)用和一些底層的庫纹坐,隔離性相對較差枝冀。
所以,在SaaS和PaaS領(lǐng)域里,以Docker為代表的Container能表現(xiàn)出明顯的優(yōu)勢果漾,但在IaaS領(lǐng)域球切,VM的地位目前是無法撼動的。
下篇預(yù)告
Docker 實現(xiàn)了創(chuàng)建和管理容器绒障,但在現(xiàn)實項目落地的過程中吨凑,還遠(yuǎn)遠(yuǎn)不夠,我們還需要一個容器集群的管理平臺户辱,搭建PaaS平臺鸵钝。在這個關(guān)鍵時刻,怎么能少到了互聯(lián)網(wǎng)技術(shù)圣殿Google的身影呢焕妙?Kubernetes的推出蒋伦,也進一步推進了容器技術(shù)的發(fā)展。接下來焚鹊,我們就來聊聊容器集群的大腦Kubernetes。
掃描二維碼或手動搜索微信公眾號【架構(gòu)椚拖祝】: ForestNotes