shell脚本实现docker镜像批量保存并上传至Harbor仓库
使用场景说明:
由于开发环境与正式环境网络隔离,通过导出业务系统docker镜像的方式,将业务系统docker镜像推送到正式环境harbor仓库。
(1)批量导出业务系统docker镜像。
#!/bin/bash
#1.创建tar包
echo "开始创建tar包"
# 获取所有镜像的列表 开发环境Harbor 镜像地址:192.168.16.131/embm/*:tag
images=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep '192.168.16.131')
# 遍历每个镜像
varname=''
varnametemp=''
varnametemp2=''
for image in $images; do
# 创建tar包,不包括镜像历史层(仅保存当前层)
varname="${image//192.168.16.131\/''}"
echo "*********** $varname"
varnametemp="${varname//\embm\/''}"
echo "*********** $varnametemp"
varnametemp2="${varnametemp//:/'-'}"
echo "*********** $varnametemp2"
docker save -o "${varnametemp2}.tar" "$image"
echo "Created tar for $varnametemp2"
done
echo "结束创建tar包"
(2)批量打Tag并推送至正式环境Harbor仓库。
#!/bin/bash
#1.加载镜像
echo "开始执行加载镜像"
#ls /data/business_images/*.tar | xargs -I {} docker load -i {}
sleep 2# 2.打成Harbor tag 并推送
echo "开始执行打成Harbor tag 并推送" 线上环境Harbor镜像地址195.129.2.34/embm/*:tag
images=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep '192.168.16.131/embm')
# 遍历每个镜像
for image in $images; do
# 创建tar包,不包括镜像历史层(仅保存当前层)
echo "镜像名称:$image"
tagname="${image//192.168.16.131/195.129.2.34}"
echo "Harbor tag名称:$tagname"
docker tag $image $tagname
docker push $tagname
echo "完成推送镜像$tagname"
done
echo "镜像推送处理完成"
(3)登录正式环境Harbor地址,查看docker镜像是否推送成功。