Harbor的逻辑备份与学习

harbor,逻辑,备份,学习 · 浏览次数 : 3

小编点评

** Harbor 逻辑备份与学习背景** ** 了解 Harbor** Harbor 是一种开源的容器化平台,用于构建、部署和管理容器应用程序。 ** 逻辑备份** 逻辑备份是一种安全备份方法,用于备份容器应用程序的运行状态和数据。逻辑备份可以用于恢复应用程序到一个与原始环境相同的状态。 ** 51cto 文档介绍** 本文来自 51cto 网站,它是一个 Harbor 逻辑备份的指南。文档提供了以下步骤: 1. 获取 Harbor 主机地址。 2. 获取 Harbor 项目的镜像列表。 3. 循环获取每个镜像的版本(tag)。 4. 下载镜像文件。 5. 将镜像文件压缩为 .tar.gz 文件。 ** 使用案例** 假设您想备份一个名为 "my-app" 的 Harbor 项目,其镜像文件位于 "/app/my-app" 目录中。您可以使用以下命令进行逻辑备份: ```bash docker save -o image.tar.gz /app/my-app ``` ** 注意事项** * 逻辑备份需要在容器应用程序运行时进行。 * 确保您拥有正确的权限,可以访问 Harbor 主机和目标目录。 * 逻辑备份可能会占用大量存储空间,因此确保您有足够空间来存储备份文件。

正文

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主机地址
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=HarborPassword              #登录Harbor的用户密码
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt   # 镜像清单文件
echo "" > $Images_File
Tar_File=/backup/Harbor-backup/                 #镜像tar包存放路径
# set -x
# 注意可以关闭 set -x 不然会出现非常多的调试信息. 
# 获取Harbor中所有的项目(Projects)
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
        # 循环获取镜像的版本(tag)
        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主机地址
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=HarborPassword              #登录Harbor的用户密码
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt   # 镜像清单文件
echo " " > $Images_File
Tar_File=/data/Harbor-backup    #镜像tar包存放路径
mkdir -p $Tar_File
# set -x
# 获取Harbor中所有的项目(Projects)
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
        # 循环获取镜像的版本(tag)
        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主机地址
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=HarborPassword              #登录Harbor的用户密码
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt   # 镜像清单文件
echo " " > $Images_File
Tar_File=/data/Harbor-backup_new   #镜像tar包存放路径
mkdir -p $Tar_File
#set -x
# 获取Harbor中所有的项目(Projects)
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
        # 循环获取镜像的版本(tag)
        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

与Harbor的逻辑备份与学习相似的内容:

Harbor的逻辑备份与学习

Harbor的逻辑备份与学习 背景 一直想处理一下一个有网络冲突的Harbor镜像服务器 但是因为网络层自己水平一直是不是非常自信 加上Harbor容器使用的compose的玩法, 自己不敢直接处理. 所以想着至少能够备份一下Harbor仓库内的镜像. 冷备方式不用说了, 想着处理一下逻辑备份. 正

Harbor镜像仓库的导出与整理之二

Harbor镜像仓库的导出与整理之二 背景 前几天参照大神的blog进行了一下harbor的镜像列表的获取与下载. 当时发现一个很诡异的问题. 实际上镜像仓库里面的镜像很多. 但是导出和列表里面的却很少. 经过查询发现harbor的v2.0的API里面存在一些限制. 每次api的返回结果最多是 10

[转帖]解决Harbor在服务器重启后无法自启动的问题

问题 当部署Harbor的服务器在重启之后,可能会出现Harbor无法跟随系统自启动 解决方案 现假设Harbor的安装目录位置为/usr/local/harbor,在Harbor安装完成之后,在此目录下会生成docker-compose.yml配置文件,可以使用docker-compose操作此文

[转帖]harbor-db restarting问题

现象: 在安装harbor后,启动时发现harbor-db 一直是restarting,/harbor-jobservice,/harbor-core 这两是starting 状态,如下图 解决: 1.查看你的数据库的挂载目录(对应的宿主机目录)是什么,去你的harbor的安装目录,例如我的是usr

[转帖]Harbor:修改默认的172网段

背景: harbor 默认启动会随机创建 172 网段的ip地址,跟集群规划的网段冲突 Harbor 网段修改步骤 0. 原来Harbor占用的网段 # 网桥名:harbor_harbor [root@gpunode2 test]# docker network ls NETWORK ID NAME

Harbor修改默认网段以及设置开机启动的方法

Harbor修改默认网段以及设置开机启动的方法 背景 docker 默认的网段是 172.16.xx.xx 网段. harbor进行设置时会自动加1 设置为 172.17.xx.xx 有时候这个网段是跟业务网段冲突的, 需要进行一下修改. 但是需要注意的是. 已经使用过很久的harbor 修改起来是

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

【摘要】一键获取Harbor中的镜像列表,无需登录harbor UI,也可批量下载镜像到本地并保存为tar包。本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接: https://github.com/weopenprojects/WeOpen-Star 前言 我们要查询Harbor中某个项

[转帖]docker报错:报错br-xxxx 之Docker-Compose 自动创建的网桥与局域网络冲突

https://www.dianjilingqu.com/653590.html 故障描述: 当我使用docker-compose的方式部署内网的harbor时。它自动创建了一个bridge网桥,与内网的一个网段(172.18.0.1/16)发生冲突,docker 默认的网络模式是bridge ,默

[转帖]Docker-Compose 自动创建的网桥与局域网冲突解决方案

https://zhuanlan.zhihu.com/p/379305319 Docker-Compose 自动创建的网桥与局域网冲突解决方案 当我使用docker-compose的方式部署内网的harbor时。它自动创建了一个bridge网桥,与内网的一个网段(172.18.0.1/16)发生冲突

配置pod拉取harbor容器镜像仓库私有镜像:secret保存账号密码

配置pod拉取harbor容器镜像仓库私有镜像:secret保存账号密码,Docker-Registry类型的Secret简介,镜像仓库简介,搭建Harbor容器镜像仓库,安装Harbor,创建项目,推送镜像到harbor镜像仓库,使用secret保存harbor账号密码拉取私有仓库的镜像