docker存储管理
docker镜像元数据管理
repository元数据
[ ~]# cd /var/lib/docker/image/overlay2/ [ overlay2]# cat repositories.json |python -mjson.tool { "Repositories": { "busybox": { "busybox:latest": "sha256:6d5fcfe5ff170471fcc3c8b47631d6d71202a1fd44cf3c147e50c8de21cf0648", ":6915be4043561d64e0ab0f8f098dc2ac48e077fe23f488ac24b665166898115a": "sha256:6d5fcfe5ff170471fcc3c8b47631d6d71202a1fd44cf3c147e50c8de21cf0648" }, "nginx": { "nginx:latest": "sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145", ":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 [ 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。
镜像文件在本存储在
[ sha256]# cd /var/lib/docker [ 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命令的输出来确认挂载结果。
[ ~]# cd /tmp [ tmp]# mkdir lower upper work merged [ tmp]# mount -t overlay loverlay -o lowerdir=./lower,upperdir=./upper,workdir=./work ./merged [ 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)
[ tmp]# cd /var/lib/docker/overlay2/ [ 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