设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 493|回复: 1

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:205
  • 打卡月天数:0
  • 打卡总奖励:3134
  • 最近打卡:2023-08-27 08:23:27
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
430
主题
392
精华
0
金钱
4397
积分
838
注册时间
2022-12-22
最后登录
2025-2-20

发表于 2025-2-14 02:12:04 | 显示全部楼层 |阅读模式
目录


  • Docker 和 Containerd 目录结构及存储机制笔记
  • 一、Docker 目录结构与存储机制

    • 1. Docker 存储目录
    • 2. Docker 容器的根目录
    • 3. 查看 Docker 容器的挂载点

  • 二、Containerd 目录结构与存储机制

    • 1. Containerd 存储目录

  • 三、Docker 和 Containerd 的主要区别

    • 1. 存储路径
    • 2. 挂载点管理
    • 3. 配置文件
    • 4. 日志文件

  • 四、实用命令

    • 1. Docker 查看容器的挂载点:
    • 2. Containerd

  • 五、总结

Docker 和 Containerd 目录结构及存储机制笔记


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


1. Docker 存储目录

Docker 默认将数据存储在
  1. /var/lib/docker
复制代码
目录下。这个目录包含以下子目录和文件:

    1. /var/lib/docker/containers
    复制代码


    • 存储每个容器的配置文件和日志文件。
    • 每个容器的目录以容器ID命名,包含
      1. config.v2.json
      复制代码
      和日志文件。

1.png
  1. /var/lib/docker/overlay2
复制代码


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


  • 存储 Docker 卷的数据。
  • 每个卷的目录以卷名命名,包含卷的数据。
  1. /var/lib/docker/network
复制代码


  • 存储 Docker 网络相关的配置和状态信息。
  1. /var/lib/docker/image
复制代码


  • 存储镜像的元数据。
  1. /var/lib/docker/containers
复制代码


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

2. Docker 容器的根目录

Docker 容器的根目录位于
  1. /var/lib/docker/overlay2
复制代码
下的
  1. merged
复制代码
目录。例如:

  • /var/lib/docker/overlay2/<layer_id>/merged
  1. <layer_id>
复制代码
:容器的文件系统层的唯一标识符。

3. 查看 Docker 容器的挂载点

可以使用以下命令查看 Docker 容器的挂载点:
  1. docker inspect --format '{{.GraphDriver.Data.WorkDir}}' <容器ID>
复制代码
二、Containerd 目录结构与存储机制


1. Containerd 存储目录

Containerd 默认将数据存储在
  1. /var/lib/containerd
复制代码
目录下。这个目录包含以下子目录和文件:
2.png
  1. /var/lib/containerd/io.containerd.content.v1.content
复制代码

存储容器镜像的内容。
  1. /var/lib/containerd/io.containerd.grpc.v1.cri
复制代码

存储与 Kubernetes CRI(Container Runtime Interface)相关的数据。
  1. /var/lib/containerd/io.containerd.metadata.v1.bolt
复制代码

存储元数据,使用 BoltDB。
  1. /var/lib/containerd/io.containerd.runtime.v1.linux
复制代码

存储容器的运行时信息。
  1. /var/lib/containerd/io.containerd.runtime.v2.task
复制代码

存储容器的运行时任务信息。
  1. /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
复制代码

存储使用 OverlayFS 文件系统的容器快照。
  1. /var/lib/containerd/tmpmounts
复制代码

存储临时挂载点。
2. Containerd 容器的根目录
Containerd 容器的根目录通常位于
  1. /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
复制代码
下的某个快照目录中。例如:
  1. /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/<snapshot_id>/fs
复制代码
  1. <snapshot_id>
复制代码
:快照的唯一标识符。
3. 查看 Containerd 容器的挂载点
可以使用以下命令查看 Containerd 容器的挂载点:
  1. crictl inspect <容器ID> | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source'
复制代码
4. 查找快照与容器的对应关系
以下是一个示例脚本,帮助你找到每个快照对应的容器:
  1. #!/bin/bash
  2. # 获取所有容器的ID
  3. container_ids=$(crictl ps -q)
  4. # 遍历每个容器
  5. for container_id in $container_ids; do
  6.     # 获取容器的挂载点路径
  7.     mount_path=$(crictl inspect $container_id | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source')
  8.     # 检查挂载点路径是否在snapshots目录中
  9.     if [ -n "$mount_path" ]; then
  10.         snapshot_id=$(basename $mount_path)
  11.         echo "Container ID: $container_id, Snapshot ID: $snapshot_id"
  12.     fi
  13. done
复制代码
三、Docker 和 Containerd 的主要区别


1. 存储路径


  • Docker
    1. /var/lib/docker/overlay2
    复制代码
  • Containerd
    1. /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
    复制代码

2. 挂载点管理


  • Docker:使用
    1. docker inspect
    复制代码
    查看挂载点。
  • Containerd:使用
    1. crictl inspect
    复制代码
    查看挂载点。

3. 配置文件


  • Docker
    1. /etc/docker/daemon.json
    复制代码
  • ​​​​​​​Containerd
    1. /etc/containerd/config.toml
    复制代码

4. 日志文件


  • Docker
    1. /var/log/docker.log
    复制代码
  • ​​​​​​​Containerd
    1. /var/log/containerd.log
    复制代码

四、实用命令


1. Docker 查看容器的挂载点:
  1. docker inspect --format '{{.GraphDriver.Data.WorkDir}}' <容器ID>
复制代码
2. Containerd

查看容器的挂载点
  1. crictl inspect <容器ID> | jq -r '.info.runtimeSpec.mounts[] | select(.destination == "/") | .source'
复制代码
查看所有容器的挂载点
  1. crictl ps -q | xargs -I {} sh -c 'crictl inspect {} | jq -r ".info.runtimeSpec.mounts[] | select(.destination == "/") | .source"'
复制代码
五、总结


  • DockerContainerd 都使用 OverlayFS 文件系统来管理容器的文件系统。
  • Docker 的存储路径在
    1. /var/lib/docker/overlay2
    复制代码
    ,而 Containerd 的存储路径在
    1. /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
    复制代码

  • Docker 使用
    1. docker inspect
    复制代码
    查看容器的挂载点,而 Containerd 使用
    1. crictl inspect
    复制代码
    查看挂载点。
  • Docker 的配置文件是
    1. /etc/docker/daemon.json
    复制代码
    ,而 Containerd 的配置文件是
    1. /etc/containerd/config.toml
    复制代码

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
22
积分
24
注册时间
2022-12-30
最后登录
2022-12-30

发表于 2025-12-12 19:34:50 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表