Dokcer 組成原理簡介


  首先來張圖了解Docker的組成

  Docker基礎技術:AUFS

重要  

  Docker在啟動容器的時候,需要創建文件系統,為rootfs提供掛載點。最初Docker僅能在支持Aufs文件系統的Linux發行版上運行,但是由於Aufs未能加入Linux內核,為了尋求兼容性、擴展性,Docker在內部通過graphdriver機制這種可擴展的方式來實現對不同文件系統的支持。目前,Docker支持Aufs,Devicemapper,Btrfs和Vfs四種文件系統。  

Docker鏡像

  典型的Linux文件系統由bootfsrootfs兩部分組成,bootfs(boot file system)主要包含 bootloader和kernel,bootloader主要是引導加載kernel,當kernel被加載到內存中后 bootfs就被umount了。 rootfs (root file system) 包含的就是典型 Linux 系統中的/dev,/proc,/bin,/etc等標准目錄和文件。  

  Docker容器是建立在Aufs基礎上的,Aufs(以前稱之為Another Union FS,后來絕不不夠高大上,更名為Advanced Union FS)是一種Union FS, 簡單來說就是支持將不同的目錄掛載到同一個虛擬文件系統下,並實現一種layer的概念。Aufs將掛載到同一虛擬文件系統下的多個目錄分別設置成read-only,read-write以及whiteout-able權限,對read-only目錄只能讀,而寫操作只能實施在read-write目錄中。重點在於,寫操作是在read-only上的一種增量操作,不影響read-only目錄。當掛載目錄的時候要嚴格按照各目錄之間的這種增量關系,將被增量操作的目錄優先於在它基礎上增量操作的目錄掛載,待所有目錄掛載結束了,繼續掛載一個read-write目錄,如此便形成了一種層次結構。

與傳統系統加載的區別

  Docker鏡像的典型結構如下圖。  

  【重點】

  傳統的Linux加載bootfs時會先將rootfs設為read-only,然后在系統自檢之后將rootfs從read-only改為read-write,然后我們就可以在rootfs上進行寫和讀的操作了。

  但Docker的鏡像卻不是這樣,它在bootfs自檢完畢之后並不會把rootfs的read-only改為read-write。而是利用union mount(UnionFS的一種掛載機制)將一個或多個read-only的rootfs加載到之前的read-only的rootfs層之上。在加載了這么多層的rootfs之后,仍然讓它看起來只像是一個文件系統,在Docker的體系里把union mount的這些read-only的rootfs叫做Docker的鏡像。但是,此時的每一層rootfs都是read-only的,我們此時還不能對其進行操作。當我們創建一個容器,也就是將Docker鏡像進行實例化,系統會在一層或是多層read-only的rootfs之上分配一層空的read-write的rootfs。

 


 

【參考】

  1.http://www.open-open.com/lib/view/open1440483391763.html 講述在ubuntu下面aufs的實現原理以及實踐

  2.http://www.infoq.com/cn/articles/analysis-of-docker-file-system-aufs-and-devicemapper/ Docker基於aufs的實現原理以及二者的細微差別


免責聲明!

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



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