趣說“容器技術”,女朋友讓我白話它的精彩故事!
面對一不小心就放大大大招的女朋友,我也只能每天戰戰兢兢、如履薄冰,表面逢迎,心里卻諸多的不快。Anyway,當女朋友拋過來新的“難題”時,我也只能見招拆招、見題解題,畢竟方法總比困難多。
這不,在經歷《為了搞懂“云原生”,女朋友竟敢讓我懸梁刺股?!》之后,女朋友仍舊在糾結“容器化與虛擬機的區別”。無奈,為了女朋友心中能夠更暢快一些,我還是以“趣味”的方式,來說一說“容器技術”的故事。
docker的誕生與進化
大概在2010年,數名朝氣蓬勃、意氣風發的IT男,想要在云計算領域指點江山激昂文字,于是在美國舊金山成立了dotCloud公司,這家公司主要做LXC,這就是Linux container,emmm,翻譯過來就是Linux容器虛擬技術,隸屬于基于PaaS層的云計算技術。
Wait,dotCloud降生之后,一直默默耕耘,將自己的容器技術進行簡化和標準化,并把它叫做“Docker”。與此同時,還一直念叨:我怎么還不出名,我怎么還不紅,我怎么沒引起關注。人紅是非多,可我就想是非多一些。就這樣,日復一日、年復一年,默默無聞的dotCloud終于過不下去了!!!

新事物的誕生必將經歷“升級打怪”的過程,dotCloud公司窮得揭不開鍋的時候,dotCloud公司的創始人之一、Docker之父Solomon Hykes決定Open Source,揮淚跟戰友說:我們開源吧,只有開源才能讓我們的孩子——Docker活下去。
這里插一句嘴,開源就是開放源代碼,將保密的程序代碼開放給所有人,大家一起參與,共享源代碼和意見。
結果,不開則已,一開驚人,越來越多的IT攻城獅發現Docker的魅力,接踵而至,紛紛加入Docker開源社區。一時間,人氣暴漲,版本迭代加快,此時的Docker不可一世,是戲曲界的當紅花旦,更是業內公認的一哥!
不僅如此,Google、微軟、Amazon、VMware對Docker鼎力支持,還專門開發構建一種開源容器管理系統,即后來的K8s。火了以后,dotCloud在想,公司的名稱還沒Docker出名,干脆把公司名字改成Docker Inc.。
來呀,找茬呀?容器技術與虛擬機的區別
最難的部分到了,到底什么是容器技術呢?
有效地將單個操作系統的資源劃分到孤立的組中,以便更好地在孤立的組之間平衡有沖突的資源使用需求,這種技術就是容器技術。
顧名思義,容器是一個相對獨立的運行環境,有點類似虛擬機,但不像虛擬機那樣徹底,容器并沒有把宿主機上的資源全部消耗。容器和虛擬機最主要的區別,便是虛擬化層的位置和操作系統資源的使用方式。
其實,在容器技術之前,業界公認的當紅花旦便是虛擬機,其典型的品牌代表是VMware和OpenStack兩家公司。
虛擬機是在操作系統里面,裝一款軟件,通過這個軟件虛擬出“子電腦”出來。在這個“子電腦”里,我們可以運行微信、QQ以及其他程序。同樣,我們也可以模擬出更多“子電腦”,這些子電腦就是虛擬機了,虛擬之間相互隔離,互不影響。
But,容器技術本質上跟虛擬技術有一定的區別,虛擬機使用虛擬機管理程序(hypervisor)運行在物理設備上,從系統可計算資源分配虛擬機實例。換言之,虛擬機需要虛擬一個物理環境,緊接著構建一個完整的操作系統,供應用程序運行。
對于容器技術而言,直接將容器層安裝在主機操作系統上,直接利用了宿主機的內核,它不需要虛擬整個操作系統,抽象層比虛擬機更少,啟動時間更短、占用空間更小。
對,幾秒鐘就能啟動!
對,占空間僅需MB級!
這就是容器技術!
雙建客——深藏功與名的Docker
實際上,Docker本身并不是容器,而是創建容器的工具,是應用容器引擎。不過要想徹底弄懂Docker,我們先看Docker的雙建客:“Build, Ship and Run”、“Build once,Run anywhere”
首先,“Build, Ship and Run”是“搭建、發送、運行”。
為了搞懂它,我先來舉個栗子。
有一天,我獨自來到孤島上,我要在這里開啟新的生活,于是我伐木、搬石頭,辛苦過后,蓋了一座并不完美房子。
住了一段時間之后,我想搬家了,傳統意義的搬家是搬運除了房子以外的物件,比如床單被褥、日用電器等。
按照傳統的想法,我到一個新地方,重新靠自己的雙手、勤勞建筑屬于自己的小巢。但這次,我徹底懶惰了,有沒有一種魔法可以將我蓋的房子重新復制一份,我直接可以拎包入住。
Docker告訴我,可以。它直接將我建好的房子做成“鏡像”,我直接拎包入住。
這就是Docker的另一個雙建客——“Build once,Run anywhere(搭建一次,到處能用)”。
擁有雙建客的Docker如魚得水、如虎添翼,簡直輕量許多,方便許多。
直到有一天,人們發現要想將Docker用于具體業務上,其實并不容易,這就需要編排、管理、調度等各個方面的配合。在這個背景下,人們迫切需要一套管理系統,對Docker和容器進行高級的、靈活的管理。
這個時候,基于容器的集群管理平臺——K8s(Kubernetes)出現了!
K8s的締造,Google的不世之功!
早在十多年前,谷歌開始嘗試容器,構建了一種集群管理系統——Borg,這是K8s的前身。這個集群管理系統可以運行成千上萬個任務,大大提高了計算效率。在這個系統如火如荼發展的同時,谷歌認為運行虛擬機造成處理器利用率機器低下,于是將注意力放在容器系統Docker上,決定構建一種開源容器管理系統。

這個開源容器管理系統就是后來的Kubernetes,意思是舵手或領航員,簡稱K8s。
2014年Google宣布K8s開源;
2014年7月,微軟、Red Hat、IBM、Docker、CoreOS、Mesosphere、Saltstack等公司,相繼加入K8s。
這不,這就是“容器技術”!
女朋友:呵呵。