docker registry 存储格式
一. 场景描述
前几天,registry服务器磁盘已经满了,想办法清除部分无用的数据。其中有一种方法,就是手工清除,上一篇文章没有写怎么手动清除。这里描述一下registry的存储格式。
二. 存储格式
1.整体存储
首先registry的存储路径为:/var/lib/registry/docker/registry/v2
里面分了两个目录:
repositories :用于指定镜像索引
blobs :用于实际存储镜像文件
2.repository
进入repository,里面直接路径是镜像文件夹
例如:
127.0.0.1:5000/kalilinux/kali-linux-docker
这个镜像,在repository下存储的路径就是:
/var/lib/registry/docker/registry/v2/repositories/kalilinux/kali-linux-docker
更具体的存储:
├── _layers
│ └── sha256
│ ├── 2d2ae6a9fcee56e3bba2e78e424b902dbf47454e1ae6f7d5edff2a34f5e2bed1
│ │ └── link
│ ├── 2ff00b60bbf86eaddfe33510c1d3bbc7a004b4d9f32b53fa511d136f91a03b50
│ │ └── link
│ ├── 3190b4c353c3301a186efaded81c4fd9612bef0c8e75075a352d72066d578eca
│ │ └── link
│ ├── 43c2db3ca1e0105af54c188061c477b71e7da0c0171217a12b86b8111cc9ed4e
│ │ └── link
│ ├── 4bdcae87f41626ab5c1dd172317eabfb07753bb749d980faa2bc446c9ec2f2d5
│ │ └── link
│ ├── 52c6ea74ac5d7a0182d8fa81c22999f63c4b0d9593884c0d7a93791f9e2708cb
│ │ └── link
│ ├── 54a5854cda2a5a6d9c47b5dfe8ce868dc9c6cca4c6c87263b02cc8b61bf9b924
│ │ └── link
│ ├── 59a0b3c10ffb05289497583ef8ca81bb7229c369bab5ec4044c945b5eb0fabf3
│ │ └── link
│ ├── 5d0e53935e132365e66719269074121f11734ad64bd336a17c87e9dc85948b9d
│ │ └── link
│ ├── 6912b8276def1e4b2ed789badc630cbc20c94f27ddeeb15994ff2a6a3d72013c
│ │ └── link
│ ├── 820130cb6919d780f3b56b31a38b7609b2fd4d00981fa091015a5fb69543f36f
│ │ └── link
│ ├── 86f3fc4b485e0887af85dad963874a906e6d216d2ca59e54d92e22a20ee9cad6
│ │ └── link
│ ├── 87887217c2897c1524e2ddda44a334ab1cf7d425f53eb3e16f4aa3175ac11f0a
│ │ └── link
│ ├── 88dbaed13d27cc398a9b468c84b687b6e4dc36d403c8cb21dc424b41fd150624
│ │ └── link
│ ├── 89331c3aa1d94c2e3116fcee4c5ff7f0d9d3e29e69774f71597be3c2009a5e22
│ │ └── link
│ ├── 9d645621bf45b5cedbda042df6604cf2b8abc6a44cf6c28704f806ed98b6777d
│ │ └── link
│ ├── a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
│ │ └── link
│ └── c6f960c82b113bfe9e675c62739da9514847cd8480f6ed5d80ed4de34fc7d6ce
│ └── link
├── _manifests
│ ├── revisions
│ │ └── sha256
│ │ └── 9cc62c3e49d75e14bc134154686b6465aaf48b78a4044618ca58802ac7363130
│ │ ├── link
│ │ └── signatures
│ │ └── sha256
│ │ └── 4fe55c9726bd8b00a592ae60988843ebf21a07f50e3ad458c03489ceddc97a08
│ │ └── link
│ └── tags
│ └── latest
│ ├── current
│ │ └── link
│ └── index
│ └── sha256
│ └── 9cc62c3e49d75e14bc134154686b6465aaf48b78a4044618ca58802ac7363130
│ └── link
└── _uploads
34 directories, 22 files
可以看到最基本的内容为link文件,而link文件本身存储的也是一个64位的16进制字符串。
3.blob
在repository中,我们存储的只是索引文件,如果我们想释放磁盘存储,还是看一下blob内的内容。
可以看到这里的存储是16进制数字编码,这里展示的是repository link文件中存储的64位16进制编码中的前2位。主要用于索引,方便查找。
例如我们进入(9cc62c3e49d75e14bc134154686b6465aaf48b78a4044618ca58802ac7363130)文件夹,里面只有一个data文件,这个data文件就是实际每一层存储的内容了。