溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker核心技術(shù)理解(一)

發(fā)布時(shí)間:2020-09-17 11:16:23 來源:網(wǎng)絡(luò) 閱讀:181 作者:Deesljh_博客 欄目:云計(jì)算
  1. Docker的出現(xiàn)是近十年軟件工程領(lǐng)域最大的革命,Docker的技術(shù)完全可以重鑄整個軟件開發(fā)測試運(yùn)維等軟件部署的各個方面。
  2. 以前的虛擬化技術(shù)如VMware,OpenStack一般都是重量級的虛擬化,以VMware為例,首先的需要VMware這套軟件,在這基礎(chǔ)之上安裝具體的操作系統(tǒng)(比如ubantu鏡像1G左右),實(shí)際對內(nèi)存的損耗是特別大,因?yàn)槊總€操作系統(tǒng)的都有一個概念:“常駐內(nèi)存”, 不管你是否運(yùn)行什么軟件,只要系統(tǒng)運(yùn)行著,都會消耗著一部分內(nèi)存;就如在分布式的集群中,對于系統(tǒng)資源而言也是很大的消耗。 Docker核心技術(shù)理解(一)
  3. 下面就是以docker為代表的container技術(shù)的框架簡圖:
    Docker核心技術(shù)理解(一)
  4. 從上面可以看出Docker是以linux內(nèi)核(kernel)中的特性為支撐來完成虛擬化的,具體來說,如在Linux中有namespace,cgroups等,利用這些內(nèi)容可以實(shí)現(xiàn)空間隔離,內(nèi)存、CPU的隔離,以及計(jì)算資源的分配控制和記錄,也就是說我們可以構(gòu)建不同的用戶空間(userspace)。
  5. 實(shí)際上我們在寫程序的時(shí)候,比如說server或者database,他們運(yùn)行的時(shí)候只關(guān)心userspace 用戶空間的,所以當(dāng)我們基于namespace,cgroups的時(shí)候,我們就可以在一臺服務(wù)器上,依靠多進(jìn)程的方式來實(shí)現(xiàn)分布式,每個進(jìn)程就相當(dāng)于一個機(jī)器, 對應(yīng)用程序來說是完全透明的,就應(yīng)用程序本生感知不到這是通過Docker虛擬化技術(shù)虛擬出來的一臺機(jī)器,他跟在真是機(jī)器上是一樣。
  6. 我們基于Docker技術(shù)就可以以進(jìn)程的方式,來做操作系統(tǒng)的用戶空間,而且他的開銷幾乎可以忽略不計(jì),我們在一臺機(jī)器上運(yùn)行多臺機(jī)器的實(shí)例的時(shí)候,是可以榨干硬件的潛能的,包括內(nèi)存CPU、IO等等。從生產(chǎn)力的角度講,以Docker為代表的container技術(shù)把虛擬化的輕量級性以及云計(jì)算,或者說是計(jì)算中心對資源(我們對硬件基本都是投入)投入而使用的價(jià)值是發(fā)揮到極致的,所有我們有足夠的理由選擇docker。
  7. 傳統(tǒng)虛擬化技術(shù)與Docker虛擬化技術(shù)的核心區(qū)別:
    • 創(chuàng)建速度方面:前者速度很慢(一般在分鐘級)而后者速度非??欤ㄒ话阍诿爰墸?/li>
    • 系統(tǒng)性能方面:前者通過對硬件層的模擬,增加了系統(tǒng)調(diào)用鏈路環(huán)節(jié),有性能損耗,而后者共享內(nèi)核,幾乎沒有損耗。
    • 資源消耗方面:前者消耗很大如有常駐內(nèi)存等,而后者消耗很小,一臺機(jī)器可以輕松創(chuàng)建多個Container。
    • 操作系統(tǒng)覆蓋:支持Linux,Windows,mac等,后者目前僅Kernel所支持的OS,如Linux,ubantu,CentOS(借助工具除外)。
  8. docker是目前容器虛擬化技術(shù)最成功的代表,它創(chuàng)建速度非???,如我們很多時(shí)候要創(chuàng)建100臺,以前基于VMware的傳統(tǒng)虛擬化技術(shù)的時(shí)候,會非常麻煩,而且非常耗時(shí)間,但是如果基于docker的話,你就配置幾個參數(shù)就行,就可以從已有的一個節(jié)點(diǎn)的實(shí)例,變成10個或100個。
  9. 傳統(tǒng)虛擬化是對硬件的模擬,就像Java C語言一樣,增加了硬件層的模擬,就相當(dāng)于每一次調(diào)用的時(shí)候,要通過虛擬機(jī),虛擬機(jī)又要轉(zhuǎn)過來通過內(nèi)核調(diào)用硬件,而docker中直接調(diào)用硬件,幾乎沒有性能損耗。
  10. 資源消耗方面,傳統(tǒng)化技術(shù),第一點(diǎn),裝一個系統(tǒng)至少也得1G左右的大小, 第二點(diǎn),即使不運(yùn)行任何的服務(wù),他都有常駐內(nèi)存,而docker對于資源的消耗特別小,一臺主機(jī)可以輕松創(chuàng)建多個container(一般一個普通pc 8G 16G),假如你在container里邊運(yùn)行的服務(wù)不是很復(fù)雜的話,可以在很輕松的一臺pc上構(gòu)建20臺到50臺這樣的虛機(jī)(節(jié)點(diǎn))在其他系統(tǒng)上建立開發(fā)環(huán)境,如Windows,mac可以借助一個工具Boot2Docker,但是建議ubantu,centOS。
  11. 一直強(qiáng)調(diào)的一個觀點(diǎn)是:以docker為代表的container技術(shù) 是對內(nèi)核中的cgroups,namespace等內(nèi)容的使用,如看下圖:
  12. Docker核心技術(shù)理解(一)
  13. 當(dāng)我們保證獨(dú)立的基礎(chǔ)上,Linux的namespace就幫助我們完成了不同的namespace隔離出來的效果就是一個桃花源;從有應(yīng)用的視角看,就是一個完整的操作系統(tǒng),從另外一個角度來看,既然我們在一臺機(jī)器上有很多的container,而每一個container都會使用memory和CPU,那就涉及到內(nèi)核中資源的限制(cgroups),總結(jié):Linux內(nèi)核基于namespace的隔離機(jī)制,以及 cgroups的資源控制機(jī)制來管理container
  14. 其實(shí)止于資源控制而言,cgroups 在實(shí)際運(yùn)行的時(shí)候回創(chuàng)建多個cgroups,也就是子進(jìn)程(subsystems),就會形成一個樹(看上圖),每個subsystem就會關(guān)聯(lián)到樹狀結(jié)構(gòu)上,例如圖上的CPU,memory其實(shí)就是一個subsystem,它會關(guān)聯(lián)到某種具體的cgroups實(shí)例上。一個subsystem其實(shí)就是代表一項(xiàng)資源的,除了這兩項(xiàng),還有IO,上面包含了一個父cgroups和兩個子cgroups(共3個),關(guān)聯(lián)的時(shí)候會關(guān)聯(lián)兩個subsystem(CPU、memory),這兩項(xiàng)資源會通過 cgroups具體的實(shí)例來與具體的 task連接,從內(nèi)核的角度看用戶空間,一個task就相當(dāng)進(jìn)程,我們的CPU、memory、IO就通過cgroups來控制具體進(jìn)程,來實(shí)現(xiàn)管理,一個時(shí)期的task進(jìn)程就是一個container實(shí)例,他可以加入到我們這個樹狀結(jié)構(gòu)上的一個cgroups,cgroups就會限制我們的container的資源。當(dāng)然,cgroups和我們具體的container資源的關(guān)系實(shí)際上是一種多對多的關(guān)系,因?yàn)槲覀兊倪M(jìn)程本身需使用很多資源,一個cgroups可以連接到很多task,而一個task也可以連接到多個cgroups,但是在一個樹狀結(jié)構(gòu)里邊我們只能加入一個cgroups,只于我們?nèi)萜鞫?,我們開始創(chuàng)建的時(shí)候,UsegeCPU可能有一個CPUset,這個cgroups,然后會將具體container 的pid寫入我們的 CPUset具體的task中去,這樣我們的container或者這個進(jìn)程就會加入到這個cgroups池里邊,。一個具體的container可能會加入到多個cgroups,因?yàn)閯倓偽覀冎徽劦降氖荂PUset,實(shí)際上也有IO,memory,這是內(nèi)核里面的內(nèi)容。
  15. 當(dāng)我們在內(nèi)核之上有很多用戶空間的時(shí)候,就一定會涉及到用戶空間根目錄以及文件結(jié)構(gòu)樹是什么,由于我們是基于一個具體的設(shè)備,真實(shí)的根目錄只有一個,所有的container都是掛載到真實(shí)物理跟目錄下的子目錄,而掛載上去后的樹狀結(jié)構(gòu)完全由你自己設(shè)計(jì)。
  16. chroot隔離出來的虛擬的文件系統(tǒng)會掛載到真實(shí)的文件系統(tǒng)之上,在container的角度看,對于像Apache這些應(yīng)用程序服務(wù)器看到的子目錄,其實(shí)就是他進(jìn)程的根目錄, Linux一個卓越的貢獻(xiàn)就是一切皆目錄。
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI