工作中遇到一個問題,要把某個項目的harbor鏡像庫全部遷移到其他環境的harbor上,由於網絡不通,只能導出來,傳給同事,讓同事導入到他們的harbor上;
記錄下我的操作方法。
1.批量導出harbor某個項目的鏡像庫
## 查到harbor的項目編號
curl -X GET --header 'Accept: application/json' 'http://192.168.10.16/api/search?q=paas-k8s'
#!/bin/bash
URL="http://192.168.10.16"
IP="192.168.10.16"
USER="admin"
PASS="fana"
REPOS=$(curl -s -X GET --header 'Accept: application/json' "${URL}/api/repositories?project_id=3"|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}
echo ${IP}"/"${rp}":"${t} >> /opt/docker.tag
docker save ${IP}"/"${rp}":"${t} > /opt/docker/${IP}-${a}-${t}.tar.gz
done
echo "===================="
done
2.批量導入到images
for i in `ll /opt/docker|awk '{print $9}'`;do docker load < $i;done
3.批量push到harbor
for i in `docker images|awk '{print $1}'|grep -v REPOSITORY`;do docker push $i; done
#或
for i in `cat /opt/docker.tag`;do docker push $i;done