当前位置:   article > 正文

[Harbor] 使用image-syncer在不同Harbor之间同步镜像

image-syncer

image-syncer使用前

  • 目标Harbor 修改其配置文件,如路径/data/harbor/harbor.yml中的Hostname为本机IP地址,执行docker-compose down卸载再执行重新./install.sh安装Harbor

image-syncer使用

  • 假设需要同步的2个Harbor的域名均为:test.harbor.com
  • 默认的Harbor用户密码为admin/Harbor12345
  • 源 Harbor A: 10.0.0.10
  • 目标 Harbor B: 10.0.0.11

下载image-syncer

Github: image-syncer
以下使用Docker来运行image-syncer,防止影响宿主机的host解析

  • 下载
wget https://github.com/AliyunContainerService/image-syncer/releases/download/v1.3.1/image-syncer-v1.3.1-linux-amd64.tar.gz
tar xf image-syncer-v1.3.1-linux-amd64.tar.gz
rm -f LICENSE  README.md
  • 1
  • 2
  • 3
  • 使用
# 获得帮助信息
./image-syncer -h

# 设置配置文件为config.json,默认registry为registry.cn-beijing.aliyuncs.com
# 默认namespace为ruohe,并发数为6
./image-syncer --proc=6 --auth=./auth.yaml --images=./images.yaml --retries=3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 拉取Ubuntu镜像
docker pull ubuntu
docker run -d --name image-syncer ubuntu tail -f /dev/null
docker cp image-syncer image-syncer:/root
docker exec -it image-syncer bash
apt update
apt -y install vim curl
# 将源Harbor解析添加到hosts中
echo '10.0.0.10 test.harbor.com' >> /etc/hosts
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

准备2个文件

touch run.sh 10.0.0.11
chmod +x run.sh
  • 1
  • 2
  • run.sh
#!/bin/bash

harbor_domain_name="test.harbor.com"
images_path=./images.yaml
auth_path=./auth.yaml

# 保存镜像列表到文件且文件名为IP地址,会自动遍历所有文件名为IP地址的文件

function if_ip_domain() {
    code=$(curl -o /dev/null -k -s -u admin:Harbor12345 -w %{http_code} https://$1/health)
    [ "$code" -eq 200 ] && return 0 || return 1
    # docker login $1 -u admin -p Harbor12345 &> /dev/null
    # [ $? -eq 0 ] && return 0 || return 1
}

>$auth_path
for i in $(ls -1); do
    if if_ip_domain $i; then
        file_image_list=$file_image_list" "$i
        for authIP in $(cat $i | grep -E "^[^@#%^&*()/<>,;:'\"]+/[^@#%^&*()/<>,;:'\"]+/.*:[^@#%^&*()/<>,;:'\"]*[[:space:]]*$" | grep -Eo "^[^@#%^&*()/<>,;:'\"]+" | sort | uniq); do
            echo ${authIP}: >>$auth_path
            cat <<EOF >>$auth_path
  username: admin
  password: Harbor12345
  insecure: true

EOF
        done
        echo ${i}: >>$auth_path
        cat <<EOF >>$auth_path
  username: admin
  password: Harbor12345
  insecure: true

EOF
    fi
done

>$images_path
for i in $file_image_list; do
    for line in $(cat $i | grep -E "^[^@#%^&*()/<>,;:'\"]+/[^@#%^&*()/<>,;:'\"]+/.*:[^@#%^&*()/<>,;:'\"]*[[:space:]]*$"); do
        src=$line
        dest=$(echo $src | sed -n 's/'$harbor_domain_name'/'$i'/p')
        echo $src: $dest >>$images_path
    done
done
>sync.log
# ./image-syncer --auth $auth_path --images $images_path -r 3 --log sync.log
./image-syncer --auth $auth_path --images $images_path -r 3 | tee sync.log
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 10.0.0.11
test.harbor.com/library/test01:v2.01.7
test.harbor.com/library/test02:v1.0.11
  • 1
  • 2

注意10.0.0.11是文件名,run.sh将会遍历文件名为10.0.0.11所有行,将镜像从test.harbor.com(10.0.0.10)推送到10.0.0.11

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/554418
推荐阅读
相关标签
  

闽ICP备14008679号