Docker Registry 磁盘空间清理
使用 Docker 的时候用的是 Docker Registry 来存储镜像。一开始的时候给了500G数据盘,日积月累的累积的数据就开始变多了。
没办法只好想办法去清理。看了下官网的api文档:Docker Registry API
其实还挺简单的,主要是用http接口先将镜像和层删除,然后使用镜像仓库的garbage-collect。
默认HTTP接口是不支持DELETE方法的,需要修改配置文件中storage.delete.enabled: true,配置文件的解释可以在这里看到地址Registry 配置文件
1 | storage: |
镜像仓库的garbage-collection可以看下官网文档。主要看懂一个图就可以了:
1 | A -----> a <----- B |
1 | A -----> a B |
这样c就要回收了。
然后我们使用HTTP的API。查到repo,tags,然后就可以删除相应的镜像。
但是在删除的时候要注意下,首先我们要通过接口获取digest的值,但是这个digest的值获取方式比较特别,首先我们访问:/v2/<name>/manifests/<reference>这个接口的时候,需要使用GET获取HEAD方法,然而在请求的时候需要加入Header:Accept: application/vnd.docker.distribution.manifest.v2+json这样才可以在返回的HEAD中才能获取到正式的digest。
使用golang写了一个demo代码:
1 |
|
就算这样执行完,别忘记了,进入到registry的容器中,然后使用:
1 |
|
/etc/docker/registry/config.yml文件要打开之前说的storage.delete.enabled: true