从python脚本到skopeo 容器搬运篇(1)

  1. 1. 镜像搬运的必要性
  2. 2. 原有的搬运操作
  3. 3. skopeo的使用和操作
    1. 3.1. 安装
    2. 3.2. 基本使用

镜像搬运的必要性

由于业务原因经常有要求对镜像分组管理的要求,但很多镜像原本是重复的,并且都是单独的镜像,无法以单独的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 requests
import json
import os
#如果为私有仓库 则需要登陆
#登陆方式如下
# auth=($USERNAME,$PASS)
res = requests.get("https://harbor.local/api/repositories?project_id=3", verify=False)#auth 添加在此处
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