docker的overlay2目錄

image.png

前言:
本章分析 docker 的 overlay2 目錄
docker的整體目錄的分析見《docker的目錄》一文

1. “l(fā)”目錄

里邊有一些軟連接指向 /overlay2/CacheID 目錄下的 diff目錄。
這是為了避免掛載命令超出長度。

[root@pre-server01 l]# ll
total 444
lrwxrwxrwx 1 root root 72 Jan 21 08:48 2GJHC55KDLLSH725ATMROHMQHW -> ../3ef5f9868d2f72e7dcd3ff1047176d2c9f78ef06342552896badb97876427ba8/diff
lrwxrwxrwx 1 root root 72 Jan 21 08:49 2Q4QW2CEWO47MDMGSDORECFGI2 -> ../99153898c52a78f3b7bbd4ed06c32b32facb00e471496ce55324dcae95442dff/diff
lrwxrwxrwx 1 root root 72 Jan 21 08:49 2QWP34GCA3MW5YPGZJDB4U36VO -> ../9668210804fd9774d6be658253bb36afcf80808140da91fc6f07315984aa25e3/diff
lrwxrwxrwx 1 root root 72 Jan 21 08:48 3V4AGOIEAL5XGQIGO66Y5UPHY3 -> ../8cf959aa82bf88454d10c467f3e33a897d19ab6a9ab7d0f3b6d669f1315ca56e/diff

2. CacheID目錄

鏡像各層存對應(yīng)overlay2下邊一個目錄

2.1 容器層存儲和鏡像層存儲

各層存儲目錄如下:

[root@pre-server01 overlay2]# ll
total 432
drwx------ 4 root root 4096 Oct 29  2019 012de5e5bdb0562b4b60c50d235c9eb9fe17a9a5592ec3fbd9231dedf38afb2d
drwx------ 4 root root 4096 Jan 21 08:48 03468b1e67108a1a2acade9b1f05e2e6fa5b5d282e9526af8628a48104102940
drwx------ 4 root root 4096 Jan 21 08:49 0387aa8919e5fa943132c89ae93574807c77b15aa0cd7514a1f29c9287a87a5d
drwx------ 5 root root 4096 Feb  2 10:45 08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa
drwx------ 4 root root 4096 Jan 21 09:41 08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa-init
......

2.1.1 容器層存儲目錄

容器層對應(yīng)兩個目錄:一個以CacheID命名。一個以CacheID-init 命名。

  • 帶init的目錄
    這個目錄是只讀的

  • 沒有init的容器目錄
    容器的讀寫目錄,容器中寫入時候會把文件拷貝進(jìn)來(讀操作直接在每層操作,不需拷貝)

演示:
比如我進(jìn)入容器,在home下寫一個hello.txt的文件,于是宿主機(jī)該目錄下的diff目錄中多了一個 home目錄,下邊多了一個hello.txt文件。

2.1.2 鏡像層存儲目錄

對應(yīng)一個以CacheID命名的目錄

說明:2.1 中內(nèi)容我們暫且這么理解,具體原理會在以后的鏡像層原理中說明。

2.2 查看存儲目錄屬于哪個容器

  • overlay2下有如下目錄
08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa
08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa-init
  • 查找屬于那個容器
[root@pre-server01 overlay2]# docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep "08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa"
3262, 6bf1cc99809501fe6c5133bbadd1a973b938425fd87a5ff98e3f4ab7d570589a, /das-db, /var/lib/docker/overlay2/08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa/work

說明:

如上可見,該存儲對應(yīng) 的容器名為 das-db

2.3 查看指定容器的存儲目錄

其實就是2.2反向查,測試如下

[root@DoN02 overlay2]# docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep  gateway
134626, bf6c6433bd2ed870daad08fd667ece93db2f8c5e05da786d0ca9838a2bcf72d4, /k8s_filebeat_gateway-854ff898c5-t7j49_crust-framework_d6e24bdc-8632-4691-b2ef-c112efdb6784_0, /data/docker/overlay2/72df0bfe3f322eeff69f43394e9bde50a786103f278c00a1dd8bde457889e077/work
134565, d278f3488213a2396dda0a781dc5ea5d512ea11675ee30a0521817ad8a5a4b1e, /k8s_gateway_gateway-854ff898c5-t7j49_crust-framework_d6e24bdc-8632-4691-b2ef-c112efdb6784_0, /data/docker/overlay2/9e31372295296a2d83bd725214063f60114499582be4027e13c78b241e1cf16c/work
134439, a16364fc28a7c67e35d1d2c0c73fdc18b5705dfe1b21d3c79a0a99618594a88a, /k8s_POD_gateway-854ff898c5-t7j49_crust-framework_d6e24bdc-8632-4691-b2ef-c112efdb6784_0, /data/docker/overlay2/0e362acb07459c9fd97f5b1bbe2431a33daf19e091da78c8abed459985fdff69/work
28798, 1ce006e2a0ac90d7dc838d52d9b5865bc76e75a40f79bd4839ef818e46730197, /k8s_gateway_etcd-75d4485689-j4g2z_streaming_373adf06-d4b8-4aa7-a161-ba8424a0eefe_0, /data/docker/overlay2/80385eb061acce97c369fe1577775e8230ce7108cf0ac01dce0346e1622fad94/work

說明:如上可見,查看 gataway 這個pod的目錄,得到四條信息:

  • 第一條是該pod里 filebeat的容器信息
  • 第二條是該pod里gateway的容器,我們要找的是這個
  • 第三條是該pod里pause的容器
  • 第四條是k8s系統(tǒng)的,和該pod無關(guān)。
    綜上:我們要找的目錄是/data/docker/overlay2/9e31372295296a2d83bd725214063f60114499582be4027e13c78b241e1cf16c

3. CacheID目錄結(jié)構(gòu)

[root@pre-server01 ffd866bd6ece4908f3edd84da09df8f470680276c4acc6752066de8d359e972c]# ll
total 16
-rw------- 1 root root    0 Jan 21 08:49 committed
drwxr-xr-x 3 root root 4096 Jan 21 08:49 diff
-rw-r--r-- 1 root root   26 Jan 21 08:49 link
-rw-r--r-- 1 root root   86 Jan 21 08:49 lower
drwx------ 2 root root 4096 Jan 21 08:49 work
  • diff 目錄
    文件目錄,各層的目錄都會放在下邊
[root@pre-server01 08b19b890cc0348eabca15b585820d91bd59d88e3fdd5c2f589fe5e69ecb5cfa]# ll diff/
total 20
drwxr-xr-x 2 root root 4096 Feb  2 14:06 home
drwx------ 2 root root 4096 Feb  2 13:40 root
drwxr-xr-x 3 root root 4096 Jan 28  2019 run
drwxrwxrwt 2 root root 4096 Feb  2 13:40 tmp
  • link 文件
    寫明該存儲對應(yīng)的鏡像層
[root@pre-server01 ffd866bd6ece4908f3edd84da09df8f470680276c4acc6752066de8d359e972c]# cat link
RMGBSAZLRQKZLACS72PTSJPS62
  • lower 文件
    指名該鏡像層對應(yīng)的底層鏡像層
[root@pre-server01 ffd866bd6ece4908f3edd84da09df8f470680276c4acc6752066de8d359e972c]# cat lower
l/OSSHOMMOPKF74F3MR2JHEA33MG:l/2Q4QW2CEWO47MDMGSDORECFGI2:l/IUFHPX4Z3A74KHLPEYAMGPM5DI
  • work 目錄
    文件系統(tǒng)的工作基礎(chǔ)目錄,掛載后內(nèi)容會被清空,且在使用過程中其內(nèi)容用戶不可見

【FAQ】

1)overlay2 不支持NFS掛載

【現(xiàn)象】

/var/lib/docker 目錄移動到NFS掛載的目錄之后,docker啟動不起來

【查看】

查看報錯日志如下

[root@crust-m02 data]# journalctl -xe
……
7月 06 11:49:50 crust-m02 dockerd[10652]: time="2021-07-06T11:49:50.475328532+08:00" level=error msg="'overlay2' is not supported over nfs" storage-driver=overlay2
7月 06 11:49:50 crust-m02 dockerd[10652]: time="2021-07-06T11:49:50.475349891+08:00" level=error msg="[graphdriver] prior storage driver overlay2 failed: backing file sys
……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容