docker存储管理

Posted liujunjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker存储管理相关的知识,希望对你有一定的参考价值。

docker镜像元数据管理

repository元数据

[root@localhost ~]# cd /var/lib/docker/image/overlay2/
[root@localhost overlay2]# cat repositories.json |python -mjson.tool
{
    "Repositories": {
        "busybox": {
            "busybox:latest": "sha256:6d5fcfe5ff170471fcc3c8b47631d6d71202a1fd44cf3c147e50c8de21cf0648",
            "busybox@sha256:6915be4043561d64e0ab0f8f098dc2ac48e077fe23f488ac24b665166898115a": "sha256:6d5fcfe5ff170471fcc3c8b47631d6d71202a1fd44cf3c147e50c8de21cf0648"
        },
        "nginx": {
            "nginx:latest": "sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145",
            "nginx@sha256:50cf965a6e08ec5784009d0fccb380fc479826b6e0e65684d9879170a9df8566": "sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145"
        }
    }
}

文件中存储了所有repository的名字(如busybox),每个repository下所有版本镜像的名字和tag(如busybox:laster)以及对应的镜像IP,而referenceStore的作用便是解析不同格式的repository名字,并管理repository与镜像ID的映射关系。

image元数据

包括了镜像架构(如amd64),操作系统(如linux),镜像默认配置,构建该镜像的容器ID和配置,创建地间,创建该镜像的Docker版本,构建镜像的历史信息以及rootfs组成。

/var/lib/docker/image/overlay2/imagedb/content/sha256
[root@localhost sha256]# ls -la
总用量 12
drwx------. 2 root root  150 12月 27 21:56 .
drwx------. 3 root root   20 12月 27 20:57 ..
-rw-------. 1 root root 6670 12月 27 21:50 231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145
-rw-------. 1 root root 1497 12月 27 21:56 6d5fcfe5ff170471fcc3c8b47631d6d71202a1fd44cf3c147e50c8de21cf0648

imageStore则管理镜像ID与镜像元数据之间原映射关系以及元数据的持久化操作,持久化文件位于/var/lib/docker/image/overlay2/imagedb/content/sha256

docker存储驱动

docker存储驱动管理方式,aufs、overlay、devicemapper。

镜像文件在本存储在

[root@localhost sha256]# cd /var/lib/docker
[root@localhost docker]# ls -l
总用量 8
drwx------.  2 root root   24 12月 27 20:57 builder
drwx--x--x.  4 root root   92 12月 27 20:57 buildkit
drwx------.  6 root root 4096 12月 28 21:21 containers
drwx------.  3 root root   22 12月 27 20:57 image
drwxr-x---.  3 root root   19 12月 27 20:57 network
drwx------. 15 root root 4096 12月 28 21:21 overlay2
drwx------.  4 root root   32 12月 27 20:57 plugins
drwx------.  2 root root    6 12月 28 20:16 runtimes
drwx------.  2 root root    6 12月 27 20:57 swarm
drwx------.  2 root root    6 12月 28 20:16 tmp
drwx------.  2 root root    6 12月 27 20:57 trust
drwx------.  2 root root   25 12月 27 20:57 volumes

overlayFS是一种新型联合文件系统(union filesystem),它允许用户将一个文件系统与另一个文件系统重叠(overly),在上层的文件系统中记录更改,而下层的文件系统保持不变。使用4类目录来完成工作,被联合挂载的两个目录lower和upper,作为统一视图联合挂载点merged目录,还有作为辅助功能的work目录。作为upper和lower被联合挂载的统一视图,当同一路径的两个文件分别存在两个目录中时,位于上层目录upper中的文件会屏蔽位于下层lower中的文件,如果是同路径的文件夹,那么下层目录中的文件和文件夹会被合并到上层,在对可读写的OverlayFS挂载目录中的文件进行读写删等操作的过程与挂载两层的aufs(下层是只读层,上导是可读写层)是类似的,需要注意的一点是,第一次以write方式打开一个位于下层目录的文件时,OverlayFS会执行一个copy_up将文件从下层复制到上层,与aufs不同的是,  这个copy_up的实现不符合POSIX标准,Overlay在使用上非常简单,首先使用命令lsmod | grep overlay确认内核中是否存在overlay模块,如果不存在,需要升级到3.18以上的内核版本,并使用modprobe overlay加载,然后再创建必要文件夹并执行 mount命令即可完成挂载,最后可以通过 查看mount命令的输出来确认挂载结果。

[root@localhost ~]# cd /tmp
[root@localhost tmp]# mkdir lower upper work merged
[root@localhost tmp]# mount -t overlay loverlay -o lowerdir=./lower,upperdir=./upper,workdir=./work ./merged
[root@localhost tmp]# mount |grep overlay
overlay on /var/lib/docker/overlay2/3657763c788926c8e1030a2b0656ff0a4a5188bd2e7737e35194261f832e6c12/merged type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/TBB3CXSBIUVLOWKXW2V4KW7XYR:/var/lib/docker/overlay2/l/IG5OOBIOF3QYZF35UT6MQVAURN,upperdir=/var/lib/docker/overlay2/3657763c788926c8e1030a2b0656ff0a4a5188bd2e7737e35194261f832e6c12/diff,workdir=/var/lib/docker/overlay2/3657763c788926c8e1030a2b0656ff0a4a5188bd2e7737e35194261f832e6c12/work)
overlay on /var/lib/docker/overlay2/f72a27e827d1513c9ad338425d1f367c72d127c0a0db0d0490018d9d7454be4c/merged type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/3B4WJ4MMFNWJQQRUUPYSO6ULOG:/var/lib/docker/overlay2/l/IG5OOBIOF3QYZF35UT6MQVAURN,upperdir=/var/lib/docker/overlay2/f72a27e827d1513c9ad338425d1f367c72d127c0a0db0d0490018d9d7454be4c/diff,workdir=/var/lib/docker/overlay2/f72a27e827d1513c9ad338425d1f367c72d127c0a0db0d0490018d9d7454be4c/work)
loverlay on /tmp/merged type overlay (rw,relatime,seclabel,lowerdir=./lower,upperdir=./upper,workdir=./work)
[root@localhost tmp]# cd /var/lib/docker/overlay2/
[root@localhost overlay2]# tree -L 2
.
├── 1aa124125fcddea1292b0cf2522ed29a4ecc495ac021eb6de0a07bb7e051145e
│   ├── committed
│   ├── diff
│   └── link
├── 3657763c788926c8e1030a2b0656ff0a4a5188bd2e7737e35194261f832e6c12
│   ├── diff
│   ├── link
│   ├── lower
│   ├── merged
│   └── work
├── 3657763c788926c8e1030a2b0656ff0a4a5188bd2e7737e35194261f832e6c12-init
│   ├── committed
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
├── 56398f646ddcc3645ed508fa22cd5a9ddca71f8c457a6a8cf45e149dd0096afa
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
├── 65a3b2831578ff4e816dcb6fcdd0d25c5e24937309583da2de568d5f39b82cb4
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
├── 65a3b2831578ff4e816dcb6fcdd0d25c5e24937309583da2de568d5f39b82cb4-init
│   ├── committed
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
├── a052e23891f50dd66b2e6e23626dc34c698a683bc58e00f9b474855fb1240a96
│   ├── committed
│   ├── diff
│   └── link
├── b49c81d847c8451450ac967ce9fdc994969063c1149e18d56f6eed6cd38e69eb
│   ├── committed
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
├── backingFsBlockDev
├── d0f915e259e16628e19fabc6a9ad1ccbb4ce238f409a63dbbb1e8e818d5d2a06
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
├── d0f915e259e16628e19fabc6a9ad1ccbb4ce238f409a63dbbb1e8e818d5d2a06-init
│   ├── committed
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
├── f72a27e827d1513c9ad338425d1f367c72d127c0a0db0d0490018d9d7454be4c
│   ├── diff
│   ├── link
│   ├── lower
│   ├── merged
│   └── work
├── f72a27e827d1513c9ad338425d1f367c72d127c0a0db0d0490018d9d7454be4c-init
│   ├── committed
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
└── l
    ├── 2W7INW232M6YZI3Y7K4XLG46SJ -> ../d0f915e259e16628e19fabc6a9ad1ccbb4ce238f409a63dbbb1e8e818d5d2a06-init/diff
    ├── 3B4WJ4MMFNWJQQRUUPYSO6ULOG -> ../f72a27e827d1513c9ad338425d1f367c72d127c0a0db0d0490018d9d7454be4c-init/diff
    ├── IG5OOBIOF3QYZF35UT6MQVAURN -> ../1aa124125fcddea1292b0cf2522ed29a4ecc495ac021eb6de0a07bb7e051145e/diff
    ├── KOXGSKWMI4X5U3W5NZYPVE6WGS -> ../b49c81d847c8451450ac967ce9fdc994969063c1149e18d56f6eed6cd38e69eb/diff
    ├── M4V2ZQQCU6AJQLE7YIFJXY2HEW -> ../3657763c788926c8e1030a2b0656ff0a4a5188bd2e7737e35194261f832e6c12/diff
    ├── MJ6JR7ND5KKIN66MCRPFTRBFGU -> ../f72a27e827d1513c9ad338425d1f367c72d127c0a0db0d0490018d9d7454be4c/diff
    ├── TBB3CXSBIUVLOWKXW2V4KW7XYR -> ../3657763c788926c8e1030a2b0656ff0a4a5188bd2e7737e35194261f832e6c12-init/diff
    ├── WDB5UXY4AH7J4TVKA6LHIC2PPI -> ../56398f646ddcc3645ed508fa22cd5a9ddca71f8c457a6a8cf45e149dd0096afa/diff
    ├── XOWC5WF5H3EIR3XFY7O3BLUWBB -> ../65a3b2831578ff4e816dcb6fcdd0d25c5e24937309583da2de568d5f39b82cb4-init/diff
    ├── XQYX4GUKV3VWP2YGI2ZT5GLZHZ -> ../d0f915e259e16628e19fabc6a9ad1ccbb4ce238f409a63dbbb1e8e818d5d2a06/diff
    ├── YDVTYBNZH6KTINZRTLR3JIZLLI -> ../65a3b2831578ff4e816dcb6fcdd0d25c5e24937309583da2de568d5f39b82cb4/diff
    └── ZH73XHG5CIUEDMUV4R7L7KHFKE -> ../a052e23891f50dd66b2e6e23626dc34c698a683bc58e00f9b474855fb1240a96/diff

49 directories, 30 files

以上是关于docker存储管理的主要内容,如果未能解决你的问题,请参考以下文章

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

docker存储管理

Docker系列:Docker存储管理

Docker镜像管理

云原生之Docker容器的存储管理

005.Docker存储管理