《Docker——容器与容器云》:第一章 从容器到容器云
2013年初,一個名字從云計算領(lǐng)域橫空出世,并在整個IT行業(yè)激起千層浪。這就是Docker——一個孕育著新思想的“容器”。Docker選擇容器作為核心和基礎(chǔ),依靠容器技術(shù)支撐的Docker迅速成為國內(nèi)外各大云計算廠商以及開發(fā)者手中的至寶。在一片熱火朝天之后,新的革命已經(jīng)悄然來到。
1.1 云計算平臺
回首歷史,云計算時代蘊育出了眾多的云計算平臺,雖然在服務(wù)類型或平臺功能上有所差異,但它們的本質(zhì)上如出一轍,都與NIST1對于云計算平臺的定義有著密切的關(guān)系。
云計算是一種按使用量付費的模式,該模式提供可用的、便捷的、按需的網(wǎng)絡(luò)訪問, 納入可配置的計算資源共享池(資源包括網(wǎng)絡(luò)、服務(wù)器、存儲、應(yīng)用軟件、服務(wù)),統(tǒng)一管理的資源能夠被快速提供,大大減少了資源管理工作開銷,你甚至可以再也不用理會那些令人頭痛的傳統(tǒng)服務(wù)供應(yīng)商了。
經(jīng)典云計算架構(gòu)包括了IaaS(Infrastructure as a Service,基礎(chǔ)設(shè)施即服務(wù))、PaaS(Platform as a Service,平臺即服務(wù))、SaaS(Software as a Service,軟件即服務(wù))三層服務(wù),如圖1-1所示。
圖1-1 云平臺經(jīng)典架構(gòu)
-  IaaS層為基礎(chǔ)設(shè)施運維人員服務(wù),提供計算、存儲、網(wǎng)絡(luò)及其他基礎(chǔ)資源,云平臺使用者可以在上面部署和運行包括操作系統(tǒng)和應(yīng)用程序在內(nèi)的任意軟件,無需再為基礎(chǔ)設(shè)施的管理而分心。 
-  PaaS層為應(yīng)用開發(fā)人員服務(wù),提供支撐應(yīng)用運行所需的軟件運行時環(huán)境、相關(guān)工具與服務(wù),如數(shù)據(jù)庫服務(wù)、日志服務(wù)、監(jiān)控服務(wù)等,讓應(yīng)用開發(fā)者可以專注于核心業(yè)務(wù)的開發(fā)。 
-  SaaS層一般為用戶服務(wù),提供了一套完整可用的軟件系統(tǒng),讓一般用戶無需關(guān)注技術(shù)細(xì)節(jié),只需通過瀏覽器、應(yīng)用客戶端等方式就能使用部署在云上的應(yīng)用服務(wù)。 
同時,隨著計算機(jī)技術(shù)推陳出新,應(yīng)用的規(guī)模愈發(fā)龐大,邏輯愈發(fā)復(fù)雜,迭代更新愈發(fā)頻繁,應(yīng)用開發(fā)所需的統(tǒng)一規(guī)范和原有開發(fā)模式雜亂無章成了追求進(jìn)步的主要障礙。在尖銳的矛盾中,云時代應(yīng)用生命周期管理機(jī)制(Application Lifecycle Management,ALM)和十二要素應(yīng)用規(guī)范(The Twelve-Factor App)2應(yīng)運而生。
所有理論設(shè)計和預(yù)想一定是美好的,只是對于一個新的理論而言,如何經(jīng)受住實踐的考驗,并將美好的愿景轉(zhuǎn)化為生產(chǎn)力才是重中之重。IaaS的發(fā)展主要以虛擬機(jī)為最小粒度的資源調(diào)度單位,出現(xiàn)了資源利用率低、調(diào)度分發(fā)緩慢、軟件堆棧環(huán)境不統(tǒng)一等一堆問題。PaaS在IaaS基礎(chǔ)上發(fā)展而來,眾多PaaS已經(jīng)意識到可以利用容器技術(shù)解決資源利用率問題,但是PaaS通常在應(yīng)用架構(gòu)選擇、支持的軟件環(huán)境服務(wù)方面有較大的限制,這帶來了應(yīng)用與平臺無法解耦、應(yīng)用運行時環(huán)境局限性強、運維人員控制力下降的問題。
可見不論IaaS還是PaaS都有各自適用的場景,但依舊存在諸多缺陷,人們亟需一個真正可用的解決方案誕生。
1.2 容器,新的革命
每一場革命背后都有著深刻的歷史背景和矛盾沖突,新陳代謝是歷史的必然結(jié)果,新生取代陳舊得益于理念的飛躍和對時代發(fā)展需求的契合,很顯然Docker抓住了這個契機(jī)。
Docker是什么?
基于官方的定義,Docker是以Docker容器為資源分割和調(diào)度的基本單位,封裝整個軟件運行時環(huán)境,為開發(fā)者和系統(tǒng)管理員設(shè)計的,用于構(gòu)建、發(fā)布和運行分布式應(yīng)用的平臺。它是一個跨平臺、可移植并且簡單易用的容器解決方案。Docker的源代碼托管在GitHub上,基于Go語言開發(fā)并遵從Apache 2.0協(xié)議。Docker可在容器內(nèi)部快速自動化地部署應(yīng)用,并通過內(nèi)核技術(shù)(namespaces、cgroups等)為容器提供資源隔離與安全保障。
我們應(yīng)該看看Docker的發(fā)展歷程。
每一個傳奇都需要一個這樣的開頭,很久很久以前:Docker項目由Solomon Hykes所帶領(lǐng)的團(tuán)隊發(fā)起,在Docker公司的前身dotCloud內(nèi)部啟動孕育,代碼托管于Github。
2013年3月:Docker正式發(fā)布開源版本,GitHub中Docker代碼commit盛況空前,風(fēng)頭之勁一時無兩。見圖1-2。
圖1-2 GitHub上Docker項目統(tǒng)計圖
2013年11月:REHL 6.5正式版發(fā)布,集成了對Docker的支持,拉開了業(yè)界各大廠商競相支持Docker的序幕。
2014年4月到6月:云技術(shù)市場上的三大巨頭Amazon、Google及MicroSoft Azure相繼宣布支持Docker,并著手開發(fā)基于容器的全新產(chǎn)品。
2014年6月:DockerCon 2014大會召開,會上來自Google、IBM、Amazon、Red Hat、Facebook及Twitter等全球領(lǐng)先企業(yè)的演講嘉賓組成了豪華的陣容。此時, Docker自開源版本后又經(jīng)歷了15個月左右的飛速發(fā)展,Docker 1.0版本正式發(fā)布。
2014年8月:VMware宣布與Docker建立合作關(guān)系,標(biāo)志了虛擬化市場形成了新的格局。
2014年10月:微軟宣布將整合Docker進(jìn)入下一代的Windows Server中。
2014年10月15日:Azure和Docker共同舉辦了Docker全球開發(fā)者大會,并宣布雙方建立戰(zhàn)略合作伙伴關(guān)系。
2014年底:Google率先發(fā)布容器引擎Google Container Engine(GCE),整合了Docker、Google自有容器技術(shù)和在DockerCon2014大會上發(fā)布的Kubernetes,致力于為用戶提供完善的基于Docker應(yīng)用打造的云計算平臺;Amazon發(fā)布EC2 Container Service(ECS),它是一項高度可擴(kuò)展、高性能、免費的容器管理服務(wù),并能夠在托管的Amazon EC2實例集群上輕松地發(fā)布、管理和擴(kuò)展Docker容器,使得Amazon Web Services(AWS)用戶能夠使用AWS上的容器輕松地運行和管理分布式應(yīng)用。
2015年4月:Docker公司宣布完成了9500萬美元的D輪融資。此前,他們已完成三輪融資,包括1500萬美元的B輪融資及4000萬美元的C輪融資。
截至2015年5月:GitHub中Docker的貢獻(xiàn)者多達(dá)近千人,被關(guān)注和喜愛(Star)多達(dá)兩萬一千余次(相比之下,此時Linux源碼多年來積累的被關(guān)注次數(shù)為兩萬兩千余次),并有近五千多個開發(fā)分支(Fork),Docker成為了GitHub上排名前20的明星項目。
Docker官方存儲應(yīng)用鏡像的容器倉庫也獲得了大量開發(fā)者支持,其鏡像倉庫里已有四萬五千余個不同應(yīng)用功能的公共鏡像。最受歡迎的Ubuntu、MySQL、Nginx、WordPress鏡像,下載量已達(dá)到三四百萬次。這些數(shù)字還在保持不斷的增長!
在國內(nèi)一線城市,幾乎每一兩周就有一場關(guān)于Docker的討論大會,Docker永遠(yuǎn)不會讓你孤獨。
從此以后的未來:Docker已經(jīng)給云計算帶來了深遠(yuǎn)的影響,這是一次真正的計算機(jī)技術(shù)革命,來吧,擁抱變化!
一個軟件項目的成功常常需要依托其衍生的生態(tài)系統(tǒng),圍繞或基于核心技術(shù)而構(gòu)建的相關(guān)項目日臻豐富和完善,軟件本身的功能和易用性也隨之增加,Docker的迅猛發(fā)展與其強大的生態(tài)系統(tǒng)息息相關(guān)。首先我們從圖1-3中整體上來審視一下它3。
圖1-3 Docker生態(tài)系統(tǒng)
如圖1-3,圍繞Docker的生態(tài)系統(tǒng)自下而上分別覆蓋了IaaS層和PaaS層所涉及的各類問題,包括資源調(diào)度、編排、部署、配置管理、網(wǎng)絡(luò)管理、應(yīng)用開發(fā)和部署平臺、應(yīng)用開發(fā)工具、應(yīng)用服務(wù)供應(yīng)以及大數(shù)據(jù)分析等云計算相關(guān)的服務(wù)。除了基于Docker技術(shù)解決構(gòu)建分布式平臺無法回避的經(jīng)典問題,Docker及其生態(tài)系統(tǒng)主要帶來了以下幾點好處。
- 持續(xù)部署與測試。Docker消除了線上線下的環(huán)境差異,保證了應(yīng)用生命周期的環(huán)境一致性和標(biāo)準(zhǔn)化。開發(fā)人員使用鏡像實現(xiàn)標(biāo)準(zhǔn)開發(fā)環(huán)境的構(gòu)建,開發(fā)完成后通過封裝著完整環(huán)境和應(yīng)用的鏡像進(jìn)行遷移,由此,測試和運維人員可以直接部署軟件鏡像來進(jìn)行測試和發(fā)布,大大簡化了持續(xù)集成、測試和發(fā)布的過程。
- 跨云平臺支持。Docker帶來的最大好處之一就是其適配性,越來越多的云平臺都支持Docker,用戶再也無需擔(dān)心受到云平臺的捆綁,同時也讓應(yīng)用多平臺混合部署成為可能。目前支持Docker的IaaS云平臺包括但不限于亞馬遜云平臺(AWS)、Google云平臺(GCP)、微軟云平臺(Azure)、OpenStack等,還包括如Chef、Puppet、Ansible等配置管理工具。
- 環(huán)境標(biāo)準(zhǔn)化和版本控制。基于Docker提供的環(huán)境一致性和標(biāo)準(zhǔn)化,你可以使用git等工具對Docker鏡像進(jìn)行版本控制,相比基于代碼的版本控制來說,你還能夠?qū)φ麄€應(yīng)用運行環(huán)境實現(xiàn)版本控制,一旦出現(xiàn)故障可以快速回滾。相比以前的虛擬機(jī)鏡像,Docker壓縮和備份速度更快,鏡像啟動也像啟動一個普通進(jìn)程一樣快速。
- 高資源利用率與隔離。Docker容器沒有管理程序的額外開銷,與底層共享操作系統(tǒng),性能更加優(yōu)良,系統(tǒng)負(fù)載更低,在同等條件下可以運行更多的應(yīng)用實例,可以更充分地利用系統(tǒng)資源。同時,Docker擁有不錯的資源隔離與限制能力,可以精確地對應(yīng)用分配CPU、內(nèi)存等資源,保證了應(yīng)用間不會相互影響。
- 容器便攜性與鏡像。Linux容器雖然早在Linux 2.6版本內(nèi)核已經(jīng)存在,但是缺少容器的便攜性,難以推廣。Docker在原有Linux容器的基礎(chǔ)上進(jìn)行大膽革新,為容器設(shè)定了一整套標(biāo)準(zhǔn)化的配置方法,將應(yīng)用及其依賴的運行環(huán)境打包成鏡像,真正實現(xiàn)了“構(gòu)建一次,到處運行”的理念,大大提高了容器的便攜性。
- 易于理解且易用。Docker的英文原意是處理集裝箱的碼頭工人,標(biāo)志是鯨魚運送一大堆集裝箱,集裝箱就是容器,生動好記,易于理解。一個開發(fā)者可以在15分鐘之內(nèi)入門Docker并進(jìn)行安裝和部署,這是容器使用史上的一次飛躍。因為它的易用性,有更多的人開始關(guān)注容器技術(shù),加速了容器標(biāo)準(zhǔn)化的步伐。
- 應(yīng)用鏡像倉庫。Docker官方構(gòu)建了一個鏡像倉庫,組織和管理形式類似于GitHub,其上已累積了成千上萬的鏡像。因為Docker的跨平臺適配性,相當(dāng)于為用戶提供了一個非常有用的應(yīng)用商店,所有人都可以自由地下載微服務(wù)組件,這為開發(fā)者提供了巨大便利。
1.3 進(jìn)化:從容器到容器云
容器為用戶打開了一扇通往新世界的大門,真正進(jìn)入這個容器的世界后,卻發(fā)現(xiàn)新的生態(tài)系統(tǒng)如此龐大。在生產(chǎn)使用中,不論個人還是企業(yè),都會提出更復(fù)雜的需求。這時,我們需要眾多跨主機(jī)的容器協(xié)同工作,需要支持各種類型的工作負(fù)載,企業(yè)級應(yīng)用開發(fā)更是需要基于容器技術(shù),實現(xiàn)支持多人協(xié)作的持續(xù)集成、持續(xù)交付平臺。即使Docker只需一條命令便可啟動一個容器,一旦試圖將其推廣到軟件開發(fā)和生產(chǎn)環(huán)境中,麻煩便層出不窮,容器相關(guān)的網(wǎng)絡(luò)、存儲、集群、高可用等就是不得不面對的問題。從容器到容器云的進(jìn)化應(yīng)運而來。
什么是容器云?
定義
容器云以容器為資源分割和調(diào)度的基本單位,封裝整個軟件運行時環(huán)境,為開發(fā)者和系統(tǒng)管理員提供用于構(gòu)建、發(fā)布和運行分布式應(yīng)用的平臺。當(dāng)容器云專注于資源共享與隔離、容器編排與部署時,它是一種IaaS;當(dāng)容器云滲透到應(yīng)用支撐與運行時環(huán)境時,它是一種PaaS。
容器云并不僅限于Docker,基于rkt容器的CoreOS項目也是容器云。Docker的出現(xiàn)讓人們意識到了容器的價值,使得一直以來長期存在但并未被重視的輕量級虛擬化技術(shù)得到快速的發(fā)展和應(yīng)用。鑒于Docker的里程碑意義,本書在討論容器云時,都以分析Docker為支撐技術(shù)的容器云為主。
Docker公司本身的技術(shù)發(fā)展,亦是從一個容器管理工具一步步向容器云發(fā)展的歷史過程。Docker最初發(fā)布時只是一個單機(jī)下的容器管理工具,隨后Docker公司發(fā)布了Compose、Machine、Swarm等編排部署工具,并收購了Socketplane解決集群化后的網(wǎng)絡(luò)問題。本書提及Docker時,一般指Docker容器核心,并不包含它向容器云邁進(jìn)的一系列擴(kuò)展工具,這些工具則將在本書第二部分進(jìn)行分析。
除了Docker公司之外,業(yè)界許多云計算廠商也對基于Docker的容器云做了巨大的投入,以Docker容器為核心的第三方Docker容器云正在迎來春天。第6章將要介紹的Fleet、第7章將要介紹的Flynn和Deis以及第8章的Kubernetes,都是基于Docker技術(shù)構(gòu)建的廣為人知的容器云。
從容器到容器云是一種偉大的進(jìn)化,并依舊在日積月累中不斷前行,現(xiàn)在讓我們一起進(jìn)入Docker的世界,感受容器與容器云的魅力。
1National Institute of Standards and Technology,“The NIST Definition of Cloud Computing”論文定義了人們認(rèn)可的云計算三層服務(wù)模型。
2參考自The Twelve-Factor App英文原版(http://12factor.net/)。
3參考自“Docker Ecosystem-MindMeister Mind Map”(https://www.mindmeister.com/389671722/docker-ecosystem)。
 
 
from:?http://www.ituring.com.cn/tupubarticle/4438
總結(jié)
以上是生活随笔為你收集整理的《Docker——容器与容器云》:第一章 从容器到容器云的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 《精通Hadoop》:第 1 章 Had
- 下一篇: 《Docker——容器与容器云》:第五章
