亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

容器鏡像本地存儲

2024-08-29 09:42:20
6
0

1. 鏡像構建

       鏡像的構建需要根據oci定義(yi)的規范來進行構建,OCI鏡(jing)像(xiang)規范(image-spec)指定了鏡(jing)像(xiang)需要(yao)按照什么標準來構建,Dockerfile則決定了鏡(jing)(jing)像的(de)layer(鏡(jing)(jing)像層)的(de)內容和相關一(yi)些元(yuan)數據(ju)  簡而言之:

                          image-spec+DockerFile ====> image

1.1 鏡像構建的過程

構建(jian)鏡像docker build的(de)流程:

  • 在Docker Cli 執(zhi)行(xing)鏡(jing)像構建命令并且使(shi)用-f參(can)數來指定(ding)Dockerfile文(wen)件(jian),-t 指定(ding)構建出的鏡(jing)像標簽信息;

  • Docker Cli 會將構(gou)建(jian)命令(ling)后面指定(ding)的路(lu)徑(.)上下文環境(jing)所有(you)文件打(da)包成一個 tar 包,并發送給 Docker 服務端(duan);

  • Docker Deamon 收到客戶端發送的 tar 包并解(jie)壓,根據 Dockerfile 里面的指令進行鏡像的分層構建;

  • Docker 下(xia)載(zai) FROM 語句(ju)中(zhong)指定的基(ji)(ji)礎鏡像,然后將基(ji)(ji)礎鏡像的 layer 聯(lian)合(he)掛載(zai)為一層并在上(shang)面(mian)創(chuang)建一個(ge)空目錄;

  • 此時會啟(qi)動一個臨時的容器并在 chroot 中啟(qi)動一個 bash, 運行 RUN 語句中的命(ming)令:RUN : chroot . bin/bash -c "apt get update ... ..."

  • 在RUN命(ming)令執(zhi)行完畢后,會(hui)將當前層(ceng)目(mu)錄進行壓縮從而形成新鏡(jing)像中的(de)新的(de)一(yi)層(ceng), 同時(shi)為下一(yi)層(ceng)提供(gong)基礎(chu)鏡(jing)像;

  • 如果 Dockerfile 中包含其它命令,就以之(zhi)前(qian)構(gou)建的(de)層次為基礎,從第(di)二步(bu)開始重復創建新層,直(zhi)到(dao)完成所有語句后(hou)退出;

  • 在(zai) Dockerfile 中包含的所(suo)有指令(ling)命令(ling)執行完畢后鏡(jing)像構建完成,并(bing)為該鏡(jing)像打上Tag

 

2. 鏡像存儲

2.1 本地存(cun)儲

當Docker 在構(gou)建完鏡像(xiang)后會將其(qi)存儲在Docker 本(ben)地存儲家目錄中,默認情(qing)況即/var/lib/docker/

一個image 包含(han) Manifest 、images Index 、 Layer Filesystem、Image Configuration

對于(yu)鏡像存儲路徑最重要的默認路徑下(xia)(xia)的image 和 overlay2 這(zhe)個(ge)兩個(ge)目錄(lu),容器的元數(shu)據存放在(zai) image 目錄(lu)下(xia)(xia),容器的 layer 數(shu)據則存放在(zai) overlay2 目錄(lu)下(xia)(xia)。

 

/var/lib/docker/image/overlay2/repositories.json

當我們 docker run 一個容器的時(shi)候也用到這(zhe)個文件去(qu)索引本地(di)是否存(cun)在該鏡像,沒有(you)鏡像的話就自動去(qu) pull 這(zhe)個鏡像。

 

/var/lib/docker/image/overlay2/imagedb/content/sha256

存放目錄名為鏡像id內容是(shi)image config

 

2.2 容器在磁盤的存儲

容器(qi)的文(wen)件系統分為三(san)層(ceng): - r/o層(ceng):也就是(shi)鏡像(xiang)層(ceng) - init層(ceng):啟動容器(qi)時(shi)的參(can)數 - r/w層(ceng):可讀(du)寫層(ceng)

前面我們知(zhi)道(dao)鏡像存儲在/var/lib/docker/overlay2下面,這里不僅包含(han)了(le)只讀(r/o)層,init層和r/w層都在這個(ge)里面。 

運行一(yi)個容器會返回(hui)一(yi)個容器id. 通過(guo)這(zhe)個id,我們能在/var/lib/docker/image/overlay2/layerdb/mounts目錄下找到該容器(qi)的信息:

 

2.3 查找(zhao)本地鏡像(xiang)的過程

1. 查找(zhao)/var/lib/docker/image/overlay2/repositories.json文(wen)件(jian),找(zhao)到對應版本的(de)imageId

2. 根據imageId在/var/lib/docker/image/overlay2/imagedb/content/sha256文(wen)件,文(wen)件名為imageId,內容是對應鏡像配置(zhi)(image.config)

3. 根據Image.config內(nei)的diff_id 到image/overlay2/layerdb/sha256 查找,根據chainID和diff_id的計算公式

 chaninid(1) = diffid(1)  chainid(n) = sha256(chain(n-1) diffid(n) )

4. 上述(shu)計算可以獲取(qu)各個不同鏡像層(ceng)在(zai) /var/lib/docker/overlay2 目錄下各個鏡像層(ceng)的uuid目錄

5. 上述uuid目錄下的diff 就(jiu)是(shi)各(ge)個鏡像層的文件系(xi)統

 

3 鏡像id梳理

imageID是(shi)對Image Configuration文件的(de)sha256哈希后的(de)得(de)到

manifest_digestId是對docker pull拉(la)取(qu)鏡像(xiang)的(de)manifest文(wen)件的(de)sha256哈(ha)希得到的(de)字符串

layer_diffId是對layer文(wen)件(.tar)sha256哈希得到的id

manifest_layer_digest是對壓縮后的layer文件(.tar.gz) sha256哈希的到id

chainId 計算(suan)diff_id獲取,公式:chaninid(1) = diffid(1)  chainid(n) = sha256(chain(n-1) diffid(n) )

cache_id 宿(su)主機隨(sui)機生(sheng)成的uuid

 

 

 

 

 

0條評論
作者已關閉評論
Ssssss云
5文章數
0粉(fen)絲(si)數
Ssssss云
5 文章 | 0 粉絲
原(yuan)創

容器鏡像本地存儲

2024-08-29 09:42:20
6
0

1. 鏡像構建

       鏡像的構建(jian)需要(yao)根據oci定義的規范(fan)來進行構建(jian),OCI鏡像(xiang)規范(image-spec)指定了鏡像(xiang)需(xu)要(yao)按(an)照什(shen)么標準來構建,Dockerfile則決定了鏡像(xiang)的layer(鏡像(xiang)層)的內(nei)容(rong)和(he)相關一些元數據  簡而言(yan)之(zhi):

                          image-spec+DockerFile ====> image

1.1 鏡像構建的(de)過(guo)程

構建鏡像(xiang)docker build的流程:

  • 在(zai)Docker Cli 執行鏡像構建命令并且(qie)使用-f參數來指(zhi)定Dockerfile文(wen)件,-t 指(zhi)定構建出的(de)鏡像標簽信息;

  • Docker Cli 會將構建命令后面指定的路徑(.)上下文環境所有文件(jian)打包成(cheng)一個 tar 包,并發送給(gei) Docker 服務端;

  • Docker Deamon 收到(dao)客(ke)戶(hu)端發(fa)送的(de)(de) tar 包(bao)并解(jie)壓,根(gen)據 Dockerfile 里(li)面的(de)(de)指(zhi)令進行(xing)鏡像(xiang)的(de)(de)分層構建;

  • Docker 下載 FROM 語句中(zhong)指定(ding)的基礎鏡像,然后將(jiang)基礎鏡像的 layer 聯合掛載為一層并在上面創(chuang)建一個空目錄;

  • 此時(shi)會啟動一個臨時(shi)的容器并在 chroot 中啟動一個 bash, 運行(xing) RUN 語句中的命令:RUN : chroot . bin/bash -c "apt get update ... ..."

  • 在(zai)RUN命令執(zhi)行(xing)完畢(bi)后,會將當前層目錄進(jin)行(xing)壓縮從而形成新(xin)鏡像中(zhong)的新(xin)的一層, 同時為下一層提供基(ji)礎鏡像;

  • 如果 Dockerfile 中包含(han)其它命令,就以之前(qian)構建(jian)的層(ceng)次為基礎,從第二步(bu)開始重復創(chuang)建(jian)新層(ceng),直(zhi)到完成所有語(yu)句(ju)后退出;

  • 在 Dockerfile 中包(bao)含(han)的所有(you)指令(ling)命(ming)令(ling)執(zhi)行完(wan)畢后鏡(jing)像構建完(wan)成,并(bing)為該鏡(jing)像打(da)上(shang)Tag

 

2. 鏡像存儲

2.1 本地存儲

當(dang)Docker 在構(gou)建完(wan)鏡像后會(hui)將其存儲在Docker 本地存儲家目錄中,默認情況(kuang)即/var/lib/docker/

一個image 包含 Manifest 、images Index 、 Layer Filesystem、Image Configuration

對于鏡像存(cun)儲路徑最重要的(de)默認路徑下(xia)的(de)image 和(he) overlay2 這個兩個目(mu)錄(lu),容器(qi)(qi)的(de)元數(shu)據存(cun)放在(zai) image 目(mu)錄(lu)下(xia),容器(qi)(qi)的(de) layer 數(shu)據則存(cun)放在(zai) overlay2 目(mu)錄(lu)下(xia)。

 

/var/lib/docker/image/overlay2/repositories.json

當我們(men) docker run 一個容(rong)器的時候也用到這個文件去(qu)索引本地(di)是否存在該(gai)鏡像,沒有鏡像的話就自動(dong)去(qu) pull 這個鏡像。

 

/var/lib/docker/image/overlay2/imagedb/content/sha256

存放目(mu)錄名為鏡像id內容是image config

 

2.2 容器在磁盤的存儲

容器的文件系(xi)統分為三層(ceng)(ceng): - r/o層(ceng)(ceng):也就是鏡像層(ceng)(ceng) - init層(ceng)(ceng):啟動(dong)容器時的參數 - r/w層(ceng)(ceng):可讀寫層(ceng)(ceng)

前面我們(men)知道鏡像(xiang)存儲在(zai)/var/lib/docker/overlay2下面,這(zhe)里不僅(jin)包含了只讀(r/o)層(ceng),init層(ceng)和r/w層(ceng)都在(zai)這(zhe)個里面。 

運(yun)行一個(ge)容器(qi)會返回一個(ge)容器(qi)id. 通過這個(ge)id,我們(men)能在(zai)/var/lib/docker/image/overlay2/layerdb/mounts目錄下找到該(gai)容器的信(xin)息(xi):

 

2.3 查找本地鏡像的過程

1. 查找/var/lib/docker/image/overlay2/repositories.json文件,找到對(dui)應(ying)版本的(de)imageId

2. 根據imageId在/var/lib/docker/image/overlay2/imagedb/content/sha256文件,文件名為(wei)imageId,內(nei)容是對應鏡像配置(zhi)(image.config)

3. 根據Image.config內的diff_id 到image/overlay2/layerdb/sha256 查找,根據chainID和diff_id的計算公式

 chaninid(1) = diffid(1)  chainid(n) = sha256(chain(n-1) diffid(n) )

4. 上述計(ji)算可以獲(huo)取各個不同鏡像層(ceng)在 /var/lib/docker/overlay2 目錄下各個鏡像層(ceng)的uuid目錄

5. 上(shang)述uuid目(mu)錄(lu)下的(de)diff 就(jiu)是各(ge)個鏡像(xiang)層的(de)文件(jian)系統

 

3 鏡像id梳理

imageID是對Image Configuration文(wen)件的sha256哈希后(hou)的得到(dao)

manifest_digestId是對docker pull拉取(qu)鏡像(xiang)的manifest文件的sha256哈希得(de)到的字符(fu)串

layer_diffId是對layer文件(.tar)sha256哈(ha)希得到(dao)的id

manifest_layer_digest是對壓縮后(hou)的(de)layer文件(.tar.gz) sha256哈希的(de)到id

chainId 計(ji)算(suan)diff_id獲取,公式:chaninid(1) = diffid(1)  chainid(n) = sha256(chain(n-1) diffid(n) )

cache_id 宿(su)主機隨機生成的uuid

 

 

 

 

 

文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0