当前位置: 首页 > article >正文

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

目录标题

  • Docker 和 Containerd 目录结构及存储机制笔记
    • 一、Docker 目录结构与存储机制
      • 1. **Docker 存储目录**
      • 2. **Docker 容器的根目录**
      • 3. **查看 Docker 容器的挂载点**
    • 二、Containerd 目录结构与存储机制
      • 1. **Containerd 存储目录**
      • 2. **Containerd 容器的根目录**
      • 3. **查看 Containerd 容器的挂载点**
      • 4. **查找快照与容器的对应关系**
    • 三、Docker 和 Containerd 的主要区别
      • 1. **存储路径**
      • 2. **挂载点管理**
      • 3. **配置文件**
      • 4. **日志文件**
    • 四、实用命令
      • 1. **Docker**
      • 2. **Containerd**
    • 五、总结

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

http://www.kler.cn/a/541557.html

相关文章:

  • ffmpeg -codecs
  • 基于 GEE 利用插值方法填补缺失影像
  • AWS Savings Plans 监控与分析工具使用指南
  • Docker搭建redis集群
  • 【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
  • 48V电气架构全面科普和解析:下一代智能电动汽车核心驱动
  • 基于Springboot和vue的流浪猫狗救助救援系统设计与实现(源码+数据库+文档)
  • kafka消费端之分区分配策略
  • MATLAB中extract 函数用法
  • Ubuntu 如何安装Snipaste切图软件
  • redis高级数据结构HyperLogLog
  • TCP/IP 协议图解 | TCP 协议详解 | IP 协议详解
  • 香橙派AI Pro算子开发(二)kernel直调Add算子
  • git如何把多个commit合成一个
  • Machine Learning:Introduction
  • 【Ubuntu VScode Remote SSH 问题解决】Resolver error: Error: XHR failed
  • 如何使用 DataX 连接 Easysearch
  • 鸿蒙NEXT开发-鸿蒙三方库
  • html文件怎么转换成pdf文件,2025最新教程
  • electron.vite 项目创建以及better-sqlite3数据库使用
  • 基于SpringBoot的公益社团管理系统
  • Windows逆向工程入门之汇编数据存储\宽度,内存地址及边界,数据截断处理
  • 003 Linux驱动开发——第一个简单开发实验
  • python动物识别深度学习分析系统
  • 2.1 JUnit 5 测试发现机制详解
  • Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题