skopeo镜像搬运工 —— 筑梦之路

GitHub - containers/skopeo: Work with remote images registries - retrieving information, images, signing content

安装skopeo

# 下载
https://github.com/lework/skopeo-binary/releases

# 上传文件到虚拟机,改名后安装
mv  skopeo-linux-amd64  skopeo
mv  skopeo  /usr/bin/
chmod +x  /usr/bin/skopeo

# 测试是否安装
skopeo --version

镜像拉取

登录
skopeo login --tls-verify=false http://192.168.100.128

拉取镜像到128机器harbor

skopeo copy   --insecure-policy   \
--src-tls-verify=false   \
--dest-tls-verify=false   \
docker://quay.io/skopeo/stable:latest  \
docker://192.168.100.128/images-project/skopeo:latest


从docker.io拉取镜像到128机器harbor仓库

skopeo copy   --insecure-policy   --src-tls-verify=false   \
--dest-tls-verify=false   \
docker://docker.io/nginx:latest   \
docker://192.168.100.128/images-project/nginx:latest

# 私有仓库之间同步

拉取128机器的harbor镜像,实现镜像仓库之间同步

skopeo copy   --insecure-policy   \
--src-tls-verify=false   --dest-tls-verify=false   \
docker://192.168.100.128/images-project/mysql:5.7  \
docker://192.168.100.129/images-bak/mysql:test01


# 仓库镜像拷贝到本地目录

mkdir skopeo-test01

skopeo copy docker://docker.io/library/nginx:latest   \
dir:skopeo-test01
------------------
查看目录tree
tree skopeo-test01


# 将镜像保存OCI格式

install  -d   images_OCI

skopeo copy docker://docker.io/library/nginx:latest oci:images_OCI
tree   images_OCI

# 将本地镜像存储到harbor

替代docker push功能,将镜像从Docker本地存储push到harbor中
skopeo copy --insecure-policy --dest-tls-verify=false \
docker-daemon:rcoelhorj/go-helloworld:latest \
docker://192.168.80.28/lyc-images-project/go-helloworld:latest
skopeo copy --insecure-policy --dest-tls-verify=false \
docker-daemon:gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 \
docker://192.168.80.28/lyc-images-project/kube-rbac-proxy:v0.13.0

镜像同步

Skopeo sync可以在容器仓库和本地目录之间同步镜像

# 远程镜像同步到本地

skopeo sync --src docker --dest dir docker.io/library/httpd:latest  /root/skopeo-sync/httpd:latest

# 查看公共仓库中的busybox所有版本

skopeo list-tags docker://docker.io/library/busybox

# 将同类镜像拉取到本地

skopeo sync --src docker --dest dir docker.io/library/httpd /root/skopeo-sync/httpd

# 将本地镜像同步到仓库中

skopeo sync --insecure-policy --dest-tls-verify=false --src dir --dest docker /root/skopeo-sync/httpd:latest  192.168.80.29/lyc-images-project/

# 两个仓库之间同步

skopeo sync --insecure-policy  --src-tls-verify=false \
--dest-tls-verify=false --src docker --dest \
docker docker.io/library/busybox \
192.168.10.152/images-bak/

# 以配置文件形式同步

vim skopeo-sync.yml
------------------------
docker.io:
   tls-verify: false
   images:
      httpd:
         - "latest"

quay.io:
   tls-verify: false
   images:
      coreos/etcd:
         - latest
------------------------
执行sync同步
skopeo sync --insecure-policy \
--src-tls-verify=false --dest-tls-verify=false \
--src yaml --dest docker skopeo-sync.yml 192.168.100.129/images-bak/

删除镜像

使用skopeo delete命令我们可以删除镜像Tag,注意此处仅仅只是通过registry AP1来删除镜像的tag(即删除了tag 对 manifests文件的引用)并非真正将镜像删除掉,如果想要删除镜像的 layer 还是需要通过 registry Gc 的方式。

# 删除镜像
skopeo  delete  --tls-verify=false \
docker://192.168.100.129/images-bak/mysql:test01

实践案例

给你一个镜像列表,如https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/images-list.txt,如何将它快速地从一个 Registry同步到另一个Registry 中呢?

 

cat > images-sync.sh << 'EOF'
#!/bin/bash
GREEN_COL="\\033[32;1m"
RED_COL="\\033[1;31m"
NORMAL_COL="\\033[0;39m"

SOURCE_REGISTRY=$1
TARGET_REGISTRY=$2

: ${IMAGES_LIST_FILE:="images-list.txt"}
: ${TARGET_REGISTRY:="hub.k8s.li"}
: ${SOURCE_REGISTRY:="docker.io"}

BLOBS_PATH="docker/registry/v2/blobs/sha256"
REPO_PATH="docker/registry/v2/repositories"

set -eo pipefail

CURRENT_NUM=0
ALL_IMAGES="$(sed -n '/#/d;s/:/:/p' ${IMAGES_LIST_FILE} | sort -u)"
TOTAL_NUMS=$(echo "${ALL_IMAGES}" | wc -l)

skopeo_copy() {
 if skopeo copy --insecure-policy --src-tls-verify=false --dest-tls-verify=false \
 --override-arch amd64 --override-os linux -q docker://$1 docker://$2; then
 echo -e "$GREEN_COL Progress: ${CURRENT_NUM}/${TOTAL_NUMS} sync $1 to $2 successful $NORMAL_COL"
 else
 echo -e "$RED_COL Progress: ${CURRENT_NUM}/${TOTAL_NUMS} sync $1 to $2 failed $NORMAL_COL"
 exit 2
 fi
}

for image in ${ALL_IMAGES}; do
 let CURRENT_NUM=${CURRENT_NUM}+1
 skopeo_copy ${SOURCE_REGISTRY}/${image} ${TARGET_REGISTRY}/${image}
done
EOF

---------------------------------------------------------------


# 转换文件格式

yum install dos2unix
dos2unix  images-sync.sh

chmod +x  images-sync.sh

# 运行脚本示例
bash images-sync.sh docker.io  192.168.100.129/images-bak
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值