Docker 和 Containerd 目錄結(jié)構(gòu)及存儲機(jī)制詳解
Docker 和 Containerd 目錄結(jié)構(gòu)及存儲機(jī)制筆記
一、Docker 目錄結(jié)構(gòu)與存儲機(jī)制
1. Docker 存儲目錄
Docker 默認(rèn)將數(shù)據(jù)存儲在 /var/lib/docker 目錄下。這個目錄包含以下子目錄和文件:
/var/lib/docker/containers:- 存儲每個容器的配置文件和日志文件。
- 每個容器的目錄以容器ID命名,包含
config.v2.json和日志文件。

/var/lib/docker/overlay2:
- 存儲使用 Overlay2 存儲驅(qū)動的容器文件系統(tǒng)。每個容器的文件系統(tǒng)由多個層組成,包括只讀層(鏡像層)和可寫層(容器層)。
merged:聯(lián)合掛載后的目錄,容器的根目錄。diff:容器的可寫層,存儲容器運(yùn)行時的修改。lower:記錄父層的哈希值。
/var/lib/docker/volumes:
- 存儲 Docker 卷的數(shù)據(jù)。
- 每個卷的目錄以卷名命名,包含卷的數(shù)據(jù)。
/var/lib/docker/network:
- 存儲 Docker 網(wǎng)絡(luò)相關(guān)的配置和狀態(tài)信息。
/var/lib/docker/image:
- 存儲鏡像的元數(shù)據(jù)。
/var/lib/docker/containers:
- 存儲容器的配置文件和日志文件。
2. Docker 容器的根目錄
Docker 容器的根目錄位于 /var/lib/docker/overlay2 下的 merged 目錄。例如:
- /var/lib/docker/overlay2/<layer_id>/merged
<layer_id>:容器的文件系統(tǒng)層的唯一標(biāo)識符。
3. 查看 Docker 容器的掛載點(diǎn)
可以使用以下命令查看 Docker 容器的掛載點(diǎn):
docker inspect --format '{{.GraphDriver.Data.WorkDir}}' <容器ID>二、Containerd 目錄結(jié)構(gòu)與存儲機(jī)制
1. Containerd 存儲目錄
Containerd 默認(rèn)將數(shù)據(jù)存儲在 /var/lib/containerd 目錄下。這個目錄包含以下子目錄和文件:

/var/lib/containerd/io.containerd.content.v1.content:
存儲容器鏡像的內(nèi)容。
/var/lib/containerd/io.containerd.grpc.v1.cri:
存儲與 Kubernetes CRI(Container Runtime Interface)相關(guān)的數(shù)據(jù)。
/var/lib/containerd/io.containerd.metadata.v1.bolt:
存儲元數(shù)據(jù),使用 BoltDB。
/var/lib/containerd/io.containerd.runtime.v1.linux:
存儲容器的運(yùn)行時信息。
/var/lib/containerd/io.containerd.runtime.v2.task:
存儲容器的運(yùn)行時任務(wù)信息。
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs:
存儲使用 OverlayFS 文件系統(tǒng)的容器快照。
/var/lib/containerd/tmpmounts:
存儲臨時掛載點(diǎn)。
2. Containerd 容器的根目錄
Containerd 容器的根目錄通常位于 /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs 下的某個快照目錄中。例如:
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/<snapshot_id>/fs
<snapshot_id>:快照的唯一標(biāo)識符。
3. 查看 Containerd 容器的掛載點(diǎn)
可以使用以下命令查看 Containerd 容器的掛載點(diǎn):
crictl inspect <容器ID> | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source'
4. 查找快照與容器的對應(yīng)關(guān)系
以下是一個示例腳本,幫助你找到每個快照對應(yīng)的容器:
#!/bin/bash
# 獲取所有容器的ID
container_ids=$(crictl ps -q)
# 遍歷每個容器
for container_id in $container_ids; do
# 獲取容器的掛載點(diǎn)路徑
mount_path=$(crictl inspect $container_id | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source')
# 檢查掛載點(diǎn)路徑是否在snapshots目錄中
if [ -n "$mount_path" ]; then
snapshot_id=$(basename $mount_path)
echo "Container ID: $container_id, Snapshot ID: $snapshot_id"
fi
done三、Docker 和 Containerd 的主要區(qū)別
1. 存儲路徑
- Docker:
/var/lib/docker/overlay2 - Containerd:
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
2. 掛載點(diǎn)管理
- Docker:使用
docker inspect查看掛載點(diǎn)。 - Containerd:使用
crictl inspect查看掛載點(diǎn)。
3. 配置文件
- Docker:
/etc/docker/daemon.json - ???????Containerd:
/etc/containerd/config.toml
4. 日志文件
- Docker:
/var/log/docker.log - ???????Containerd:
/var/log/containerd.log
四、實(shí)用命令
1. Docker 查看容器的掛載點(diǎn):
docker inspect --format '{{.GraphDriver.Data.WorkDir}}' <容器ID>2. Containerd
查看容器的掛載點(diǎn):
crictl inspect <容器ID> | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source'
查看所有容器的掛載點(diǎn):
crictl ps -q | xargs -I {} sh -c 'crictl inspect {} | jq -r ".info.runtimeSpec.mounts[] | select(.destination == \"/\") | .source"'五、總結(jié)
- Docker 和 Containerd 都使用 OverlayFS 文件系統(tǒng)來管理容器的文件系統(tǒng)。
- Docker 的存儲路徑在
/var/lib/docker/overlay2,而 Containerd 的存儲路徑在/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs。 - Docker 使用
docker inspect查看容器的掛載點(diǎn),而 Containerd 使用crictl inspect查看掛載點(diǎn)。 - Docker 的配置文件是
/etc/docker/daemon.json,而 Containerd 的配置文件是/etc/containerd/config.toml。
到此這篇關(guān)于Docker 和 Containerd 目錄結(jié)構(gòu)及存儲機(jī)制的文章就介紹到這了,更多相關(guān)Docker 和 Containerd 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker容器如何查看ip地址的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker容器如何查看ip地址的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
推送docker鏡像到harbor的實(shí)現(xiàn)方式
這篇文章主要介紹了推送docker鏡像到harbor的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
Docker volumes數(shù)據(jù)導(dǎo)出的五種實(shí)用方法
在容器化應(yīng)用的日常運(yùn)維中,數(shù)據(jù)管理是一個至關(guān)重要的環(huán)節(jié),Docker volumes作為Docker推薦的數(shù)據(jù)持久化方案,承載著應(yīng)用程序的關(guān)鍵數(shù)據(jù),本文將詳細(xì)介紹5種實(shí)用的Docker volumes數(shù)據(jù)導(dǎo)出方法,每種方法都有其適用場景,需要的朋友可以參考下2025-09-09
使用Docker部署war包項(xiàng)目的實(shí)現(xiàn)
這篇文章主要介紹了使用Docker部署war包項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Linux下docker 容器退出bash的兩種實(shí)現(xiàn)方法
這篇文章主要介紹了Linux下docker 容器退出bash的兩種實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Docker?監(jiān)控平臺部署的兩種實(shí)現(xiàn)步驟
本文主要介紹了Docker?監(jiān)控平臺部署的兩種實(shí)現(xiàn)步驟,包括cAdvisor、Prometheus和Grafana,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-11-11
Docker容器內(nèi)安裝ps命令的詳細(xì)操作步驟
在 Docker 容器的日常管理和故障排查過程中,ps命令是一個不可或缺的工具,當(dāng)我們在容器內(nèi)執(zhí)行ps命令時,可能會遇到報(bào)錯,下面我們就來看看如何根據(jù)不同的 Linux 發(fā)行版,采用相應(yīng)的方法來安裝ps命令吧2025-06-06
Docker內(nèi)如何訪問本機(jī)(宿主機(jī))的具體方法
這篇文章主要介紹了Docker內(nèi)如何訪問本機(jī)(宿主機(jī))的具體方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10

