目录
- Docker 和 Containerd 目录结构及存储机制笔记
- 一、Docker 目录结构与存储机制
- 1. Docker 存储目录
- 2. Docker 容器的根目录
- 3. 查看 Docker 容器的挂载点
- 二、Containerd 目录结构与存储机制
- 三、Docker 和 Containerd 的主要区别
- 1. 存储路径
- 2. 挂载点管理
- 3. 配置文件
- 4. 日志文件
- 四、实用命令
- 1. Docker 查看容器的挂载点:
- 2. Containerd
- 五、总结
Docker 和 Containerd 目录结构及存储机制笔记
一、Docker 目录结构与存储机制
1. Docker 存储目录
Docker 默认将数据存储在 目录下。这个目录包含以下子目录和文件:
- /var/lib/docker/containers
复制代码 :
- 存储每个容器的配置文件和日志文件。
- 每个容器的目录以容器ID命名,包含和日志文件。
:
- 存储使用 Overlay2 存储驱动的容器文件系统。每个容器的文件系统由多个层组成,包括只读层(镜像层)和可写层(容器层)。
- :联合挂载后的目录,容器的根目录。
- :容器的可写层,存储容器运行时的修改。
- :记录父层的哈希值。
:
- 存储 Docker 卷的数据。
- 每个卷的目录以卷名命名,包含卷的数据。
:
:
- /var/lib/docker/containers
复制代码:
2. Docker 容器的根目录
Docker 容器的根目录位于 下的 目录。例如:
- /var/lib/docker/overlay2/<layer_id>/merged
:容器的文件系统层的唯一标识符。
3. 查看 Docker 容器的挂载点
可以使用以下命令查看 Docker 容器的挂载点: - docker inspect --format '{{.GraphDriver.Data.WorkDir}}' <容器ID>
复制代码 二、Containerd 目录结构与存储机制
1. Containerd 存储目录
Containerd 默认将数据存储在 目录下。这个目录包含以下子目录和文件:
- /var/lib/containerd/io.containerd.content.v1.content
复制代码:
存储容器镜像的内容。 - /var/lib/containerd/io.containerd.grpc.v1.cri
复制代码:
存储与 Kubernetes CRI(Container Runtime Interface)相关的数据。 - /var/lib/containerd/io.containerd.metadata.v1.bolt
复制代码:
存储元数据,使用 BoltDB。 - /var/lib/containerd/io.containerd.runtime.v1.linux
复制代码:
存储容器的运行时信息。 - /var/lib/containerd/io.containerd.runtime.v2.task
复制代码:
存储容器的运行时任务信息。 - /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
复制代码:
存储使用 OverlayFS 文件系统的容器快照。 - /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
复制代码:快照的唯一标识符。
3. 查看 Containerd 容器的挂载点
可以使用以下命令查看 Containerd 容器的挂载点: - crictl inspect <容器ID> | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source'
复制代码4. 查找快照与容器的对应关系
以下是一个示例脚本,帮助你找到每个快照对应的容器: - #!/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 的主要区别
1. 存储路径
- Docker:
- Containerd:
- /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
复制代码
2. 挂载点管理
- Docker:使用查看挂载点。
- Containerd:使用查看挂载点。
3. 配置文件
- Docker:
- Containerd:
- /etc/containerd/config.toml
复制代码
4. 日志文件
- Docker:
- Containerd:
四、实用命令
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"'
复制代码 五、总结
- Docker 和 Containerd 都使用 OverlayFS 文件系统来管理容器的文件系统。
- Docker 的存储路径在,而 Containerd 的存储路径在
- /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
复制代码 。
- Docker 使用查看容器的挂载点,而 Containerd 使用查看挂载点。
- Docker 的配置文件是,而 Containerd 的配置文件是
- /etc/containerd/config.toml
复制代码 。
到此这篇关于Docker 和 Containerd 目录结构及存储机制的文章就介绍到这了,更多相关Docker 和 Containerd 内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |