Docker的技術原理介紹


Docker的技術原理介紹

Docker就是虛擬化的一種輕量級替代技術。Docker的容器技術不依賴任何語言、框架或系統,可以將APP編程一種標准化、可移植的、自管理的軟件,並脫離服務器硬件在任何主流系統中開發、調試和運行
簡單的說就是,在Linux系統上迅速創建一個容器(類似虛擬機)並在容器上部署和運行應用程序,並通過配置文件可以輕松實現應用程序的自動化安裝、部署和升級,蜂場方便。因為使用了容器,所以可以很
方便的把生產環境和開發環境分開,互不影響,這是docker最普通的一個玩法。

Docker相關的核心技術

Docker相關的核心技術之cgroups

    Linux系統中經常有個需求就是希望能限制某個或者某些進程的分配資源。於是就出現了cgroups的概念,cgroup就是controller group,在這個group中,又分配好的特定比例的CPU時間,IO時間,
可用內存大小等。cgroups是將任意進程進行分組化管理的Linux內核功能。最初由Google的工程師提出,后來被整合進Linux內核中。 cgroups中的重要概念是
"子系統",也就是資源控制器,每種子系統就是一個資源的分配器,比如CPU子系統是控制CPU時間分配的。首先掛載子系統,然后才有control group的。比如先掛載memory子
系統,然后在memory子系統中創建一個cgroup節點,在這個節點中,將需要控制的進程id寫入,並且將控制的屬性寫入,這就完成了內存的資源限制。 cgroups被Linux內核支持,有得天獨后的性能優勢,發展勢頭迅猛。在很多領域可以取代虛擬化技術分割資源。cgroup默認有諸多資源組,可以限制幾乎所以服務器上的資源:cpu mem iops,
iodbandwide,net,device acess等。

Docker相關的核心技術之LXC

    LXC是Linux containers的簡稱,是一種基於容器的操作系統層級的虛擬化技術。借助於namespace的隔離機制和cgroup限額功能,LXC提供了一套統一的API和工具來建立和管理container。
LXC跟其他操作系統層次的虛擬化技術相比,最大的優勢在於LXC被整合進內核,不用單獨為內核打補丁 LXC旨在提供一個共享kernel的OS級虛擬化方法,在執行時不用重復加載Kernel,且container的Kernel與host共享,因此可以大大加快container的啟動過程,並顯著減少內存消耗,
容器在提供隔離的同時,還通過共享這些資源節省開銷,者意味着容器比真正的虛擬化的開銷要小得多。在實際測試中,基於LXC的虛擬化方法的IO和CPU性能幾乎接近baremetal的性能。 雖然容器所使用的這種類型的隔離總的來說非常強大,然而是不是像運行在hypervisor上的虛擬機那么強壯仍具有爭議性。如果內核停止,那么所有的容器就會停止運行。
  • 性能方面:LXC > KVM > XEN
  • 內存利用率:LXC > KVM > XEN
  • 隔離程序:XEN > KVM > LXC

Docker相關的核心技術之AUFS

  什么時AUFS?AUFS是一個能透明覆蓋一或多個現有文件系統的層狀文件系統。支持將不同目錄掛載到同一個虛擬文件系統下,可以把不同的目錄聯合在一起,組成一個單一的目錄。
這種是一種虛擬的文件系統,文件系統不用格式化,直接掛載即可。 Docker一直在用AUFS作為容器的文件系統。當一個進程需要修改一個文件時,AUFS創建該文件的一個副本。AUFS可以把多層合並成文件系統的單層表示。這個過程稱為寫入
復制(copy on write)。 AUFS允許Docker把某些鏡像作為容器的基礎。例如,你可能有一個作為很多不同容器的基礎的CentOS系統鏡像。多虧AUFS,只要一個CenOS鏡像的副本就足夠了,這樣即節省
存儲和內存,也保證更快速的容器部署。 使用AUFS的另一個好處是Docker的版本容器鏡像能力。每個新版本都是一個與之前版本簡單差異改動,有效地保持鏡像文件最小化,但者意味着你總是要有一個記錄該容器從一
個版本到另一個版本改動的審計跟蹤。

Docker原理之APP打包

  LXC的基礎上,Docker額外提供的Feature包括:標准統一的打包部署運行方案
  為了最大化重用Image,加快運行速度,減少內存和磁盤footprint,Docker container運行時所構造的運行環境,實際上是由具有依賴關系的多個Layer組成的。例如一個apache的運行環境可能是
在基礎的rootfs image的基礎上,疊加了包含例如Emacs等各種工具的image,在疊加包含apache及其相關依賴library的image,這些image由AUFS文件系統加載合並到統一路徑中,以只讀的方式
存在,最后在疊加加載一層可寫的空白的Layer用作記錄對當前運行環境所作的修改。 有了層級化的image做基礎,理想中,不同的APP就可以即可能的公用底層文件系統,相關依賴工具等,同一個APP的不同示例也可以實現公用絕大多數數據,進而以copy on write的形式維護自己的
那一份修改過的數據等

Docker全生命周期開發模式

 

 

  Docker正在迅速改變雲計算領域的運作規則,並切底顛覆雲技術的發展前景。從持續集成/基礎交付到微服務、開源協作仍至DevOps,Docker一路走來已經給應用程序開發生命周期以及雲工程技術
實踐帶來了巨大變革。

Docker的基本概念

 Docker Image

  • Docker Image是一個極度精簡版的Linux程序運行環境,比如Vi這行基本的工具沒有,官網的Java鏡像包括的東西更少,除非是鏡像疊加方式的,如CentOS+Java7
  • Dock Image是需要定制化Duild的一個“安裝包”,包括基礎鏡像+應用二進制部署包
  • Docker Image內不建議由運行期需要修改的配置文件
  • Dockfile用來創建一個自定義的image,包含了用戶指定的軟件依賴等。當前目錄下包含Dockfile,使用命令build來創建新的image
  • Docker Image的最佳實踐之一盡量重用和使用網上公開基礎鏡像

Docker Container

  • Docker Container是image的示例,共享內核
  • Docker Container里可以運行不同OS的Image,比如Ubuntu的或者CentOS
  • Docker Container不建議內部開啟一個SSHD服務,1.3版本后新增了docker exec命令進入容器內排查問題。
  • Docker Container沒有IP地址,通常不會由服務端口暴露,是一個封閉的"盒子/沙箱"

Docker Container的生命周期

 

 

Docker Daemon

  • Docker Daemon 是創建和運行Container的Linux守護進程,也是Docker最主要的核心組件
  • Docker Daemon 可以理解為Docker Container的Container
  • Docker Daemon可以綁定本地端口並提供Rest API服務,用來遠程訪問和控制

Docker Registry/Hub

  Docker之所以這么吸引人,除了它的新穎的技術外,圍繞官方registry(Docker Hub)的生態圈也是相當吸引人眼球的地方。在Docker Hub上你可以很輕松下載大量已經容器化好的應用鏡像,即拉即用。
這些鏡像中,有些是Docker官方維護的,更多的是眾多開發者自發上傳分享的。而且你還可以在Docker Hub中綁定你的代碼托管系統(目前支持Github和Bitbucket)配置自動生成鏡像工程,這樣
Docker Hub會在你代碼更新時自動生成對應的Docker鏡像。

Docker核心組件的關系

 文檔源自:http://edu.dataguru.cn 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM