ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/10/3 8:11:57 拓冰建站 浏览量
skopeo镜像搬运工 —— 筑梦之路 安装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-verifyfalse http://192.168.100.128 拉取镜像到128机器harbor skopeo copy --insecure-policy \ --src-tls-verifyfalse \ --dest-tls-verifyfalse \ 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-verifyfalse \ --dest-tls-verifyfalse \ docker://docker.io/nginx:latest \ docker://192.168.100.128/images-project/nginx:latest # 私有仓库之间同步 拉取128机器的harbor镜像实现镜像仓库之间同步 skopeo copy --insecure-policy \ --src-tls-verifyfalse --dest-tls-verifyfalse \ 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-verifyfalse \ docker-daemon:rcoelhorj/go-helloworld:latest \ docker://192.168.80.28/lyc-images-project/go-helloworld:latest skopeo copy --insecure-policy --dest-tls-verifyfalse \ 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-verifyfalse --src dir --dest docker /root/skopeo-sync/httpd:latest 192.168.80.29/lyc-images-project/ # 两个仓库之间同步 skopeo sync --insecure-policy --src-tls-verifyfalse \ --dest-tls-verifyfalse --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-verifyfalse --dest-tls-verifyfalse \ --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-verifyfalse \ 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_PATHdocker/registry/v2/blobs/sha256 REPO_PATHdocker/registry/v2/repositories set -eo pipefail CURRENT_NUM0 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-verifyfalse --dest-tls-verifyfalse \ --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