<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                > **overlayFS**是被稱為聯合文件系統的其中一個解決方案。在2014年,發布了第一個版本并且合并到了Linux的內核3.18版本中,此時,在docker被稱為是overlay文件驅動。后來在Linux 內核4.0 版本中進行了改進,稱為overlay2。(overlay存在諸多性能和不穩定的問題,不推薦使用overlay,直接使用默認的overlay2即可) # <span style="font-size:15px">**overlay2工作原理**</span> ![](https://img.kancloud.cn/e5/9f/e59f0c05dda5414df8a053bedbbd9a4e_1191x249.png) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overlayfs 通過三個目錄:lower 目錄、upper 目錄、以及 work 目錄實現,其中 lower 目錄可以是多個,work 目錄為工作基礎目錄,掛載后內容會被清空,且在使用過程中其內容用戶不可見,最后聯合掛載完成給用戶呈現的統一視圖稱為為 merged 目錄。 * lowerdir對應底層文件系統,是能被上層文件系統upperdir所共享的只讀層 * workdir則可以理解為overlay2運作的一個工作目錄,用于完成copy-on-write等操作 * overlay2運作時(也就是容器啟動時),會將lowerdir、upperdir和workdir聯合掛載到merged目錄,為使用者提供一個“**統一視圖**” &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看 `/var/lib/docker/overlay2/容器ID`目錄結構,使用`mount | grep overlay`查看overlay的掛載情況。如圖,確實此目錄下的link、lower、work、diff等目錄是通過掛載多個目錄后,合并顯示在一起的。 ![](https://img.kancloud.cn/40/e1/40e18b73e7d9340bf657960d180796e4_1871x172.png) # <span style="font-size:15px">**overlay2 是如何存儲文件的?**</span> ## <span style="font-size:15px">**鏡像怎么存儲的?**</span> 1、為了更好的演示,使用一個純凈的環境:沒有任何鏡像和容器,/var/lib/docker/overlay2目錄也是空的 ![](https://img.kancloud.cn/fa/10/fa10245d011b85241a36dde616368600_952x159.png) 2、拉取一個nginx鏡像,觀察拉取過程:可以看到鏡像一共被分為6層拉取。 ![](https://img.kancloud.cn/8c/89/8c899d2335b259e9ee5f7fa5e47454bf_915x201.png) 3、/var/lib/docker/overlay2/ 目錄下也多了6個文件夾 ![](https://img.kancloud.cn/12/89/12898e3cc6442d855c916e70afb7d418_1696x98.png) 4、首先來查看一下l目錄,可以看到l目錄是一堆軟連接,把一些較短的隨機串軟連到鏡像層的 diff 文件夾下,這樣做是為了避免達到mount命令參數的長度限制 ![](https://img.kancloud.cn/fb/d4/fbd49528ae56fe71b63c61460a9a0cf6_1570x218.png) 5、`docker image inspect nginx` 查看nginx鏡像的信息,每個鏡像都會有一個`GraphDriver.Data`信息,這個信息指示了鏡像是怎么存的 ![](https://img.kancloud.cn/e4/04/e40401cdd18073c9b7ddd7b8d96454de_1881x435.png) 6、將這6個文件夾全部展開,可以看到目錄結構幾乎都是一致的,需要重點關注的是diff文件夾和lower文件。 可以看到`5160f86fbe7acce3826ed5c7d1acdb351b931d67978b1c91138d86b7eef8d0ab`文件夾中不存在lower文件,說明它是最底層的,等于是根鏡像,即docker pull時下載的第一層。 同時,`diff`文件夾下的文件,正是Linux文件目錄結構。說明在nginx的dockerfile中,肯定有FROM centos的操作。 ![](https://img.kancloud.cn/4f/5e/4f5e91d44806bd99d952b53240af4647_1644x276.png) **實例說明:`Dockerfile`的每一個命令都可能引起了系統的變化,它的每一個變化都會記錄一層diff文件。** ## <span style="font-size:15px">**容器怎么存儲的?**</span> 1、當前環境有一個nginx鏡像,/var/lib/docker/overlay2/ 目錄下只有鏡像層的存儲目錄。 ![](https://img.kancloud.cn/00/bb/00bbc4d093c031ac444fa244e62cc1cc_1685x126.png) 2、docker run 啟動一個容器 ![](https://img.kancloud.cn/ba/02/ba02e8e6071da7278f2220671d99fcd8_1128x105.png) 3、查看/var/lib/docker/overlay2/ 目錄,發現新增了兩個目錄:其中帶`-init`的目錄是只讀的;沒有init的容器目錄才是容器的讀寫目錄 ![](https://img.kancloud.cn/7e/75/7e751a6debb0ce0ba5865714e05893d1_1054x223.png) 4、`link`和`lower`文件與鏡像層的功能一致,`link`文件內容為該容器層的`短 ID`,`lower`文件為該層的所有父層鏡像的`短 ID`。`diff`目錄為容器的讀寫層,容器內修改的文件都會在`diff`中出現,`merged`目錄為分層文件聯合掛載后的結果,也是容器內的工作目錄。 ![](https://img.kancloud.cn/65/8b/658b8e329ca5bf005d066fb620e09d20_1070x103.png) ![](https://img.kancloud.cn/60/73/6073e3287c1274dc6a3b91dfb6ecb229_1731x215.png) 5、根據 docker inspect nginx獲取到的`GraphDriver.Data`數據顯示,merged目錄,是lowerDir各個目錄合并UpperDir各個目錄后的結果。 ![](https://img.kancloud.cn/19/d1/19d1989757d317299ca149ac5c42c95e_1446x116.png) 6、當我們進入容器創建文件時,文件也會出現在這里。 ![](https://img.kancloud.cn/8e/c2/8ec2d54c0a9fc8e66f49536edf9eb73d_1688x208.png) <nr> <br> **結論:** overlay2將鏡像層和容器層都放在單獨的目錄,并且有唯一 ID,每一層僅存儲發生變化的文件,最終使用聯合掛載技術將容器層和鏡像層的所有文件統一掛載到容器中,使得容器中看到完整的系統文件。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看