日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

docker的分层

發布時間:2023/11/27 生活经验 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker的分层 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

docker的分層

Contents

  • docker的層
  • docker的層是怎么來的
  • docker是如何區分這些層
    • docker鏡像是如何區分這些層的
    • docker的層在本地的存儲
      • vfs
      • devicemapper

docker的層

在這里,我們首先做一個樣例,樣例設定為一個鏡像D。當然,這個D鏡像不是單層,而是從其他層繼承來的。

繼承關系如下所示:

─a  Virtual Size:10 KB└─b Virtual Size: 10 MB└─c Virtual Size: 100 MB└─d Virtual Size: 200 MB

D鏡像由a/b/c/d四層組成,我們以最后一層的大寫來稱謂這個鏡像,叫他D鏡像。同理,a/b/c三層組成的鏡像就是C鏡像。

docker的層是怎么來的

層嘛,當然是一層層堆疊起來的。

具體來說,就是比如你現在有了一個C的鏡像,然后你打算在上面增加一個軟件,比如tomcat。那么你無論是通過Dockerfile,異或是通過創建一個C的實例容器,然后commit出來,這個時候你就可以得到一個新的鏡像D。鏡像D除了有鏡像C之外,還有一部分新增的內容。所以這就有了新的一層d。以此類推,就有了諸多的層。

docker是如何區分這些層

docker如何區分這些層,我們從兩個角度來看,一個角度,是docker將這些層存儲在了本地的graph里,并使之受自己的管理。根據不同的存儲driver,當然會有一些細節的不同,但是大同小異。我這里用vfs和devicemapper的driver作為舉例。其他可以自己研習。另一個角度就是docker的鏡像在導入導出時,進行層次的區分。

docker鏡像是如何區分這些層的

先來介紹鏡像是如何區分的,這樣有利于理解在本地的存儲。

還是剛剛的例子,D鏡像有a/b/c/d四層。

那么我們以c和d兩層作為樣例來舉例。

顯然,鏡像C和D的關系是C是D的parent層。

那么從C到D,其實無外乎有四種修改:

  • 增加了某文件(文件夾也可以看做是文件,下面統寫為文件)
  • 刪除了某文件
  • 修改了某文件
  • 某文件不變

好了,現在我們有了c鏡像,然后如何來記錄D鏡像,也就是如何添加d層呢?顯然,有一個假定就是從C到D,大部分文件都沒有變化,所以只需要采用增量式記錄就可以了。具體來說就是

  • 增加了某文件:則在d層中直接增加該文件。比如C中沒有/d.txt,而在D中有,那么D中直接在根中加一個d.txt
  • 刪除了某文件:在d中進行標注,比如刪除了/c.txt,那么在D中,則生成一個/..c.txt的文件,表明這個文件已經奔刪除了。
  • 修改了某文件:因為跟C中的文件不同了,同增加了某文件。
  • 某文件不變:C中有/a.txt,D中就不必再包含了。

這樣就得到了d層。有了d層和C鏡像,根據上面的規則反推,就可以得到一個完整的D鏡像了。這就是分層的精髓。

docker的層在本地的存儲

我們從一個鏡像說起,我們現在得到了一個D鏡像,里面已經有了a/b/c/d四個層。好了,我現在來分別存儲。

因為存儲的目標是為了后面進行使用,所以在本地存儲,其實是為了得到四個完整的鏡像。所以,我要在本地其實要存儲A/B/C/D四個完整的鏡像。

docker的鏡像在本地的存儲。因為具體驅動不同,所以最終實現的效果不相同。

vfs

vfs是采用全量的方式來存儲鏡像的。比如有a層,那么鏡像A在vfs中存儲有a層的所有文件。鏡像B在vfs中將首先將a/b兩層的文件進行拼合(前文已經敘述),得到擁有所有文件的完整鏡像B,然后存在另一個目錄中。以此類推。

vfs的這種方式,有個很大弊端,就是對于層次多的鏡像,需要每次要拷貝很久。

比如本例中,A鏡像,需要10KB;B鏡像需要10MB;C鏡像需要100MB,D鏡像200MB。共需要310MB。

雖然D鏡像較之于C鏡像,只增加了d層,100MB的東西,但是在vfs中仍然要全部存儲。

devicemapper

vfs之所以要存儲全部,就是因為他沒有聯合的概念。與之相對的,就是devicemapper(dm)和aufs等聯合文件系統在分層上表現出來的強大能力。

聯合存儲是一種很神奇的東西。他可以把不同目錄下的文件融合到一個目錄下。比如在目錄dirA下有a.txt,dirB下有b.txt。聯合文件系統可以對用戶提供一個dir文件,里面包含了dirA和dirB下的內容,那么對于用戶,就可以看到dir下有兩個文件,a.txt和b.txt了。

在本例中,存儲鏡像A,是需要存儲完整的a層。但是在存儲鏡像B時,可以利用a層和b層之間的關系,只需要存儲增量部分的內容即可。同理,存儲到了D鏡像,只要存儲較之于C增量的100MB。較之于vfs,節省了很大的空間。

具體的dm或者aufs的原理,就需要再去研究他們是如何實現的聯合存儲了。



來自為知筆記(Wiz)



轉載于:https://www.cnblogs.com/ToBeSmart/p/4311249.html

總結

以上是生活随笔為你收集整理的docker的分层的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。