Linux使用skopeo工具如何进行docker镜像同步
作者:学亮编程手记
这篇文章主要介绍了Linux使用skopeo工具如何进行docker镜像同步问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
一、skopeo sync 使用示例
skopeo sync 是用于在镜像仓库、本地目录或其他存储类型之间批量同步镜像的工具。
以下为常见场景示例:
1. 远程仓库同步到本地目录
将 Docker Hub 上的 httpd 镜像所有标签同步到本地目录 /root/skopeo-sync/httpd:
skopeo sync --src docker --dest dir docker://docker.io/library/httpd /root/skopeo-sync/httpd
本地目录会生成包含镜像 manifest.json 和所有层文件的目录结构。
2. 本地目录同步到远程仓库
将本地目录中的镜像推送到 Harbor 私有仓库(需认证):
skopeo sync --insecure-policy --dest-tls-verify=false \ --src dir --dest docker /root/skopeo-sync/httpd:latest \ docker://harbor.example.com/project/httpd:latest
需通过 --dest-creds 指定用户名密码(若未提前通过 skopeo login 认证)。
3. 仓库到仓库同步
从 Docker Hub 同步 busybox 镜像到私有仓库:
skopeo sync --src docker --dest docker \ docker://docker.io/library/busybox \ docker://registry.example.com/images-bak/
支持通过 --src-creds 和 --dest-creds 指定源和目标仓库的认证信息。
4. 基于配置文件的批量同步
创建配置文件 sync.yml:
docker.io:
tls-verify: false
images:
nginx:
- "latest"
- "alpine"
quay.io:
tls-verify: false
images:
coreos/etcd:
- "latest" 执行同步到本地目录:
skopeo sync --src yaml --dest dir sync.yml ./local-images
此方式适合批量同步多个仓库和标签。
二、CentOS 7 是否自带 skopeo?
否。CentOS 7 默认软件源中的 skopeo 版本为 0.1.40(通过 yum install skopeo 安装),而 sync 子命令需要 1.0+ 版本 才支持。
解决方案
手动安装新版:
从 GitHub 下载预编译二进制文件(推荐):
wget https://github.com/lework/skopeo-binary/releases/download/v1.14.4/skopeo-linux-amd64 mv skopeo-linux-amd64 /usr/bin/skopeo chmod +x /usr/bin/skopeo
或通过源码编译(需 Go 环境)。
使用容器化版本:
podman run quay.io/skopeo/stable:latest sync --help
三、注意事项
- 认证问题:私有仓库需通过
--creds或~/.docker/config.json配置认证信息。 - TLS 验证:自签名证书仓库需添加
--src-tls-verify=false和--dest-tls-verify=false参数。 - 性能优化:
sync支持增量同步,避免重复传输相同层文件。
如需更详细的参数说明,可参考官方文档 或使用 skopeo sync --help 查看帮助。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
