镜像搬运工 skopeo简单用法

发布时间 2023-11-24 15:20:05作者: 坚强的小蚂蚁

https://blog.51cto.com/u_16099262/6928212

https://blog.csdn.net/easylife206/article/details/125093122

一. 安装

dnf -y install skopeo

二. 本地搭建私有仓库

#安装docker
dnf install docker
#下载并启动一个register容器,创建本地私有仓库
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

列出私有仓库所有镜像
curl http://10.24.9.97:5000/v2/_catalog
返回:{"repositories":["influxdb"]}
浏览器访问:http://10.24.9.97:5000/v2/_catalog

3.修改docker配置文件

vim /etc/docker/daemon.json

{
    "insecure-registries": ["10.24.9.97:5000"]
}
重启docker:systemctl restart docker

4.登陆dockerhub仓库

在使用 skopeo 前如果 src 或 dest 镜像是在 registry 仓库中的并且配置了非 public 的镜像需要相应的 auth 认证, 此时我们可以使用 docker login 或者 skopeo login 的方式登录到 registry 仓库,然后默认会在~/.docker目录下生成 registry 登录配置文件 config.json ,该文件里保存了登录需要的验证信息,skopeo 拿到该验证信息才有权限往 registry push 镜像。

docker login #输入用户名密码
或者skopeo login docker.io

会生成登陆配置文件保存在.docker/config.json中,类似下面
# cat ~/.docker/config.json
{
	"auths": {
		"https://index.docker.io/v1/": {
			"auth": "cHNoeW1zOnNoaXlhbjgyMw=="
		}
	}
}#

5.skopeo copy-镜像拷贝

远端镜像地址:docker.io/pshyms/influxdb:latest

1)首先拷贝到本地仓库
skopeo copy docker://docker.io/pshyms/influxdb:latest docker://10.24.9.97:5000/influxdb:v1 --src-tls-verify=false --dest-tls-verify=false

命令中的tls-verify=false是为了解决https和http传输时不兼容报错的问题

2)也可以拷贝到本地目录,/tmp/mytest目录要先创建
skopeo copy  --insecure-policy --src-tls-verify=false docker://docker.io/pshyms/influxdb:latest dir:/tmp/mytest/influxdb

6.镜像同步-skopeo sync

1)从本地镜像仓库把influxdb所有版本镜像,同步到本地目录/tmp中
skopeo sync --insecure-policy --src-tls-verify=false --src docker --dest dir 10.24.9.97:5000/influxdb /tmp/influx

2)从本地/tmp目录同步到docker的hub仓库中的pshyms用户下
skopeo sync --insecure-policy --dest-tls-verify=false --src dir --dest docker /tmp/influx pshyms 
此时登陆docker,即可看到influx:v1这个镜像