本文最后编辑于 前,其中的内容可能需要更新。
镜像搬运的必要性 由于业务原因经常有要求对镜像分组管理的要求,但很多镜像原本是重复的,并且都是单独的镜像,无法以单独的compose或者其他形式管理,要跨机器搬运就比较困难,原有的做法是新建一个临时的harbor仓库,做一个中转。
原有的搬运操作 原有的一些镜像是存储在单独的一台服务器上,以docker image形式存在的,所以只进行了打包和推送操作:
1 2 docker images|grep -v "REPOSITORY"|awk '{print "docker tag " $1":"$2 "harbor.local/$REGNAME/" $1":"$2}' |awk '{system($0)}' docker images|grep "harbor.local"|awk '{print "docker push " $1":"$2}' |awk '{system($0)}'
在另外一台机器上部署:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import requestsimport jsonimport osres = requests.get("https://harbor.local/api/repositories?project_id=3" , verify=False ) all_list = res.content.decode('utf-8' ) alist = json.loads(all_list) for i in alist: imagename = i['name' ] imagename1 = i['name' ].split('/' )[1 ] shellcmd = f"docker pull harbor.local/{imagename} " shellcmd1 = f"docker tag harbor.local/{imagename} {imagename1} " os.system(shellcmd) os.system(shellcmd1)
skopeo的使用和操作 安装 参照此链接 进行安装
基本使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 USAGE: skopeo [global options] command [command options] [arguments...] COMMANDS: copy 从某个位置拷贝镜像到另一个,可以是本地也可以是仓库 inspect 查看对应镜像信息 类似docker inspect delete 删除镜像,仅删除tag manifest-digest 计算文件的md5值 standalone-sign Create a signature using local files standalone-verify Verify a signature using local files 以上两个与镜像加密相关 login 登陆到某个registry sync 同步镜像,类似copy
登陆私有仓库
1 2 3 4 skopeo login harbor.local --tls-verify=false Username: admin Password: Login Succeeded!
拷贝到仓库:
1 2 3 4 5 6 7 8 9 10 11 12 skopeo copy docker-daemon:nginx:latest docker://harbor.local/test/nginx:latest --tls-verify=false WARN[0000] '--tls-verify' is deprecated, please set this on the specific subcommand Getting image source signatures Copying blob cf388fcf3527 done Copying blob c6d74dcb7fe7 done Copying blob b50a193ebf2e done Copying blob 2418679ca01f done Copying blob 764055ebc9a7 done Copying blob 165eb6c3c0d3 done Copying config 4f380adfc1 done Writing manifest to image destination Storing signatures