Skopeo 是一个功能强大的命令行工具,用于操作容器镜像及镜像仓库,支持多种容器镜像格式(如 Docker、OCI),能够在不下载完整镜像的情况下直接与远程仓库交互。以下是其主要功能、使用场景及操作指南:
一、核心功能
功能 | 说明 |
---|---|
镜像复制 | 跨仓库复制镜像(如 Docker Hub → 私有仓库) |
镜像检查 | 查看镜像的元数据、层信息、配置等,无需拉取完整镜像 |
镜像删除 | 直接从远程仓库删除镜像(需仓库支持 API 删除操作) |
格式转换 | 转换镜像存储格式(如 Docker → OCI) |
签名验证 | 验证镜像的签名(支持 Sigstore、PGP 等) |
二、安装方法
1. Linux(基于包管理器)
# Ubuntu/Debian
sudo apt-get install skopeo
# CentOS/RHEL
sudo yum install skopeo
# Fedora
sudo dnf install skopeo
2. macOS(Homebrew)
brew install skopeo
3. 二进制文件直接安装
访问 GitHub Releases 下载对应系统的二进制文件。
三、常用操作示例
1. 复制镜像(不同仓库间传输)
# 从 Docker Hub 复制到私有仓库
skopeo copy docker://nginx:alpine docker://registry.example.com/library/nginx:alpine
# 跨认证仓库复制(指定凭证)
skopeo copy \
--src-creds username:password \
--dest-creds registry-user:registry-token \
docker://quay.io/coreos/etcd:v3.5.0 \
docker://registry.example.com/coreos/etcd:v3.5.0
2. 检查镜像信息
# 查看镜像的元数据
skopeo inspect docker://nginx:alpine
# 显示镜像的摘要(Digest)
skopeo inspect --format "{{.Digest}}" docker://nginx:alpine
3. 删除远程镜像
# 删除私有仓库中的镜像(需仓库支持删除 API)
skopeo delete docker://registry.example.com/library/nginx:alpine
4. 转换镜像格式
# 将 Docker 镜像转换为 OCI 格式并保存到本地目录
skopeo copy docker://nginx:alpine oci:nginx-oci:alpine
5. 验证镜像签名
# 使用 Sigstore 验证签名
skopeo verify --policy policy.json docker://registry.example.com/app:v1.0
四、配置文件与认证
1. 认证配置
Skopeo 默认从以下位置读取认证信息:
-
~/.docker/config.json
(Docker 客户端配置文件) -
$XDG_RUNTIME_DIR/containers/auth.json
手动配置认证:
skopeo login registry.example.com -u username -p password
2. 自定义配置文件
创建或修改 /etc/containers/policy.json
以定义镜像信任策略:
{
"default": [{"type": "insecureAcceptAnything"}], // 接受所有镜像(测试用)
"transports": {
"docker": {
"registry.example.com": [
{
"type": "signedBy",
"keyType": "GPGKeys",
"keyPath": "/etc/pki/example-key.pub"
}
]
}
}
}
五、高级应用场景
1. 镜像同步(CI/CD 管道)
使用脚本批量同步镜像版本:
for tag in v1.0 v1.1 latest; do
skopeo copy docker://source-registry/app:$tag docker://target-registry/app:$tag
done
2. 镜像预热(Kubernetes 节点预加载)
# 将镜像从仓库复制到节点的容器存储
skopeo copy docker://registry.example.com/app:v1.0 containers-storage:app:v1.0
3. 安全审计
检查镜像的构建历史和依赖:
skopeo inspect --raw docker://nginx:alpine | jq '.history'
六、常见问题与解决方案
1. 认证失败
-
错误信息:
unauthorized: authentication required
-
解决:
-
确认
--src-creds
/--dest-creds
参数正确。 -
检查
~/.docker/config.json
或auth.json
文件权限(应为600
)。
-
2. 仓库不支持删除操作
-
错误信息:
DELETE not supported
-
解决:联系仓库管理员确认 API 是否启用删除功能。
3. 镜像格式不兼容
-
错误信息:
manifest type not supported
-
解决:使用
skopeo copy
转换格式,如docker:// → oci:
。
七、与类似工具对比
工具 | 特点 |
---|---|
docker | 需要守护进程,支持完整的容器生命周期管理,镜像操作依赖 docker pull/push |
podman | 无守护进程设计,兼容 Docker 命令,支持 rootless 容器 |
crane | Google 开发的镜像工具,侧重高效复制和镜像操作 |
skopeo | 专注镜像仓库操作,无需下载完整镜像,支持签名验证和格式转换 |
八、最佳实践
-
生产环境签名验证:启用镜像签名策略,防止篡改。
-
镜像仓库备份:定期使用
skopeo copy
同步镜像到备份仓库。 -
最小权限原则:为 CI/CD 系统分配仅需的仓库读写权限。
通过灵活使用 Skopeo,可以实现高效的镜像管理和安全的供应链操作。建议结合具体需求参考官方文档深入探索更多功能。