0
点赞
收藏
分享

微信扫一扫

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

窗外路过了谁 2022-07-18 阅读 122

背景

现在许多团队使用 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://stedolan.github.io/jq/download/

nexusCleanUp

下载地址: 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_idtask02_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
举报

相关推荐

0 条评论