婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Docker鏡像存儲overlayfs的使用

Docker鏡像存儲overlayfs的使用

熱門標簽:高德地圖標注公司需要錢 外呼系統全國 廈門防封電銷電話卡 地圖標注能更改嗎 地圖標注員有發展前景嗎 濰坊寒亭400電話辦理多少錢 云南電商智能外呼系統哪家好 宜賓銷售外呼系統軟件 四川保險智能外呼系統

一、概述

  Docker中的鏡像采用分層構建設計,每個層可以稱之為“layer”,這些layer被存放在了/var/lib/docker/<storage-driver>/目錄下,這里的storage-driver可以有很多種如:AUFS、OverlayFS、VFS、Brtfs等。可以通過docker info命令查看存儲驅動,(筆者系統是centos7.4):

通常ubuntu類的系統默認采用的是AUFS,centos7.1+系列采用的是OverlayFS。而本文將介紹以OverlayFS作為存儲驅動的鏡像存儲原理以及存儲結構。

二、OverlayFS 介紹

  OverlayFS是一種堆疊文件系統,它依賴并建立在其它的文件系統之上(例如ext4fs和xfs等等),并不直接參與磁盤空間結構的劃分,僅僅將原來底層文件系統中不同的目錄進行“合并”,然后向用戶呈現,這也就是聯合掛載技術,對比于AUFS,OverlayFS速度更快,實現更簡單。 而Linux 內核為Docker提供的OverlayFS驅動有兩種:overlay和overlay2。而overlay2是相對于overlay的一種改進,在inode利用率方面比overlay更有效。但是overlay有環境需求:docker版本17.06.02+,宿主機文件系統需要是ext4或xfs格式。

聯合掛載

   overlayfs通過三個目錄:lower目錄、upper目錄、以及work目錄實現,其中lower目錄可以是多個,work目錄為工作基礎目錄,掛載后內容會被清空,且在使用過程中其內容用戶不可見,最后聯合掛載完成給用戶呈現的統一視圖稱為為merged目錄。以下使用mount將演示其如何工作的。

使用mount命令掛載overlayfs語法如下:

mount -t overlay overlay -o lowerdir=lower1:lower2:lower3,upperdir=upper,workdir=work merged_dir

創建三個目錄A、B、C,以及worker目錄:

然后使用mount聯合掛載到/tmp/test 下:

然后我們再去查看/tmp/test目錄,你會發現目錄A、B、C被合并到了一起,并且相同文件名的文件會進行“覆蓋”,這里覆蓋并不是真正的覆蓋,而是當合并時候目錄中兩個文件名稱都相同時,merged層目錄會顯示離它最近層的文件:

同時我們還可以通過mount命令查看其掛載的選項:

以上這樣的方式也就是聯合掛載技術。

Docker中的overlay驅動

  介紹了overlay驅動原理以后再來看Docker中的overlay存儲驅動,以下是來自docker官網關于overlay的工作原理圖:

在上述圖中可以看到三個層結構,即:lowerdir、uperdir、merged,其中lowerdir是只讀的image layer,其實就是rootfs,對比我們上述演示的目錄A和B,我們知道image layer可以分很多層,所以對應的lowerdir是可以有多個目錄。而upperdir則是在lowerdir之上的一層,這層是讀寫層,在啟動一個容器時候會進行創建,所有的對容器數據更改都發生在這里層,對比示例中的C。最后merged目錄是容器的掛載點,也就是給用戶暴露的統一視角,對比示例中的/tmp/test。而這些目錄層都保存在了/var/lib/docker/overlay2/或者/var/lib/docker/overlay/(如果使用overlay)。

演示

啟動一個容器

查看其overlay掛載點,可以發現其掛載的merged目錄、lowerdir、upperdir以及workdir:

overlay2的lowerdir可以有多個,并且是軟連接方式掛載,后續我們會進行說明。

如何工作

當容器中發生數據修改時候overlayfs存儲驅動又是如何進行工作的?以下將闡述其讀寫過程:

讀:

  • 如果文件在容器層(upperdir),直接讀取文件;
  • 如果文件不在容器層(upperdir),則從鏡像層(lowerdir)讀取;

修改:

  • 首次寫入: 如果在upperdir中不存在,overlay和overlay2執行copy_up操作,把文件從lowdir拷貝到upperdir,由于overlayfs是文件級別的(即使文件只有很少的一點修改,也會產生的copy_up的行為),后續對同一文件的在此寫入操作將對已經復制到容器的文件的副本進行操作。這也就是常常說的寫時復制(copy-on-write)
  • 刪除文件和目錄: 當文件在容器被刪除時,在容器層(upperdir)創建whiteout文件,鏡像層(lowerdir)的文件是不會被刪除的,因為他們是只讀的,但without文件會阻止他們顯示,當目錄在容器內被刪除時,在容器層(upperdir)一個不透明的目錄,這個和上面whiteout原理一樣,阻止用戶繼續訪問,即便鏡像層仍然存在。

注意事項

  • copy_up操作只發生在文件首次寫入,以后都是只修改副本,
  • overlayfs只適用兩層目錄,,相比于比AUFS,查找搜索都更快。
  • 容器層的文件刪除只是一個“障眼法”,是靠whiteout文件將其遮擋,image層并沒有刪除,這也就是為什么使用docker commit 提交保存的鏡像會越來越大,無論在容器層怎么刪除數據,image層都不會改變。

 三、overlay2鏡像存儲結構

從倉庫pull一個ubuntu鏡像,結果顯示總共拉取了4層鏡像如下:

此時4層被存儲在了/var/lib/docker/overlay2/目錄下:

這里面多了一個l目錄包含了所有層的軟連接,短鏈接使用短名稱,避免mount時候參數達到頁面大小限制(演示中mount命令查看時候的短目錄):

處于底層的鏡像目錄包含了一個diff和一個link文件,diff目錄存放了當前層的鏡像內容,而link文件則是與之對應的短名稱:

在這之上的鏡像還多了work目錄和lower文件,lower文件用于記錄父層的短名稱,work目錄用于聯合掛載指定的工作目錄。而這些目錄和鏡像的關系是怎么組織在的一起呢?答案是通過元數據關聯。元數據分為image元數據和layer元數據。

image元數據

  鏡像元數據存儲在了/var/lib/docker/image/<storage_driver>/imagedb/content/sha256/目錄下,名稱是以鏡像ID命名的文件,鏡像ID可通過docker images查看,這些文件以json的形式保存了該鏡像的rootfs信息、鏡像創建時間、構建歷史信息、所用容器、包括啟動的Entrypoint和CMD等等。例如ubuntu鏡像的id為47b19964fb50:

查看其對應的元數據(使用vim :%!python -m json.tool格式化成json) 截取了其rootfs的構成:

上面的 diff_id 對應的的是一個鏡像層,其排列也是有順序的,從上到下依次表示鏡像層的最低層到最頂層:

diff_id如何關聯進行層?具體說來,docker 利用 rootfs 中的每個diff_id 和歷史信息計算出與之對應的內容尋址的索引(chainID) ,而chaiID則關聯了layer層,進而關聯到每一個鏡像層的鏡像文件。

layer元數據

  layer 對應鏡像層的概念,在 docker 1.10 版本以前,鏡像通過一個 graph 結構管理,每一個鏡像層都擁有元數據,記錄了該層的構建信息以及父鏡像層 ID,而最上面的鏡像層會多記錄一些信息作為整個鏡像的元數據。graph 則根據鏡像 ID(即最上層的鏡像層 ID) 和每個鏡像層記錄的父鏡像層 ID 維護了一個樹狀的鏡像層結構。  

在 docker 1.10 版本后,鏡像元數據管理巨大的改變之一就是簡化了鏡像層的元數據,鏡像層只包含一個具體的鏡像層文件包。用戶在 docker 宿主機上下載了某個鏡像層之后,docker 會在宿主機上基于鏡像層文件包和 image 元數據構建本地的 layer 元數據,包括 diff、parent、size 等。而當 docker 將在宿主機上產生的新的鏡像層上傳到 registry 時,與新鏡像層相關的宿主機上的元數據也不會與鏡像層一塊打包上傳。  

Docker 中定義了 Layer 和 RWLayer 兩種接口,分別用來定義只讀層和可讀寫層的一些操作,又定義了 roLayer 和 mountedLayer,分別實現了上述兩種接口。其中,roLayer 用于描述不可改變的鏡像層,mountedLayer 用于描述可讀寫的容器層。具體來說,roLayer 存儲的內容主要有索引該鏡像層的 chainID、該鏡像層的校驗碼 diffID、父鏡像層 parent、storage_driver 存儲當前鏡像層文件的 cacheID、該鏡像層的 size 等內容。這些元數據被保存在 /var/lib/docker/image/<storage_driver>/layerdb/sha256/<chainID>/ 文件夾下。如下:

每個chainID目錄下會存在三個文件cache-id、diff、zize:

cache-id文件:

docker隨機生成的uuid,內容是保存鏡像層的目錄索引,也就是/var/lib/docker/overlay2/中的目錄,這就是為什么通過chainID能找到對應的layer目錄。以chainID為d801a12f6af7beff367268f99607376584d8b2da656dcd8656973b7ad9779ab4 對應的目錄為 130ea10d6f0ebfafc8ca260992c8d0bef63a1b5ca3a7d51a5cd1b1031d23efd5,也就保存在/var/lib/docker/overlay2/130ea10d6f0ebfafc8ca260992c8d0bef63a1b5ca3a7d51a5cd1b1031d23efd5

diff文件:

保存了鏡像元數據中的diff_id(與元數據中的diff_ids中的uuid對應)

size文件:

保存了鏡像層的大小

在 layer 的所有屬性中,diffID 采用 SHA256 算法,基于鏡像層文件包的內容計算得到。而 chainID 是基于內容存儲的索引,它是根據當前層與所有祖先鏡像層 diffID 計算出來的,具體算如下:

  • 如果該鏡像層是最底層(沒有父鏡像層),該層的 diffID 便是 chainID。
  • 該鏡像層的 chainID 計算公式為 chainID(n)=SHA256(chain(n-1) diffID(n)),也就是根據父鏡像層的 chainID 加上一個空格和當前層的 diffID,再計算 SHA256 校驗碼。

mountedLayer 信息存儲的可讀init層以及容器掛載點信息包括:容器 init 層ID(init-id)、聯合掛載使用的ID(mount-id)以及容器層的父層鏡像的 chainID(parent)。相關文件位于/var/lib/docker/image/<storage_driver>/layerdb/mounts/<container_id>/ 目錄下。如下啟動一個id為3c96960b3127的容器:

查看其對應的mountedLayer三個文件:

可以看到initID是在mountID后加了一個-init,同時initID就是存儲在/var/lib/docker/overlay2/的目錄名稱:

查看mountID還可以直接通過mount命令查看對應掛載的mountID,對應著/var/lib/docker/overlay2/目錄,這也是overlayfs呈現的merged目錄:

在容器中創建了一文件:

此時到宿主的merged目錄就能看到對應的文件:

關于init層

  init層是以一個uuid+-init結尾表示,夾在只讀層和讀寫層之間,作用是專門存放/etc/hosts、/etc/resolv.conf等信息,需要這一層的原因是當容器啟動時候,這些本該屬于image層的文件或目錄,比如hostname,用戶需要修改,但是image層又不允許修改,所以啟動時候通過單獨掛載一層init層,通過修改init層中的文件達到修改這些文件目的。而這些修改往往只讀當前容器生效,而在docker commit提交為鏡像時候,并不會將init層提交。該層文件存放的目錄為/var/lib/docker/overlay2/<init_id>/diff

小結

通過以上的內容介紹,一個容器完整的層應由三個部分組成,如下圖:

  • 鏡像層:也稱為rootfs,提供容器啟動的文件系統
  • init層: 用于修改容器中一些文件如/etc/hostname、/etc/resolv.conf等
  • 容器層:使用聯合掛載統一給用戶提供的可讀寫目錄。

四、總結

  本文介紹了以overlayfs作為存儲驅動的的鏡像存儲原理其中每層的鏡像數據保存在/var/lib/docker/overlay2/<uuid>/diff目錄下,init層數據保存了在 /var/lib/docker/overlay2/<init-id>/diff目錄下,最后統一視圖(容器層)數據在 /var/lib/docker/overlay2/<mount_id>/diff目錄下,docker通過image元數據和layer元數據利用內容尋址(chainID)將這些目錄組織起來構成容器所運行的文件系統。

參考:

《use overlayfs driver 》

《Docker 鏡像之存儲管理》

到此這篇關于Docker鏡像存儲overlayfs的使用的文章就介紹到這了,更多相關Docker鏡像存儲overlayfs內容請搜素腳本之家以前的文章或下面相關文章,希望大家以后多多支持腳本之家!

標簽:湛江 紅河 廣安 德州 巴彥淖爾 滁州 回訪 廊坊

巨人網絡通訊聲明:本文標題《Docker鏡像存儲overlayfs的使用》,本文關鍵詞  Docker,鏡像,存儲,overlayfs,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Docker鏡像存儲overlayfs的使用》相關的同類信息!
  • 本頁收集關于Docker鏡像存儲overlayfs的使用的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久久久久久久久久电影| 一色屋精品亚洲香蕉网站| 99久久精品免费看| 精品在线一区二区| 日本91福利区| 亚洲图片欧美色图| 亚洲国产成人av| 欧美亚洲国产怡红院影院| 国产精品欧美一区喷水| 一区二区三区资源| 久久精品无码一区二区三区| 欧美伊人精品成人久久综合97| 日韩一卡二卡三卡四卡| 视频一区欧美日韩| 色悠悠久久综合| 亚洲高清免费一级二级三级| 亚洲国产成人午夜在线一区| 亚洲午夜电影在线| 麻豆精品一区二区综合av| 偷拍一区二区三区| 精品久久久久久久久久久久包黑料 | 国产精品综合二区| 久久久久久免费毛片精品| 国产欧美精品一区二区三区四区| 蜜桃精品视频在线| 亚洲福中文字幕伊人影院| 麻豆国产精品一区二区三区 | 一区二区三区资源| 成人高清av在线| 成人性视频免费网站| 在线看国产一区二区| 亚洲一区二区欧美激情| 国产乱子伦视频一区二区三区| 麻豆一区二区三| 亚洲精品视频免费观看| 国产精品一二二区| 亚洲国产视频一区二区| 色乱码一区二区三区88| 国产精品电影院| 欧美xxxxx牲另类人与| 亚洲欧美色图小说| 中文字幕精品在线不卡| 亚洲精品国产一区二区精华液| 开心九九激情九九欧美日韩精美视频电影 | 国产成人一区二区精品非洲| 日韩一级高清毛片| 亚洲国产色一区| 国产精品污www在线观看| 国产中文一区二区三区| 欧美日韩精品一区二区三区| 国产成都精品91一区二区三| 久久久国际精品| 在线观看91精品国产麻豆| 亚洲激情第一区| 欧美日韩亚洲综合在线 | 91国偷自产一区二区三区成为亚洲经典| 国产欧美日韩精品在线| 麻豆国产一区二区| 亚洲午夜在线电影| 欧美男同性恋视频网站| 欧美猛男gaygay网站| 色噜噜夜夜夜综合网| 午夜av一区二区| 亚洲一区二区三区四区在线| 欧美日韩精品福利| 日韩影院在线观看| 日韩av电影免费观看高清完整版在线观看| 在线精品视频小说1| 成人综合在线视频| 亚洲欧美日韩国产中文在线| 91无套直看片红桃| 91欧美一区二区| 亚洲国产精品久久艾草纯爱| 97精品国产露脸对白| 91免费版pro下载短视频| 亚洲综合久久久久| 亚洲bt欧美bt精品| 国产日本一区二区| 午夜精品久久久久久久久久久 | 日韩一级二级三级| 久久精品国产999大香线蕉| 日韩激情视频在线观看| 国产欧美精品一区| 欧美日韩国产综合草草| 69堂精品视频| 国产91高潮流白浆在线麻豆| 日韩电影免费在线看| 青草av.久久免费一区| 中文在线一区二区| 亚洲天堂成人网| 欧美一二三在线| 精品久久久久久久久久久久久久久久久 | 国产综合成人久久大片91| 亚洲资源中文字幕| 日本一区二区三区免费乱视频| 中文字幕精品三区| 日韩欧美卡一卡二| 亚洲高清在线精品| 日本在线观看不卡视频| 亚洲欧美在线视频| 麻豆精品视频在线观看视频| 亚洲视频资源在线| 久久av老司机精品网站导航| 天堂资源在线中文精品| 久久精品视频免费观看| 亚洲男同1069视频| 久久久久久久久免费| 欧美日产在线观看| 欧美精品日日鲁夜夜添| 精品一区二区三区免费观看 | eeuss鲁片一区二区三区 | 久久精品视频在线看| 欧美一区二区三区视频在线| 国产精品免费看片| 国产三级精品在线| 国产三级一区二区三区| 久久精品夜夜夜夜久久| 色天天综合色天天久久| 欧美一区二区精品久久911| 精品视频色一区| 欧美一区二区成人6969| 国产精品麻豆一区二区| 久久久精品免费观看| 国产亚洲一区二区三区四区| 欧美精品一区二区三区高清aⅴ | 国内精品国产成人国产三级粉色| 亚洲国产综合色| 欧日韩精品视频| 欧美激情在线看| 日韩美女视频在线| 亚洲精品乱码久久久久久日本蜜臀| 一区在线观看视频| 91精品国产入口在线| 精品一区二区在线免费观看| 国内久久婷婷综合| 久久er99精品| 精品88久久久久88久久久| 日韩一区二区在线观看视频| 一区二区三区日韩精品| 一区二区三区精品在线观看| 亚洲乱码精品一二三四区日韩在线| 国产成人亚洲综合a∨婷婷图片| 国产69精品一区二区亚洲孕妇| 国内外精品视频| 欧美视频在线一区二区三区 | 午夜影院久久久| 中文字幕av资源一区| 国产激情一区二区三区| av电影在线观看不卡| 中文字幕一区日韩精品欧美| 中文字幕亚洲欧美在线不卡| 欧美疯狂性受xxxxx喷水图片| 亚洲成人资源在线| 国产综合一区二区| 日本一区二区三区四区在线视频| 亚洲乱码国产乱码精品精的特点 | 欧美美女一区二区| 粉嫩av一区二区三区粉嫩| 久久久久久久久99精品| 九九久久精品视频| 色8久久人人97超碰香蕉987| 亚洲午夜精品17c| 国产精品一区专区| 日韩美女视频一区| 久久精品国产一区二区三区免费看| 91精品国产综合久久国产大片| 欧美极品aⅴ影院| 午夜日韩在线电影| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品99久久久久久久vr| 在线看国产一区二区| 7777精品伊人久久久大香线蕉最新版| 美女网站色91| 在线精品亚洲一区二区不卡| 国产一区二区在线看| 欧美浪妇xxxx高跟鞋交| 国产一区视频在线看| 欧美一区二区私人影院日本| 亚洲精品国产一区二区精华液| 日韩欧美国产一区二区在线播放| 亚洲激情成人在线| 久久久久青草大香线综合精品| 久久超碰97中文字幕| 亚洲婷婷综合色高清在线| 日本欧美加勒比视频| 日韩 欧美一区二区三区| 色婷婷综合激情| 91美女视频网站| 蜜芽一区二区三区| 欧美日本国产一区| 丁香六月综合激情| 久久久不卡网国产精品二区| 欧美日韩成人在线| 亚洲国产成人精品视频| 美国十次了思思久久精品导航| 亚洲精品视频一区二区| 色素色在线综合| 91视频在线观看免费| 亚洲色图欧美偷拍| 国产日本欧美一区二区|