当前位置: 代码网 > 服务器>服务器>云虚拟主机 > Docker 和 Containerd 目录结构及存储机制详解

Docker 和 Containerd 目录结构及存储机制详解

2025年02月13日 云虚拟主机 我要评论
docker 和 containerd 目录结构及存储机制笔记一、docker 目录结构与存储机制1. docker 存储目录docker 默认将数据存储在 /var/lib/docker 目录下。这

docker 和 containerd 目录结构及存储机制笔记

一、docker 目录结构与存储机制

1. docker 存储目录

docker 默认将数据存储在 /var/lib/docker 目录下。这个目录包含以下子目录和文件:

  • /var/lib/docker/containers
    • 存储每个容器的配置文件和日志文件。
    • 每个容器的目录以容器id命名,包含 config.v2.json 和日志文件。

/var/lib/docker/overlay2

  • 存储使用 overlay2 存储驱动的容器文件系统。每个容器的文件系统由多个层组成,包括只读层(镜像层)和可写层(容器层)。
  • merged:联合挂载后的目录,容器的根目录。
  • diff:容器的可写层,存储容器运行时的修改。
  • lower:记录父层的哈希值。

/var/lib/docker/volumes

  • 存储 docker 卷的数据。
  • 每个卷的目录以卷名命名,包含卷的数据。

/var/lib/docker/network

  • 存储 docker 网络相关的配置和状态信息。

/var/lib/docker/image

  • 存储镜像的元数据。

/var/lib/docker/containers

  • 存储容器的配置文件和日志文件。

2. docker 容器的根目录

docker 容器的根目录位于 /var/lib/docker/overlay2 下的 merged 目录。例如:

  • /var/lib/docker/overlay2/<layer_id>/merged

<layer_id>:容器的文件系统层的唯一标识符。

3. 查看 docker 容器的挂载点

可以使用以下命令查看 docker 容器的挂载点:

docker inspect --format '{{.graphdriver.data.workdir}}' <容器id>

二、containerd 目录结构与存储机制

1. containerd 存储目录

containerd 默认将数据存储在 /var/lib/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

<snapshot_id>:快照的唯一标识符。

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/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"'

五、总结

  • dockercontainerd 都使用 overlayfs 文件系统来管理容器的文件系统。
  • 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

到此这篇关于docker 和 containerd 目录结构及存储机制的文章就介绍到这了,更多相关docker 和 containerd 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com