快速删除Nexus docker镜像仓库镜像

网友投稿 673 2022-10-18

快速删除Nexus docker镜像仓库镜像

背景

现在许多团队使用 Nexus 来管理 Docker 镜像,版本不断迭代,镜像仓库占用的磁盘空间也越来越大。Nexus 的控制台并未提供批量操作镜像功能,清理镜像十分不便,只能通过相关api来完成指定镜像的批量删除操作。

镜像内容是存储在一层虚拟文件系统(VFS)之上,由多个文件块(Blobs)、描述清单文件(Manifests)和 标签文件(tags)组成,因为镜像设计是多层的,这些文件会互相依赖,在没有确认文件块(Blob)是否被其他镜像使用的情况下,直接删除会让仓库不完整,所以一般的做法是只做删除标记,而不是真删除,通过垃圾回收机制来遍历当前仓库的有向关系图(DAG),然后在删除没有被引用的文件块。

清理工具

工具 说明
nexus-cli 根据IMAGE_NAME删除,可以保留最新的几个tag,需要手动执行Tasks来清理空间
nexusCleanUp 根据IMAGE_NAME+TAG删除,可以自动执行Tasks自动清理空间

nexus-cli

工具安装

wget https://s3.eu-west-2.amazonaws.com/nexus-cli/1.0.0-beta/linux/nexus-cli chmod +x nexus-cli

工具配置

nexus-cli configure Enter Nexus Host: http://127.0.0.1:8081 Enter Nexus Repository Name: docker-release Enter Nexus Username: admin Enter Nexus Password: xxxxxx

操作镜像文件

列出所有镜像

nexus-cli image ls

清理镜像

#nexus-cli image delete -name IMAGE_NAME -keep X(-keep X 表示保留几个最新的tag) nexus-cli image delete -name fund-service -keep 2

清理磁盘空间

创建两个Nexus Task 用于清理物理空间,进入Server administraion and configuration >> System >> Tasks,分别创建如下两个类型的任务:

Docker - Delete unused manifests and images Admin - Compact blob store

其中Task frequency属性选择Manual,也可以设置成定时执行,其他属性根据实际情况填写完保存即可;创建好任务后先运行Delete unused manifests and images,再运行Compact blob store,可以清理磁盘空间。

nexusCleanUp

工具安装

JSON命令行工具

wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 chmod +x ./jq cp jq /usr/bin

jq官方下载地址:https://github.com/IamMichael/nexusCleanUp.git

#包含如下脚本 -rwxr-xr-x. 1 root root 4226 3月 29 10:05 cleanNexus.sh -rw-r--r--. 1 root root 11357 10月 21 2019 LICENSE -rwxr-xr-x. 1 root root 1993 10月 21 2019 pullAndpush.sh

修改cleanNexus.sh脚本内容

# 访问仓库地址 nexus_url="http://192.168.58.100:8081" registry_url="http://192.168.58.100:8081/repository/docker-release" # auth 认证用户名密码 auth_user="admin" auth_passwd="123456"

创建Nexus Task

创建两个Nexus Task 用于清理物理空间,进入Server administraion and configuration >> System >> Tasks,分别创建如下两个类型的任务:

Docker - Delete unused manifests and images Admin - Compact blob store

其中Task frequency属性选择Manual,其他属性根据实际情况填写完保存即可;创建好任务后,注意脚本中获取任务ID的操作是否有误,可以在脚本中task01_id和task02_id后面添加输出信息,如果遇到没有输出任务ID,可以把脚本中的地址在浏览器执行看下结果,如果存在问题,手动执行下两个任务再刷新下返回结果应该就正常了:

echo -e "task01_id : ${task01_id}" echo -e "task02_id : ${task02_id}"

操作镜像文件

查看帮助信息

sh cleanNexus.sh -h

查询镜像

sh cleanNexus.sh -q

删除指定镜像

sh cleanNexus.sh -d busybox:1.0.1-RC1

批量删除镜像

创建要批量删除的镜像列表文本

vi imagelist.txt #添加如下镜像 busybox:1.0.1-RC1 ubuntu:latest centos:7.5sh

sh cleanNexus.sh -d `cat imagelist.txt`

查看磁盘空间

df -h du /nexus/* -h|sort -h

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot中Mybatis注解一对多和多对多查询实现示例
下一篇:#夏日挑战赛#,Docker搭建大数据平台之Hadoop,Spark,Hive初探
相关文章

 发表评论

暂时没有评论,来抢沙发吧~