大家好,我是脚丫先生 (o^^o)
在大数据运维中,遇到一个问题:之前的Harbor是搭建在科研网,而现在的Harbor是搭建在办公网。两边的网络是不联通的(无法互相ping通),要把老的Harbor仓库里的镜像迁移到现有的Harbor仓库。如何去做呢?
一、迁移思路
- (1) 可以把Harbor仓库里的镜像全部pull下来,打包成镜像,之后导入现有Harbor仓库所在的服务器,修改tag标签,最后push到仓库。
- (2) 利用本地的虚拟机作为中转,编写脚本,进行快速把之前仓库里的镜像push到现有仓库。
二、本地虚拟机中转
- (1) 首先把本地虚拟机安装好docker
- (2) 在docker中配置好两个私有仓库
[root@spark1 ~]# cat /etc/docker/daemon.json
{
"insecure-registries": ["10.1.119.12","172.10.10.xx"], (这里为old与new的Harbor仓库服务器地址)
"registry-mirrors": [
"https://kuamavit.mirror.aliyuncs.com", "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"
]
}
重启docker,即可。
- (3) 编写pull与push脚本
在本地中转虚拟机里进行操作。所有的push操作,都必须先登陆new(新的)Harbor仓库获得权限
docker login http://172.10.10.xx
输入用户名和密码即可。
1.第一步:
curl -X GET --header 'Accept: application/json' 'http://10.1.119.12/api/search?q=项目名称'
找到你需要迁移的项目project_id
2.第二步:修改pull和tag、push脚本(只需要修改project_id)粗略版本,能完美成功!
#!/bin/bash
URL="http://10.1.119.12"
IP="10.1.119.12"
USER="admin"
PASS="Harbor12345"
targetIP="172.10.10.xx"
REPOS=$(curl -s -X GET --header 'Accept: application/json' "${URL}/api/repositories?project_id=45"|grep "name"|awk -F '"' '{print $4}')
for rp in ${REPOS}
do
TAGS=$(curl -s -X GET --header 'Accept: application/json' "${URL}/api/repositories/${rp}/tags"|grep \"name\"|awk -F '"' '{print $4}'|sort -r)
a=$(echo ${rp}|awk -F "/" '{print $2}')
for t in ${TAGS}
do
docker pull ${IP}"/"${rp}":"${t}
docker tag ${IP}"/"${rp}":"${t} ${targetIP}"/"${rp}":"${t}
docker rmi ${IP}"/"${rp}":"${t}
docker push ${targetIP}"/"${rp}":"${t}
done
echo "===================="
done
三、参考
(1) 私有仓库迁移harbor: https://blog.csdn.net/zsy_1991/article/details/101029404
(2) harbor批量导出镜像: https://www.cnblogs.com/fan-gx/p/11392159.html