软件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