中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Docker核心技術理解(一)

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

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南雄市| 日土县| 湖州市| 桐柏县| 南昌县| 车致| 晋宁县| 盐池县| 周口市| 南宫市| 同仁县| 大港区| 大庆市| 霞浦县| 安化县| 澄江县| 灌阳县| 临澧县| 漯河市| 密山市| 青海省| 天门市| 六盘水市| 德阳市| 玉门市| 灵丘县| 观塘区| 吴忠市| 绵竹市| 天气| 西乡县| 溆浦县| 开封市| 彰化市| 漳平市| 盐山县| 灵寿县| 绥中县| 广德县| 元阳县| 杭州市|