Docker 和 Containerd 目錄結(jié)構(gòu)及存儲機制詳解
Docker 和 Containerd 目錄結(jié)構(gòu)及存儲機制筆記
一、Docker 目錄結(jié)構(gòu)與存儲機制
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
:容器的可寫層,存儲容器運行時的修改。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 容器的掛載點
可以使用以下命令查看 Docker 容器的掛載點:
docker inspect --format '{{.GraphDriver.Data.WorkDir}}' <容器ID>
二、Containerd 目錄結(jié)構(gòu)與存儲機制
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
:
存儲容器的運行時信息。
/var/lib/containerd/io.containerd.runtime.v2.task
:
存儲容器的運行時任務(wù)信息。
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
:
存儲使用 OverlayFS 文件系統(tǒng)的容器快照。
/var/lib/containerd/tmpmounts
:
存儲臨時掛載點。
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 容器的掛載點
可以使用以下命令查看 Containerd 容器的掛載點:
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 # 獲取容器的掛載點路徑 mount_path=$(crictl inspect $container_id | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source') # 檢查掛載點路徑是否在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. 掛載點管理
- Docker:使用
docker inspect
查看掛載點。 - Containerd:使用
crictl inspect
查看掛載點。
3. 配置文件
- Docker:
/etc/docker/daemon.json
- ???????Containerd:
/etc/containerd/config.toml
4. 日志文件
- Docker:
/var/log/docker.log
- ???????Containerd:
/var/log/containerd.log
四、實用命令
1. Docker 查看容器的掛載點:
docker inspect --format '{{.GraphDriver.Data.WorkDir}}' <容器ID>
2. Containerd
查看容器的掛載點:
crictl inspect <容器ID> | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source'
查看所有容器的掛載點:
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
查看容器的掛載點,而 Containerd 使用crictl inspect
查看掛載點。 - Docker 的配置文件是
/etc/docker/daemon.json
,而 Containerd 的配置文件是/etc/containerd/config.toml
。
到此這篇關(guān)于Docker 和 Containerd 目錄結(jié)構(gòu)及存儲機制的文章就介紹到這了,更多相關(guān)Docker 和 Containerd 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea?連接遠(yuǎn)程?docker?并部署項目到?docker的過程
這篇文章主要介紹了idea連接遠(yuǎn)程docker并部署項目到docker,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-10-10詳解Docker創(chuàng)建Mysql容器并通過命令行連接到容器
本篇文章主要介紹了Docker創(chuàng)建Mysql容器并通過命令行連接到容器,具有一定的參考價值,有興趣的可以了解一下。2017-01-01最新IDEA快速實現(xiàn)Docker鏡像部署運行的過程詳解
這篇文章主要介紹了最新IDEA快速實現(xiàn)Docker鏡像部署運行的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09docker通過Dockerfile修改鏡像中tomcat的端口
8080端口會經(jīng)常出現(xiàn)被占用的情況,本文主要介紹了docker通過Dockerfile修改鏡像中tomcat的端口,具有一定的參考價值,感興趣的可以了解一下2023-10-10在Dockerfile中copy和add的區(qū)別及說明
COPY和ADD都是Dockerfile中用于文件復(fù)制的命令,但COPY僅用于本地文件或目錄的復(fù)制,不支持自動解壓縮;而ADD除了復(fù)制本地文件或目錄外,還支持解壓縮和從URL下載文件,在一般情況下,建議使用COPY命令2025-03-03