使用skopeo同步docker镜像
在大部分场景下我们内部都会有一个镜像仓库来保证k8s活着cicd在拉镜像下的体验,以往我们需要使用docker pull
下载下镜像然后使用docker push上传到内部仓库这个过程很繁琐,skopeo就是为了解决这个问题而诞生
安装
centos7的rpm很老,建议使用容器运行
- macos
brew install skopeo
查看镜像情况
- 查看镜像详情
skopeo inspect docker://docker.io/alpine:latest --override-os linux
skopeo list-tags docker://docker.io/alpine --override-os linux
登录
skopeo login -u <用户名> <仓库地址>
复制镜像
- 从本地复制到仓库
skopeo copy docker-daemon:alpine:latest docker://uhub.service.ucloud.cn/naturelr/test-zxz/alpine:latest
- 从一个仓库复制到另一个仓库
–override-os linux 是因为本地是m1的mac而改镜像没有改os的所以要加上这个参数,同时还有–override-arch只不过这个是arch
–override-arch amd64 同样是因为我本地m1是arm的但是我们需要amd64的
如果仓库不是https的使用–dest-tls-verify=false
skopeo copy docker://docker.io/busybox:latest docker://uhub.service.ucloud.cn/naturelr/test-zxz/busybox:latest --override-os linux --override-arch amd64
- 创建保存的目录,直接mkdir貌似有问题
install -d images
- 普通复制
skopeo copy docker://docker.io/busybox:latest dir:images
- 保存oci格式
skopeo copy docker://docker.io/busybox:latest oci:images
同步镜像
同步是指将一个镜像所有的tag全部复制到另一个地方
- 从一个仓库同步到本地目录
skopeo sync --src docker --dest dir uhub.service.ucloud.cn/naturelr/busybox:latest images
- 从一个仓库同步到另一个仓库
skopeo sync --src docker --dest docker docker.io/redis uhub.service.ucloud.cn/naturelr/test-zxz/redis
- 文件同步
registry.example.com:
images:
busybox: []
redis:
- "1.0"
- "2.0"
- "sha256:0000000000000000000000000000000011111111111111111111111111111111"
images-by-tag-regex:
nginx: ^1\.13\.[12]-alpine-perl$
credentials:
username: john
password: this is a secret
tls-verify: true
cert-dir: /home/john/certs
quay.io:
tls-verify: false
images:
coreos/etcd:
- latest
skopeo sync --src yaml --dest docker sync.yml my-registry.local.lan/repo/
删除镜像
skopeo delete docker://harbor.fumai.com/library/alpine:latest