正文
Harbor的逻辑备份与学习
背景
一直想处理一下一个有网络冲突的Harbor镜像服务器
但是因为网络层自己水平一直是不是非常自信
加上Harbor容器使用的compose的玩法, 自己不敢直接处理.
所以想着至少能够备份一下Harbor仓库内的镜像.
冷备方式不用说了, 想着处理一下逻辑备份.
正好看到了 51cto里面一个高手的文档, 自己正好拿来验证一下.
学习来源自:
https://blog.51cto.com/lidabai
感谢原作者, 这里仅是进行一下简单的演绎.
复制
版本确认
curl -s http://192.168.xxx.xx/api/version
现在一般都是 2.0的版本了 返回的结果一般为:
{"version":"v2.0"}
复制
使用shell脚本获取镜像列表信息
Harbor_Address=http://192.168.xxx.xx
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin
Harbor_Passwd=HarborPassword
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt
echo "" > $Images_File
Tar_File=/backup/Harbor-backup/
Project_List=$(curl -s -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Project in $Project_List;do
Image_Names=$(curl -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects/$Project/repositories -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Image in $Image_Names;do
Image_Tags=$(curl -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/v2/$Image/tags/list -k | awk -F '"' '{print $8,$10,$12}')
for Tag in $Image_Tags;do
echo "$Harbor_Pulltag/$Image:$Tag" >> $Images_File
done
done
done
复制
转储所有镜像
#!/bin/bash
Harbor_Address=http://192.168.xxx.xx
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin
Harbor_Passwd=HarborPassword
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt
echo " " > $Images_File
Tar_File=/data/Harbor-backup
mkdir -p $Tar_File
Project_List=$(curl -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Project in $Project_List;do
mkdir -p ${Tar_File}/${Project}
Image_Names=$(curl -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects/$Project/repositories -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Image in $Image_Names;do
Image_Tags=$(curl -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/v2/$Image/tags/list -k | awk -F '"' '{print $8,$10,$12}')
for Tag in $Image_Tags;do
docker pull "$Harbor_Pulltag/$Image:$Tag"
mkdir -p ${Tar_File}/${Image}
docker save "$Harbor_Pulltag/$Image:$Tag" |gzip > ${Tar_File}/${Image}.${Tag}.tar.gz
done
done
done
复制
仅转储最大tag编号的镜像
- 需要主要, 这个里面存在风险, 必须保证镜像tag的顺序递增才有效果
#!/bin/bash
Harbor_Address=http://192.168.xxx.xx
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin
Harbor_Passwd=HarborPassword
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt
echo " " > $Images_File
Tar_File=/data/Harbor-backup_new
mkdir -p $Tar_File
Project_List=$(curl -s -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Project in $Project_List;do
mkdir -p ${Tar_File}/${Project}
Image_Names=$(curl -s -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects/$Project/repositories -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Image in $Image_Names;do
Image_Tags=$(curl -s -u $Harbor_User:$Harbor_Passwd -H "Content-Type: application/json" -X GET $Harbor_Address/v2/$Image/tags/list -k | awk -F '"' '{print $8,$10,$12}')
Tag=$(echo $Image_Tags |sort |awk '{print $NF}')
docker pull "$Harbor_Pulltag/$Image:$Tag"
docker save "$Harbor_Pulltag/$Image:$Tag" |gzip > ${Tar_File}/${Image}.${Tag}.tar.gz
done
done
复制