LinQ
发布于 2024-08-28 / 40 阅读 / 0 评论 / 0 点赞

镜像拷贝工具skopeo

软件git地址

https://github.com/containers/skopeo

软件介绍

skopeo 可以实现多个镜像仓库之间的镜像拷贝,同步和下载。

安装说明

1、linux中可使用包管理器 yum apt 等进行直接安装,但是版本较老。
2、编译安装,依赖 golang 等基础环境配置 比较负责。
3、Skopeo 也可通过quay.io提供的容器镜像使用。

   使用方法参考:https://github.com/containers/image_build/blob/main/skopeo/README.md

使用说明

场景一 直接从 docker.io 同步镜像到本地镜像仓库

以 K3s 某一版本为例,镜像列表为 k3s-images.txt :

rancher/coredns-coredns:1.8.3
rancher/klipper-helm:v0.6.6-build20211022
rancher/klipper-lb:v0.3.4
rancher/library-busybox:1.32.1
rancher/library-traefik:2.4.8
rancher/local-path-provisioner:v0.0.19
rancher/metrics-server:v0.3.6
rancher/pause:3.1

这里直接基于 镜像搬运工 skopeo 提供的脚本做修改,修改后如下

#!/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=$3
: ${IMAGES_LIST_FILE:="k3s-images.txt"}
: ${TARGET_REGISTRY:="192.168.2.23:5000"}
: ${SOURCE_REGISTRY:="docker.io"}

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 docker run -it quay.io/skopeo/stable:latest copy --insecure-policy --src-tls-verify=false --dest-tls-verify=false \
        --src-creds caseycui:xxxxxxxxxxxxxxxxxxxxx --multi-arch all --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

参考文章

https://blog.k8s.li/skopeo.html
https://www.cnblogs.com/east4ming/p/16931568.html

评论