linux cpu占用率如何看
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~