Docker存储管理

Docker镜像元数据管理

镜像元数据,为了支持镜像的分层、写时复制、内容寻址等特性,Docker设计了一套镜像元数据管理机制来管理镜像元数据,自上而下三个层级包括:repolistory、image、layer三个层次

1.repository元数据,具有某个功能的镜像所有迭代tag构成的镜像仓库,持久化在/var/lib/docker/image/graph driver/repositories.json文件中存储,存储了所有repository的名字和repository关联的image ID
在这里插入图片描述
2.image元数据,包含了一该镜像的架构(amd64)、操作系统、镜像的默认配置、构建该镜像的容器ID和配置、创建时间、大小,构建镜像的历史信息
cat /var/lib/docker/image/overlay2/imagedb/content/sha256/4392e5dad77dbaf6a573650b0fe1e282b57c5fba6e6cea00a27c7d4b68539b81 | python -m json.tool

3.layer元数据,Docker定义了Layer和RwLayer两种接口,对应只读层和读写层。对应两种实现roLayer和mountLayer。其中roLayer操作存储只读镜像层元数据,/var/lib/docker/image/driver/layerdb/sha256/ID/目录下存储了某个镜像层的大小,校验码diffID,大小size。其中mountLayer存储内容索引某个容器的读写层ID,/var/lib/docker/image/driver/layerdb/mounts/ID/目录

Docker的存储驱动

为了让Docker容器满足不同平台的要求,Docker提供了各种基于不同文件系统的实现驱动来管理实际的容器和镜像文件

Docker的存储驱动,具体的实现有aufs、btrfs、devicemapper、vfs、overlay、zfs。其中vfs不支持写时复制仅仅为了支持volume。

常用的驱动

1.devicemapper
devicemapper,devicemapper是一种逻辑设备到物理设备的映射框架机制。devicemapper的三个概念,映射设备、映射表、目标设备。devicemapper的本质是通过映射关系描述IO规则,当设备收到IO请求,IO请求会根据映射表转发到最终的物理设备上。

devicemapper通过精简配置(thin-provisioning)和快照(snapshotting)功能实现镜像分层。这两部分块设备,一部分存储数据,一部分存储元数据并构建资源池(thin pool),资源池用于创建存储镜像的块设备。
在这里插入图片描述
devicemapper在构建一个资源池后,会创建一个有文件系统的基础设备,再通过已有设备作为基础拍快照创建新设备。所有的容器层和镜像层都有自己的块设备,均通过父镜像层创建快照的方式创建(没有父镜像层的层从基础设备创建快照)
在这里插入图片描述
devicemapper存储使用的两个基础块设备最好使用真正的块设备,不适用稀疏文件挂载的loop设备,真正的块设备为direct-lvm,稀疏文件挂在的loop设备时loop-lvm模式。生产环境需要使用direct-lvm

2.overlay与overlay2
overlayFS,是一种联合文件系统,允许文件系统重叠,上层记录变更,下层文件系统只读。overlayFS比aufs更加简单,性能更好,安装了19.03.7默认就是overlay2的驱动。

overlayFS将Linux主机上的两个目录合并成一个目录,也叫联合挂载,底层是lowerdir,顶层是upperdir,合并挂载后是merged目录。当修改一个文件时,使用写时复制到upper层进行修改,结果也保存在upper层。底层就是只读层image,可写层就是Container

overlay,overlay驱动镜像结构在/var/lib/docker/overlay/下,每个镜像层都有一个对应的目录,包含了该镜像层的内容,也就是对应该镜像层拥有的文件系统目录
docker inspect imageID 查看镜像详情
在这里插入图片描述
overlay驱动容器结构,创建容器时会在已有的镜像层上创建一层容器层,容器层也在目录/var/lib/docker/overlay目录下,merged是挂载的目录在上面写东西会写到upper中,work目录是写时复制的中间目录
docker inspect 容器ID 查看容器详情
在这里插入图片描述overlay2,overlay2驱动是overlay的改进版本,overlay共享数据通过硬链接的形式实现,过多的因链接inode会对磁盘的性能造成负担,overlay2的话使用了多挂载的方式实现共享数据

overlay2的镜像结构,使用l目录作为软连接避免mount参数过大限制
在这里插入图片描述
overlay2的容器结构,diff记录可写层数据,link记录可写层的连接目录,merged联合挂载目录,可以使用mount查看具体的挂在详情
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考

Docker 基础知识】存储驱动overlay和overlay2
《Docker容器与容器云第二版》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值