<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國際加速解決方案。 廣告
                [TOC] # <span style="font-size:15px">**overlay2驅動文件系統的根目錄結構**</span> ``` [root@iZbp1bum6107bp8mgzkeunZ docker]# ll /var/lib/docker/image/overlay2/ total 16 drwx------ 4 root root 4096 Apr 4 2022 distribution drwx------ 4 root root 4096 Apr 4 2022 imagedb drwx------ 5 root root 4096 Apr 4 2022 layerdb -rw------- 1 root root 2585 Jun 5 16:35 repositories.json ``` # <span style="font-size:15px">**鏡像庫元數據:repositories.json**</span> ``` [root@iZbp1bum6107bp8mgzkeunZ overlay2]# cat repositories.json | jq { "Repositories": { "alpine": { "alpine:latest": "sha256:76c8fb57b6fc8599de38027112c47170bd19f99e7945392bd78d6816db01f4ad", "sha256:9c6f0724472873bb50a2ae67a9e7adcb57673a183cea8b06eb778dca859181b5", "alpine@sha256:f22945d45ee2eb4dd463ed5a431d9f04fcd80ca768bb1acf898d91ce51f7bf04": "sha256:76c8fb57b6fc8599de38027112c47170bd19f99e7945392bd78d6816db01f4ad" }, "centos": { "centos:7": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9", "centos@sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9" }, "elasticsearch": { "elasticsearch:7.17.2": "sha256:ff55ff4ded04f5512613ca71b29b0fdf093b6ba95aa4ed4264a18a8045ad0d59", "elasticsearch@sha256:f51e653b5dfca16afef88d870b697e087e4b562c63c3272d6e8c3c92657110d9": "sha256:ff55ff4ded04f5512613ca71b29b0fdf093b6ba95aa4ed4264a18a8045ad0d59" }, "hello_docker": { "hello_docker:latest": "sha256:9482dcef2f5d13b234ecfdd7ff43b2ebf12e2eef1c9d4fa3dadf8a574cd15d47" } } } ``` &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repository 是由具有某個功能的 docker 鏡像的所有迭代版本構成的鏡像庫。repository的信息記錄在repositories.json文件中。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repositories.json 文件存儲了所有本地鏡像的元數據,包括鏡像庫名字、鏡像名字、標簽和鏡像ID。上面示例中的 alpine、centos、elasticsearch、hello_docker就是鏡像庫名字。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;docker默認采用SHA256算法根據鏡像元數據配置文件計算出鏡像ID。上面示例中的`alpine:latest`和`alpine@sha256:f22945d45ee2eb4dd463ed5a431d9f04fcd80ca768bb1acf898d91ce51f7bf04`本質上是一樣的,因為他們都指向同一個鏡像ID:`76c8fb57b6fc8599de38027112c47170bd19f99e7945392bd78d6816db01f4ad`。在docker images中可以看到對應的image id的縮寫`76c8fb57b6fc`。 ``` [root@iZbp1bum6107bp8mgzkeunZ overlay2]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest 76c8fb57b6fc 6 months ago 5.57MB elasticsearch 7.17.2 ff55ff4ded04 6 months ago 611MB kibana 7.17.2 19591c8c1eb3 6 months ago 889MB ubuntu latest ff0fea8310f3 7 months ago 72.8MB centos 7 eeb6ee3f44bd 13 months ago 204MB ``` 其中`sha256:f22945d45ee2eb4dd463ed5a431d9f04fcd80ca768bb1acf898d91ce51f7bf04`被稱為鏡像的摘要,在拉取鏡像的時候可以看到。 ![](https://img.kancloud.cn/ed/c1/edc1cdaa71a7384de839ef3702d90d74_663x92.png) # <span style="font-size:15px">**鏡像元數據**</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image元數據包括了鏡像架構(如amd64)、操作系統、鏡像默認配置、構建該鏡像的容器ID和配置、構建該鏡像的docker版本、構建鏡像的歷史信息以及rottfs組成。其中構建鏡像的歷史信息和 rootfs 組成部分除了具有描述鏡像的作用外,還將鏡像和構成該鏡像的鏡像層關聯了起來。**Docker 會根據歷史信息和 rootfs 中的`diff_ids`計算出構成該鏡像的鏡像層的存儲索引`chainID`,這也是 docker 1.10 鏡像存儲中基于內容尋址的核心技術。** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; images元數據被保存在文件 `/var/lib/docker/image//imagedb/content/sha256/ `中。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以elasticsearch鏡像為例:elasticsearch:7.17.2鏡像保存在`/var/lib/docker/image/overlay2/imagedb/content/sha256/ff55ff4ded04f5512613ca71b29b0fdf093b6ba95aa4ed4264a18a8045ad0d59`文件中。 ``` [root@iZbp1bum6107bp8mgzkeunZ sha256]# docker images | grep elast elasticsearch 7.17.2 ff55ff4ded04 6 months ago 611MB [root@iZbp1bum6107bp8mgzkeunZ sha256]# pwd /var/lib/docker/image/overlay2/imagedb/content/sha256 [root@iZbp1bum6107bp8mgzkeunZ sha256]# ls ff55ff4ded04f5512613ca71b29b0fdf093b6ba95aa4ed4264a18a8045ad0d59 ff55ff4ded04f5512613ca71b29b0fdf093b6ba95aa4ed4264a18a8045ad0d59 ``` ![](https://img.kancloud.cn/e5/c4/e5c4489cc37f6a5ef39e4f1f33d62844_1052x827.png)![](https://img.kancloud.cn/b7/b2/b7b2103cc94605126426eab4c15fb99a_776x252.png) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;從圖片中可以看到,elasticsearch:7.17.鏡像元數據中包含了鏡像配置和構建配置,其中rootfs中的diff_ids就是鏡像層,**在構建鏡像容器時,會從上到下依次依賴構建。** # <span style="font-size:15px">**鏡像層元數據**</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在 docker 1.10 版本后,鏡像元數據管理巨大的改變之一就是簡化了鏡像層的元數據,鏡像層只包含一個具體的鏡像層文件包。用戶在 docker 宿主機上下載了某個鏡像層之后,docker 會在宿主機上基于鏡像層文件包和 image 元數據構建本地的 layer 元數據,包括 diff、parent、size 等。而當 docker 將在宿主機上產生的新的鏡像層上傳到 registry 時,與新鏡像層相關的宿主機上的元數據也不會與鏡像層一塊打包上傳。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;鏡像層數據存儲在`/var/lib/docker/image/<graph_driver>/layerdb/sha256/<chainID>/`目錄下。 ``` // 目錄結構如下 [root@iZbp1bum6107bp8mgzkeunZ db8dff71c91610e7c7e947bc060c9ecfe0a43d75fddc95de3f2002984f25ba0b]# tree . ├── cache-id # docker 隨機生成的 uuid,內容是保存鏡像層的目錄索引,即是鏡像層的數據文件存放的目錄名 ├── diff # diff文件的內容正是diff_ids中的鏡像層id ├── parent # parent文件記錄的是上層鏡像層的id,對于最底層的layer來說,由于沒有父layer,所以沒有這個文件 ├── size # 記錄的是當前鏡像層的大小,單位是字節 └── tar-split.json.gz # layer壓縮包的是split文件,通過這個文件可以還原layer的tar包。在docker save導出image的時候會用到 ``` ## <span style="font-size:15px">**計算chainID的具體方法**</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;從image元數據中,拿到了`diff_ids`之后需要去找到對應的鏡像層元數據。 以elasticsearch:7.17.鏡像元數據的`diff_ids`為例: ``` [root@iZbp1bum6107bp8mgzkeunZ sha256]# cat ff55ff4ded04f5512613ca71b29b0fdf093b6ba95aa4ed4264a18a8045ad0d59 | jq { "architecture": "amd64", ... "rootfs": { "type": "layers", "diff_ids": [ "sha256:867d0767a47c392f80acb51572851923d6d3e55289828b0cd84a96ba342660c7", "sha256:b5965a019fc65d7950827a769b7a9e49b53fcef2f55ed54595a5f8b409afb00a", "sha256:a64b4c94a654b7617e8fdf0c56702e1347765f8e8f22abfcf0cb1e8edcb961f5", "sha256:339b287ac1a76218be5c6216f4698adb48142bdb0484132afd58256c1af23b5e", "sha256:16bb710c979fc3824ccbd473b7de579dc47bb6f5cffccc2a5753eb5a4c313617", "sha256:0f3c2698b8d05dad9c748902696f9f4e961f26c1388571217e54287214728fa1", "sha256:d9e6d48b0a3b739f2e31470066d65f1e2617541e1c9bfb67c0e3d4d02805e784", "sha256:96115e941eecd52363a4908b3b076abe68b1ced66e9fe7a33635254393e17c39", "sha256:9753a5f19e15c70e1764231cfd4b0dc8289b8f06447b48a11320d37a25d4fa90" ] } } } ``` &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;鏡像層的 chainID 計算公式為 `chainID(n)=SHA256(chain(n-1) diffID(n))`,也就是根據父鏡像層的 chainID 加上一個空格和當前層的 diffID,再計算 SHA256 的哈希值 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;計算步驟如下: 1. 由于鏡像層在構建容器時,是由上到下依次構建,因此第一層的鏡像層id是最底層的,sha256之后的隨機數值即使chainID值 2. 根據公式,由第一層的值加上空格,拼接第二層的diffID值,使用sha256sum命令計算SHA256哈希值,得出的結果就是第二層的chainID。 3. 第三層的chainID,即使用 “sha256:”拼接第二層的chainID來與第三層的diffID來計算,依次類推。 ``` // edbab184adac1d80d52d20ad99196a61f9406640ccf96e1995285d3a72928517 就是第二層的chainID [root@iZbp1bum6107bp8mgzkeunZ sha256]# echo -n "sha256:867d0767a47c392f80acb51572851923d6d3e55289828b0cd84a96ba342660c7 sha256:b5965a019fc65d7950827a769b7a9e49b53fcef2f55ed54595a5f8b409afb00a" | sha256sum | awk '{print $1}' edbab184adac1d80d52d20ad99196a61f9406640ccf96e1995285d3a72928517 [root@iZbp1bum6107bp8mgzkeunZ sha256]# ls /var/lib/docker/image/overlay2/layerdb/sha256/edbab184adac1d80d52d20ad99196a61f9406640ccf96e1995285d3a72928517 cache-id diff parent size tar-split.json.gz [root@iZbp1bum6107bp8mgzkeunZ sha256]# cat /var/lib/docker/image/overlay2/layerdb/sha256/edbab184adac1d80d52d20ad99196a61f9406640ccf96e1995285d3a72928517/diff && echo sha256:b5965a019fc65d7950827a769b7a9e49b53fcef2f55ed54595a5f8b409afb00a // 第三層diffID (sha256:a64b4c94a654b7617e8fdf0c56702e1347765f8e8f22abfcf0cb1e8edcb961f5)計算方式 [root@iZbp1bum6107bp8mgzkeunZ sha256]# echo -n "sha256:edbab184adac1d80d52d20ad99196a61f9406640ccf96e1995285d3a72928517 sha256:a64b4c94a654b7617e8fdf0c56702e1347765f8e8f22abfcf0cb1e8edcb961f5" | sha256sum | awk '{print $1}' 1cf2d211cdb7a36dc7366f91b596c7d1f68940a529c5705aefa175e87c7b3aef [root@iZbp1bum6107bp8mgzkeunZ sha256]# ls /var/lib/docker/image/overlay2/layerdb/sha256/1cf2d211cdb7a36dc7366f91b596c7d1f68940a529c5705aefa175e87c7b3aef cache-id diff parent size tar-split.json.gz [root@iZbp1bum6107bp8mgzkeunZ sha256]# cat /var/lib/docker/image/overlay2/layerdb/sha256/1cf2d211cdb7a36dc7366f91b596c7d1f68940a529c5705aefa175e87c7b3aef/diff && echo sha256:a64b4c94a654b7617e8fdf0c56702e1347765f8e8f22abfcf0cb1e8edcb961f5 ``` # <span style="font-size:15px">**容器存儲**</span> ``` [root@iZbp1bum6107bp8mgzkeunZ overlay2]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b8464578be3d elasticsearch:7.17.2 "/bin/tini -- /usr/l…" 6 months ago Exited (143) 7 hours ago elasticsearch ``` &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通過 docker ps命令可以查詢到容器的ID,由**CONTAINER ID**可以/var/lib/docker/下找到二個目錄: ``` // 1、/var/lib/docker/containers/目錄 // 很明顯容器的hosts,hostname等配置文件是存儲在這個目錄下的 [root@iZbp1bum6107bp8mgzkeunZ layerdb]# ls /var/lib/docker/containers/*b8464578be3d* b8464578be3dcb1b260e31cf9a934232cf837fb37a6c8aa98c6eeafce8d38459-json.log checkpoints config.v2.json hostconfig.json hostname hosts mounts resolv.conf resolv.conf.hash // 2、/var/lib/docker/image/overlay2/layerdb/mounts/ 目錄下 [root@iZbp1bum6107bp8mgzkeunZ mounts]# ls /var/lib/docker/image/overlay2/layerdb/mounts/*b8464578be3d* init-id mount-id parent ``` &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下例子可以看出該目錄下init-id和mount-id的值是一樣的 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aba555ae0cdb873c0f4bed44f5320ec91e4e04d244acf537bc415489b8befcc2就是container的數據文件,在/var/lib/docker/overlay2中的目錄名。 ``` [root@iZbp1bum6107bp8mgzkeunZ b8464578be3dcb1b260e31cf9a934232cf837fb37a6c8aa98c6eeafce8d38459]# pwd /var/lib/docker/image/overlay2/layerdb/mounts/b8464578be3dcb1b260e31cf9a934232cf837fb37a6c8aa98c6eeafce8d38459 [root@iZbp1bum6107bp8mgzkeunZ b8464578be3dcb1b260e31cf9a934232cf837fb37a6c8aa98c6eeafce8d38459]# cat mount-id && echo aba555ae0cdb873c0f4bed44f5320ec91e4e04d244acf537bc415489b8befcc2 [root@iZbp1bum6107bp8mgzkeunZ b8464578be3dcb1b260e31cf9a934232cf837fb37a6c8aa98c6eeafce8d38459]# cat init-id && echo aba555ae0cdb873c0f4bed44f5320ec91e4e04d244acf537bc415489b8befcc2-init [root@iZbp1bum6107bp8mgzkeunZ b8464578be3dcb1b260e31cf9a934232cf837fb37a6c8aa98c6eeafce8d38459]# ls /var/lib/docker/overlay2/aba555ae0cdb873c0f4bed44f5320ec91e4e04d244acf537bc415489b8befcc2 diff link lower work ```
                  <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>

                              哎呀哎呀视频在线观看