雲計算Docker暢談應用開發 --來自新浪網(轉載)

8月30日,由Docker中文社區主辦的Docker Meetup來到深圳,並邀UCloud、華爲雲、七牛雲存儲等各領域專家共話Docker應用與暢想。git

隨着新一波移動互聯網浪潮涌入,曾經碼農們的創富神話已變成了現在的掩面慨嘆,「開發者之艱辛」「爲開發者減負」的言論不絕於耳。曾有硅谷的工程師認爲「若是說有什麼能讓開發人員工做變得輕鬆一點的話,docker就是其中之一」。docker

雲計算Docker Meetup深圳行暢談應用開發

雲計算Docker Meetup深圳行暢談應用開發七牛雲存儲

Docker能夠被形象地看作一個應用封裝容器,以往開發者開發一款應用,須要考慮硬件、操做系統、運行環境的適配,有了容器就不用考慮這些了。開發者直接在容器裏開發,提測時把整個容器測試,測試後在容器內進行改動,再上線。經過容器,整個開發、測試和生產環境能夠保持高度的一致。此時開發者只需專一於開發軟件,不須要考慮在哪運行本身的軟件,這也是雲計算的發展方向。Docker因其輕量級特性,可協助應用實現雲端的即時遷移,這必吸引更多人來使用雲服務,所以當之無愧稱得上是雲計算的明日之星。安全

UCloud做爲國內頂尖的雲計算基礎服務商,受邀參加這次活動演講。資深工程師邱模炯就Container內核原理作了詳細介紹,如下是整理的演講實錄:網絡

Docker的本質是Container,不少人疑惑Container與VM的區別,Container做爲一種應用封裝容器,在表象上相似於虛擬機VM,但在實現的原理和應用上與虛擬機VM其實有着巨大的區別:架構

雲計算Docker Meetup深圳行暢談應用開發雲計算Docker Meetup深圳行暢談應用開發工具

VM通常指系統虛擬化,每一個虛擬機的運行環境由VMM(虛擬化管理器)仿真而成,每一個VM運行各自的內核;而Container僅僅是應用封裝容器,它在應用態封裝了一個rootfs,多個Container共享同一個內核。VM和Container的整體架構圖對好比上所示。從使用者的角度,Container和VM同樣也擁有獨立虛擬機這個假象,這正是底下內核的namespace和cgroup所努力達到的。不過因爲Container的內核是共享的,這個假象虛擬機沒法像VM虛擬機同樣任意安裝操做系統。在Docker Container用到的技術,除了namespace和cgroup,還用到了AUFS(聯合文件系統)。這些是Docker Container在內核原理上主要的技術點。Namespace用作進程組的虛擬化,一組進程若是放入共同的namespace即產生沒有資源限制的Container。一個進程的運行環境一般包括:pid,父pid;uid,gid;VFS mount(rootfs),net協議棧,hostinfo, IPC, /proc, /sys等。在有Container以前,全部應用程序的rootfs都是同樣的,即整個操做系統的根目錄;全部進程涉及到的網絡環境都是同樣的,即一樣的IP地址,一樣的路由,一樣的網絡接口。namespace的功能,容許多個進程組成一個container擁有獨立的運行環境,不一樣container有不一樣的rootfs,不一樣的網絡協議棧,不一樣的IPC。這就是namespace,進程運行環境所涉及的方方面面都有相應的namesapce。總的來講,Namespace能夠製造一種虛擬機的假象,能夠實現獨立的mnt;獨立的pid空間;獨立的網絡協議棧;獨立的IPC;獨立的/proc /sys。oop

但Container若是隻有Namespace,資源沒法根據需求QoS配置,所以這裏須要藉助Cgroups。cgroup用於進程組的資源隔離,咱們能想到的方方面面的資源均可以經過cgroup來控制,好比控制一組進程總計使用多少CPU、總計使用多少內存;一組進程只能訪問哪些設備;一組進程的IOPS最大隻能多少。Container自然包含一組進程,Container就是藉助cgroup來限制資源使用,使得不一樣Container用到的資源正確隔離。性能

在提供了相似虛擬機的環境,且資源獲得保證以後,這時咱們又會考慮另一個問題:如何使Container變得更精簡。假設:一個Container的rootfs大小是1G,100個Container要100G,這不但佔用大量空間,並且傳輸起來至關費事。這裏咱們就會使用AUFS技術,以遞進的方式建立"Container" —— 一個Container的rootfs疊在另外一個上面,就像使用Git增量開發同樣。這樣的話極大的節省了對存儲的需求,也能加速容器的啓動。 目前AUFS還有不太完善之處,例如,進行一個寫的操做會須要致使整個文件的拷貝,AUFS自己的參數、細節太多,不可推理也不可預測,但總體上來講AUFS仍是能夠起到精簡、提升性能的的做用。測試

在實際工做中,會有哪些場景適合Container或者VM呢?先來比較一下他們各自的優劣:Container運行開銷小;部署速度;啓動速度快,不須要走整個系統流程;VM運行開銷大,由於多了一層Guest Kernel;啓動速度較慢;但Container不能作在線遷移。咱們以實際應用場景來講明,UCloud在一些內部的業務使用了docker,但沒有像雲主機同樣像客戶售賣Container。這是由於客戶對虛擬機隔離性要求很是高,他們但願咱們的虛擬機絕對安全,就目前爲止,Container由於內核共享,沒法作到完全的隔離,也就沒有使人放心的安全性。從資源切割的角度,我的認爲,Container更適用於大公司的內部雲平臺,同一臺物理機經過Docker Container部署不一樣的業務並相互隔離,提高資源利用率,簡化業務管理和部署。特別是,Docker Container有着較完善的管理工具,可實現Container的一鍵打包、一鍵部署、一鍵運行,在業務遷移、部署方面頗有優點。

相關文章
相關標籤/搜索