国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

在節(jié)點(diǎn)上的存儲(chǔ)結(jié)構(gòu)是怎么樣的?

2023-07-10 19:44 作者:Cpp程序員  | 我要投稿

我們經(jīng)常會(huì)使用 docker 或者其他 cri 工具拉取鏡像來(lái)運(yùn)行容器,卻沒(méi)有去實(shí)際了解 pull 下來(lái)的鏡像在機(jī)器上是怎么存儲(chǔ)的。以下以常用的 overlay2 存儲(chǔ)驅(qū)動(dòng)為例,解析鏡像的存儲(chǔ)結(jié)構(gòu),其他存儲(chǔ)驅(qū)動(dòng)也是類似

編寫(xiě)如下 Dockerfile 文件

FROM?ubuntu:latestENV?author?jlzRUN?echo?"x1"?>>?/tmp/testRUN?echo?"x2"?>>?/tmp/test2RUN?echo?"x3"?>>?/tmp/test3ENTRYPOINT?["/bin/bash",?"-c",?"sh"]

通過(guò) docker build 命令構(gòu)建一個(gè)鏡像

docker?build?-t?my-ubuntu:0,1?.

鏡像存儲(chǔ)目錄結(jié)構(gòu)

在 overlay2 存儲(chǔ)驅(qū)動(dòng)中,鏡像層之間的關(guān)系可以通過(guò) LowerDir、UpperDir、MergedDir 目錄結(jié)構(gòu)表示 對(duì)應(yīng)上面 inspect 出來(lái)的鏡像 GraphDriver 字段

通過(guò) docker inspect {image id} 命令查看鏡像信息,如下

"Config":?{????"Env":?[????????"author=jlz"????],????"Entrypoint":?[????????"/bin/bash",????????"-c",????????"cat?/tmp/test"????]},"GraphDriver":?{????"Data":?{????????"LowerDir":?"/mnt/datadisk0/docker/overlay2/dff0bddcffaaa428ea232b202275d48845c11783ea428e9cfa335987cf91805c/diff:/mnt/datadisk0/docker/overlay2/3b5766ed7c43b9417311635ec98d844a98586b9854538975bc4ef12d22edfe1c/diff:/mnt/datadisk0/docker/overlay2/51798d33e8f37ed44c79b7ed5626e95936dd60b8269328557bb6d09f3e353356/diff",????????"MergedDir":?"/mnt/datadisk0/docker/overlay2/492b8eb5dba9dbb4c72616fe0f8e9423a552d42e5ffe017cbd2e2fb60b3e20a7/merged",????????"UpperDir":?"/mnt/datadisk0/docker/overlay2/492b8eb5dba9dbb4c72616fe0f8e9423a552d42e5ffe017cbd2e2fb60b3e20a7/diff",????????"WorkDir":?"/mnt/datadisk0/docker/overlay2/492b8eb5dba9dbb4c72616fe0f8e9423a552d42e5ffe017cbd2e2fb60b3e20a7/work"????},????"Name":?"overlay2"},"RootFS":?{????"Type":?"layers",????"Layers":?[????????"sha256:cdd7c73923174e45ea648d66996665c288e1b17a0f45efdbeca860f6dafdf731",????????"sha256:120009c8f50a6cc9022bf7b9fcc7b4f7ef5ba8ea3736dfe974e11780d1a840a0",????????"sha256:b6f2b52c36d89acd2e8ce8d85c178c722501dad0ee64de2aa4d15ac18c1cf0fc",????????"sha256:7949cc4bef953bb279a2b9b3c27def2a9399706bb1344461299ac4c01c4692df"????]},

如上 RootFS.Layers 表示這個(gè)鏡像只有 4 層,因?yàn)樯厦娴?Dockerfile 中 base 鏡像 ubuntu 本身只有一層,RUN 指令分別對(duì)應(yīng)一層,而 ENV 和 ENTRYPOINT 由于沒(méi)有涉及到文件系統(tǒng)修改,所以不會(huì)有對(duì)應(yīng)的鏡像層,他們直接存在于鏡像的元數(shù)據(jù)信息中,如上面的 Config.Env 和 Config.Entrypoint

UpperDir:最新的一層鏡像層的變更信息(第 n 層),這里對(duì)應(yīng)為 第 4 層,即 RUN echo "x3" >> /tmp/test3

LowerDir: 除最新鏡像層的所有層(第 1 ~n-1 層),格式為 {n-1}:{n-2}...{1}

MergedDir:LowerDir 和 UpperDir 的合并,形成最終的鏡像的 rootfs 結(jié)構(gòu)

容器存儲(chǔ)目錄結(jié)構(gòu)

通過(guò)這個(gè)鏡像創(chuàng)建一個(gè)容器

docker?run?-it?--entrypoint?sh?{image?id}

注意這里的 --entrypoint 參數(shù)用于修改容器的 entrypoint

在容器中執(zhí)行命令 echo "hahaha" test4 創(chuàng)建新文件,并通過(guò) docker inspect {container_id} 查看容器存儲(chǔ)結(jié)構(gòu)

"Config":?{????????????"Entrypoint":?[????????????????"sh"????????????]????????},"GraphDriver":?{????????????"Data":?{????????????????"LowerDir":?"/mnt/datadisk0/docker/overlay2/f2a196d05ccbae06927091297ea503ce59ddf6bc01b8edd686358ca9a41b9abd-init/diff:/mnt/datadisk0/docker/overlay2/492b8eb5dba9dbb4c72616fe0f8e9423a552d42e5ffe017cbd2e2fb60b3e20a7/diff:/mnt/datadisk0/docker/overlay2/dff0bddcffaaa428ea232b202275d48845c11783ea428e9cfa335987cf91805c/diff:/mnt/datadisk0/docker/overlay2/3b5766ed7c43b9417311635ec98d844a98586b9854538975bc4ef12d22edfe1c/diff:/mnt/datadisk0/docker/overlay2/51798d33e8f37ed44c79b7ed5626e95936dd60b8269328557bb6d09f3e353356/diff",????????????????"MergedDir":?"/mnt/datadisk0/docker/overlay2/f2a196d05ccbae06927091297ea503ce59ddf6bc01b8edd686358ca9a41b9abd/merged",????????????????"UpperDir":?"/mnt/datadisk0/docker/overlay2/f2a196d05ccbae06927091297ea503ce59ddf6bc01b8edd686358ca9a41b9abd/diff",????????????????"WorkDir":?"/mnt/datadisk0/docker/overlay2/f2a196d05ccbae06927091297ea503ce59ddf6bc01b8edd686358ca9a41b9abd/work"????????????},????????????"Name":?"overlay2"????????},

可以看到 Config.Entrypoint 被修改為 sh,此時(shí) GraphDriver 中的目錄相比 inspect 鏡像的結(jié)果也發(fā)生了變化

UpperDir:這個(gè)目錄包含了容器的可寫(xiě)層,可以看到在容器中創(chuàng)建的 test4 文件。這個(gè)目錄中的文件可以被修改,但是它們只存在于容器的生命周期中。

LowerDir:這個(gè)目錄包含了鏡像的只讀層,也就是鏡像的文件系統(tǒng)。結(jié)合上面鏡像的存儲(chǔ)結(jié)構(gòu)可以發(fā)現(xiàn),這里包含了所有的 n 層鏡像目錄。這些文件是只讀的,不能被修改

WorkDir:這個(gè)目錄是 overlay2 文件系統(tǒng)的工作目錄,也就是容器內(nèi)部的工作目錄。當(dāng)你在容器中運(yùn)行一個(gè)命令時(shí),Docker會(huì)將該命令的工作目錄設(shè)置為WorkDir指定的目錄。

MergedDir:LowerDir 和 UpperDir 的合并結(jié)果,也就是鏡像只讀層和容器可寫(xiě)層的合并結(jié)果。

init 層的作用

如果細(xì)心的話可以發(fā)現(xiàn) inpect 容器的結(jié)果中, LowerDir 除了所有的鏡像只讀層外,還有一個(gè) init 層

“init”結(jié)尾的層,夾在只讀層和讀寫(xiě)層之間。Init 層是 Docker 項(xiàng)目單獨(dú)生成的一個(gè)內(nèi)部層,專門用來(lái)存放 /etc/hosts、/etc/resolv.conf 等信息

需要這樣一層的原因是,用戶往往需要在啟動(dòng)容器時(shí)寫(xiě)入一些指定的值比如在/etc/hosts中寫(xiě)入hostname,所以就需要在可讀寫(xiě)層對(duì)它們進(jìn)行修改??墒牵@些修改往往只對(duì)當(dāng)前的容器有效,我們并不希望執(zhí)行 docker commit 時(shí),把這些信息連同可讀寫(xiě)層一起提交掉。

所以,Docker 做法是,在修改了這些文件之后,以一個(gè)單獨(dú)的層掛載了出來(lái)。而用戶執(zhí)行 docker commit 只會(huì)提交可讀寫(xiě)層,所以是不包含這些內(nèi)容的。


在節(jié)點(diǎn)上的存儲(chǔ)結(jié)構(gòu)是怎么樣的?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
五大连池市| 社旗县| 汝城县| 淮北市| 特克斯县| 嵊州市| 新竹市| 宁乡县| 太康县| 都兰县| 科技| 玉山县| 肇东市| 杭锦旗| 鄢陵县| 青阳县| 布拖县| 林甸县| 五河县| 通海县| 米脂县| 南郑县| 开远市| 台山市| 义马市| 张家港市| 扎赉特旗| 宁南县| 武穴市| 上犹县| 巴彦淖尔市| 卓尼县| 汤阴县| 三河市| 永宁县| 华安县| 武威市| 温州市| 册亨县| 南京市| 当雄县|