先清理mainfests
方法1 - Cleanup Policies
查看docker repo
比如你的docker repo名字叫做test-repo,然后在nexus3首页的seatch下面找到docker,点进去随便查看一个已经上传的镜像

记住上面的
Name选项,之后要用到
设定清理策略(clean policies)
在nexus3 设置中找到
Cleanup Policies

点击
Create Cleanup Policy创建一个新的清理策略

注意到
Asset Name Matcher区域,这里可以填写RE表达式,过滤的是第一步中得到的Name选项。
比如你想要过滤所有以clean结尾的rabbitmq镜像,你可以这么编写你的表达式:
1 | v2/rabbitmq/manifests/.*-clean |
如果你想要清理所有的镜像,而不只是
rabbitmq
1 | v2/.*/manifests/.*-clean |
当然你也可以根据情况选择是否设置镜像过期时间一起配合使用(注意这里的三个条件是逻辑与的关系)
配置完成后,不要忘了点击下方进行预览,以免失误删除了其他镜像。

配置完成后点击
Save按钮保存。
应用清理策略
同样是在设置页面点击
Repositories,点击要配置的 docker repo

在
Cleanup区域找到 刚刚创建的策略,并将其加入到右侧Applied一栏,然后点击下方Save按钮保存。
至此完成策略的应用
立即执行清理任务
在应用清理策略后,nexus3默认会创建一个自动清理的任务,该任务在每天凌晨一点钟自动执行。如果立即手动执行,可以在设置页面找到
Tasks面板,找到刚才说的自动清理任务。

找到名为
Cleanup service的默认任务
在任务面板点击`Run`即可立即执行清理计划。方法2 - nexus-cli镜像清理工具
注: 如果报错
.crendetials file not found,则重新执行nexus-cli
下载nexus-cli镜像清理工具
早期的nexus-cli已经没有维护,nexus-cli删除的镜像并没有按照时间的顺序进行保留 。需要在13rentgen的仓库中下载修复版的,所以需要下载最新的修复版本
1 | curl -sSL https://github.com/13rentgen/nexus-cli/releases/download/v1.1.0/nexus-cli -o /usr/local/bin/nexus-cli |
nexus_images_del.sh
1 | !/usr/bin/env bash |
配置crontab
1 | [root@VM-30-197-centos ~]# crontab -l |
配置nexus-cli
1 | nexus-cli configure |
附录:nexus-cli常用命令
| 命令说明 | 命令 |
|---|---|
| 查看当前仓库中所有镜像 | nexus-cli image ls |
| 查看某一镜像的所有的tag | nexus-cli image tags -name $IMAGE_NAME |
| 查看某一镜像详细信息 | nexus-cli image info -name $IMAGE_NAME -tag $TAG |
| 删除指定tag的指定镜像 | nexus-cli image delete -name $IMAGE_NAME -tag $TAG |
| 仅保留最新的X个tag,其余全部删除 | nexus-cli image delete -name $IMAGE_NAME -keep X |
| 清理具体的镜像,保留版本号最大的1个 | nexus-cli image delete -n ${img_name} -k 1 |
说明:-keep参数不能为0,所以如果该镜像只有一个tag,我们想删除,那就只能根据tag来删除
配置镜像清理的Task
上面的操作执行后,虽然镜像是删除了,但是磁盘空间还没有释放出来,因此需要我们进行以下操作来清理物理磁盘
配置Delete unused docker manifests and images
该任务仅可以配置为N个小时内未被使用的镜像将被删除
在 Nexus 中,Delete unused docker manifests and images task(删除未使用的 Docker manifests 和镜像任务)是一项定期运行的任务,用于清理仓库中未被使用的 Docker manifests 和镜像。
这个任务会检查每个 Docker 仓库中所有的 manifests 和镜像,并删除那些没有被任何 tag 引用的 manifests 和镜像。这样可以帮助释放磁盘空间,减少无用数据的占用,提高存储效率。
通过运行 Delete unused docker manifests and images task,可以避免仓库中出现大量未被使用的镜像和 manifests,减少磁盘空间的使用和运维成本。

再配置 Compact blob store(此步会消耗资源进行压缩,建议选择时间段在凌晨)
在 Nexus 中,Compact Blob Store Task(压缩式 Blob 存储任务)是一项定期运行的任务,用于压缩 Compact Blob Store 中的 Blob 文件。
Compact Blob Store Task 通过查找不再使用的 Blob 文件来减小磁盘空间占用,它会将这些文件压缩成单个存档文件,从而减少文件数量和磁盘空间占用。
通过运行 Compact Blob Store Task,可以使 Blob 存储更加高效和节省空间。这对于需要长时间保存大量文件的仓库来说特别重要,可以减少磁盘空间的使用和运维成本。
