实用小技能:一键获取Harbor中镜像信息,快捷查询镜像

网友投稿 509 2022-09-08

实用小技能:一键获取Harbor中镜像信息,快捷查询镜像

【摘要】 \一键获取Harbor中的镜像列表,无需登录harbor UI,也可批量下载镜像到本地并保存为tar包。\本文已参与「开源摘星计划」,欢迎正在阅读的你加入。\活动链接:UI管理界面,然后进入到项目(Project),再到搜索框输入镜像的名称来查找镜像在不在。

那么,如果只知道镜像的名称,不知道镜像在哪个项目(Project)呢?你是每个项目下都去搜索么?

那么!有什么方法可以简化这些操作呢?即:

不需要登录Harbor就可以看到Harbor里面所有的镜像; 仅提供镜像名称就可以看到镜像在哪个项目; 仅知道镜像名称就可以判断Harbor镜像仓库中是否存在这个镜像,从而判断上传的镜像是否上传成功。

我在工作中常遇到开发的同事的问题:

我上传一个镜像,帮忙看上传成功没? 我刚发布一个服务,构建的时候报错一直找不到镜像,这是什么原因? 我之前上传好几个版本的镜像,怎么知道都有哪些?

命令行获取Harbor镜像清单

在Harbor服务主机上,可通过如下命令在 registry 存储目录下获取镜像列表:

$ grep data_volume /app/harbor/harbor.yml #根据配置文件查找数据存储目录 data_volume: /data $ cd /data/registry #进入到Harbor的数据目录下 $ find docker -type d -name "current" | sed 's|docker/registry/v2/repositories/||g;s|/_manifests/tags/|:|g;s|/current||g' > images.list $ cat images.list lidabai/busybox:1.28 library/prepare:v2.5.1

Shell脚本获取Harbor中所有的镜像列表

前面在harbor服务主机命令行实现了harbor镜像清单列表的获取。\那么,如果不是在Harbor服务主机上又该如何获取呢?

通过调用Harbor API,先获取所有项目(Projects),然后循环获取每个项目下的镜像名称,再循环获取某个镜像的所有tag版本,最后以指定的格式输出到一个镜像清单文件中。而Harbor的API有两个版本(v1、v2), 每个版本的API调用方法都不一样。

3.1 查看API版本

$ curl -k {"version":"v2.0"}

3.2 Harbor V1 API的shell脚本

$ cat Harbor-image-list.sh #!/bin/bash #镜像清单文件,将获取到的镜像信息存到该文件中 File=harbor-images-`date '+%Y-%m-%d'`.txt ## 定义Harbor连接地址,这里需要改为你们自己的Harbor地址 Address=http://192.168.2.250:443 ## 定义连接Harbor的用户名和密码(因为是获取全部的镜像,只有admin用户才有该权限) Hamin=admin:Harbor12345 ## 获取Harbor中有哪些项目(Project) Project_List=$(curl -u "$Hamin" -X GET $Address/api/projects -H "Content-Type: application/json" | grep name | awk '/"name": /' | awk -F '"' '{print $4}') for Project in $Project_List;do # 循环获取每个项目下所有的镜像 Image_Names=$(curl -u "$Hamin" -X GET $Address/api/search?q=$Project -H "Content-Type: application/json" | grep "repository_name" | awk -F "\"" '{print $4}') for Image in $Image_Names;do # 循环获取每个镜像所有的标签(版本) Image_Tags=$(curl -u "$Hamin" -X GET $Address/api/repositories/$Image/tags -H "Content-Type: application/json" | awk '/"name": /' | awk -F '"' '{print $4}') for Tag in $Image_Tags;do # 将获取到的镜像完整路径存档到镜像清单文件 echo "$Address/$Image:$Tag" | grep -v Base | grep -v Image | grep -v CentOS >> $File done done done $ chmod +x Harbor-image-listk.sh #给脚本可执行权限 $ sh Harbor-image-listk.sh #执行脚本

然后可以打开$File中的文件查看镜像清单了!

3.3 Harbor API v2版本的Shell脚本实现

$ cat Harbor-image-listk-v2.sh #!/bin/bash Harbor_Address=192.168.2.250:443 #Harbor主机地址 Harbor_User=admin #登录Harbor的用户 Harbor_Passwd=Harbor12345 #登录Harbor的用户密码 Images_File=harbor-images-`date '+%Y-%m-%d'`.txt # 镜像清单文件 Tar_File=/backup/Harbor-backup/ #镜像tar包存放路径 set -x # 获取Harbor中所有的项目(Projects) Project_List=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}') for Project in $Project_List;do # 循环获取项目下所有的镜像 Image_Names=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}') for Image in $Image_Names;do # 循环获取镜像的版本(tag) Image_Tags=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET -k | awk -F '"' '{print $8,$10,$12}') for Tag in $Image_Tags;do # 格式化输出镜像信息 echo "$Harbor_Address/$Image:$Tag" >> harbor-images-`date '+%Y-%m-%d'`.txt done done done $ chmod +x Harbor-image-listk-v2.sh $ sh Harbor-image-listk-v2.sh

基于镜像清单将Harbor中的镜像制作成tar包

前面通过shell脚本获取harbor中的镜像列表,并以\harbor地址:服务端口/项目名称/镜像名称:tag的格式输出到文件中。\接下来可根据该文件批量pull镜像到本地,然后制作成tar包。

4.1 编写shell脚本

$ cat image-pull.sh #!/bin/bash ###使用docker从镜像文件中下载镜像——将下载的镜像进行打包保存——删除下载到本地的镜像——将封装好的镜像包移动到备份目录 Image_tags=$(uniq $Images_File) for image_tag in $Image_tags;do image_Name=$(echo $image_tag | awk -F/ '{print $3}' | awk -F: '{print $1}') image_Lable=$(echo $image_tag | awk -F/ '{print $3}' | awk -F: '{print $2}') docker pull $image_tag docker save $image_tag -o $image_Name-$image_Lable.tar docker rmi $image_tag mv $image_Name-$image_Lable.tar $Tar_File done $ chmod +x image-pull.sh

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

上一篇:今天给大家介绍最好用的脚本语言--JavaScript
下一篇:卫龙刘卫平才是真正的营销大师!
相关文章

 发表评论

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