最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
弋阳县| 吴桥县| 太谷县| 儋州市| 水城县| 南平市| 乡宁县| 丰台区| 庐江县| 甘孜| 军事| 商洛市| 福建省| 定西市| 桑植县| 岗巴县| 建阳市| 洛扎县| 会宁县| 德江县| 温宿县| 兴业县| 永康市| 商都县| 民勤县| 宿松县| 南陵县| 宝山区| 龙泉市| 都江堰市| 微山县| 集安市| 县级市| 琼结县| 西峡县| 三亚市| 内乡县| 乌兰浩特市| 卢湾区| 金溪县| 梅州市|