docker registry 存储格式
2009 年 6 月 23 日
一. 场景描述
前几天,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文件就是实际每一层存储的内容了。