Skopeo 镜像管理与复制工具教程
Skopeo 是一款用于操作容器镜像和镜像仓库的命令行工具,由 Red Hat 开发。与 Docker 不同,Skopeo 可以在不拉取整个镜像的情况下检查远程镜像信息,还能在不同仓库之间直接复制镜像。本文介绍如何在搬瓦工 VPS 上使用 Skopeo 高效管理容器镜像。
一、安装 Skopeo
# Ubuntu/Debian
apt-get update && apt-get install -y skopeo
# CentOS/RHEL
yum install -y skopeo
# 验证安装
skopeo --version
二、检查远程镜像信息
无需拉取镜像即可查看其详细信息:
# 查看镜像 manifest
skopeo inspect docker://docker.io/library/nginx:latest
# 查看镜像配置(更详细)
skopeo inspect --config docker://docker.io/library/nginx:latest
# 只查看镜像标签列表
skopeo list-tags docker://docker.io/library/nginx
# 查看镜像的原始 manifest(JSON 格式)
skopeo inspect --raw docker://docker.io/library/nginx:latest
三、复制镜像
3.1 仓库之间复制
# 从 Docker Hub 复制到私有仓库
skopeo copy docker://docker.io/library/nginx:latest docker://registry.example.com/nginx:latest
# 从私有仓库复制到另一个私有仓库
skopeo copy docker://registry-a.com/myapp:v1.0 docker://registry-b.com/myapp:v1.0
3.2 导出为本地文件
# 导出为 Docker 格式 tar 文件
skopeo copy docker://nginx:latest docker-archive:/tmp/nginx.tar:nginx:latest
# 导出为 OCI 格式目录
skopeo copy docker://nginx:latest oci:/tmp/nginx-oci:latest
# 导入 tar 到本地存储
skopeo copy docker-archive:/tmp/nginx.tar containers-storage:nginx:latest
3.3 在本地存储和仓库间复制
# 从本地 Podman/Buildah 存储推送到仓库
skopeo copy containers-storage:myapp:latest docker://registry.example.com/myapp:latest
# 从仓库拉取到本地存储
skopeo copy docker://registry.example.com/myapp:latest containers-storage:myapp:latest
四、批量同步镜像
# 同步整个仓库
skopeo sync --src docker --dest docker docker.io/library/nginx registry.example.com/mirror/
# 使用配置文件批量同步
cat > sync.yml <<'EOF'
docker.io:
images:
nginx:
- "latest"
- "1.25"
- "alpine"
redis:
- "7"
- "7-alpine"
mysql:
- "8.0"
EOF
skopeo sync --src yaml --dest docker sync.yml registry.example.com/mirror/
五、认证管理
# 登录镜像仓库
skopeo login registry.example.com
# 使用用户名密码登录
skopeo login -u username -p password registry.example.com
# 登出
skopeo logout registry.example.com
# 使用指定的认证文件
skopeo copy --authfile /path/to/auth.json docker://src docker://dest
六、镜像删除
# 删除远程仓库中的镜像标签
skopeo delete docker://registry.example.com/myapp:old-tag
七、实用场景
7.1 搬瓦工 VPS 间迁移镜像
# 在源服务器上导出
skopeo copy containers-storage:myapp:latest docker-archive:/tmp/myapp.tar
# 传输到目标服务器
scp /tmp/myapp.tar user@target-vps:/tmp/
# 在目标服务器上导入
skopeo copy docker-archive:/tmp/myapp.tar containers-storage:myapp:latest
7.2 创建镜像镜像站
cat > /opt/mirror-sync.sh <<'SCRIPT'
#!/bin/bash
DEST="registry.example.com/mirror"
for img in nginx:latest redis:7-alpine mysql:8.0 postgres:15; do
echo "Syncing $img..."
skopeo copy docker://docker.io/library/$img docker://$DEST/$img
done
echo "Sync complete at $(date)"
SCRIPT
chmod +x /opt/mirror-sync.sh
八、常见问题
TLS 证书错误
# 跳过 TLS 验证(仅用于测试)
skopeo copy --src-tls-verify=false --dest-tls-verify=false docker://src docker://dest
# 使用自签名证书
skopeo copy --src-cert-dir=/etc/docker/certs.d/registry.example.com docker://src docker://dest
总结
Skopeo 是容器镜像管理的瑞士军刀,特别适合镜像迁移、仓库同步和镜像信息检查等场景。它与 Podman 和 Buildah 共同组成完整的容器工具链。选购搬瓦工 VPS 请访问 bwh81.net,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣。