# Kubernetes 镜像同步脚本
只放一个示例,其余的可以参考这里 (opens new window).
#! /bin/bash
docker_repo="keveon" # your docker hub username or organization name
registry="k8s.gcr.io" # the registry of original image, e.g. gcr.io, quay.io
repo="" # the repository name of original image
sync_one(){
docker pull ${registry}/${1}:${2}
docker tag ${registry}/${1}:${2} docker.io/${docker_repo}/${1}:${2}
docker push docker.io/${docker_repo}/${1}:${2}
docker rmi -f ${registry}/${1}:${2} docker.io/${docker_repo}/${1}:${2}
}
sync_all_tags() {
for image in $*; do
tags_str=`curl https://${registry}/v2/$image/tags/list | jq '.tags' -c | sed 's/\[/\(/g' | sed 's/\]/\)/g' | sed 's/,/ /g'`
echo "$image $tags_str"
src="
sync_one(){
docker pull ${registry}/\${1}:\${2}
docker tag ${registry}/\${1}:\${2} docker.io/${docker_repo}/\${1}:\${2}
docker push docker.io/${docker_repo}/\${1}:\${2}
docker rmi -f ${registry}/\${1}:\${2} docker.io/${docker_repo}/\${1}:\${2}
}
tags=${tags_str}
echo \"$image ${tags_str}\"
for tag in \${tags[@]}
do
sync_one $image \${tag}
done;"
bash -c "$src"
done
}
sync_with_tags(){
image=$1
skip=1
for tag in $*; do
if [ $skip -eq 1 ]; then
skip=0
else
sync_one $image $tag
fi
done
}
sync_after_tag(){
image=$1
start_tag=$2
tags_str=`curl https://${registry}/v2/$image/tags/list | jq '.tags' -c | sed 's/\[/\(/g' | sed 's/\]/\)/g' | sed 's/,/ /g'`
echo "$image $tags_str"
src="
sync_one(){
docker pull ${registry}/\${1}:\${2}
docker tag ${registry}/\${1}:\${2} docker.io/${docker_repo}/\${1}:\${2}
docker push docker.io/${docker_repo}/\${1}:\${2}
docker rmi -f ${registry}/\${1}:\${2} docker.io/${docker_repo}/\${1}:\${2}
}
tags=${tags_str}
start=0
for tag in \${tags[@]}; do
if [ \$start -eq 1 ]; then
sync_one $image \$tag
elif [ \$tag == '$start_tag' ]; then
start=1
fi
done"
bash -c "$src"
}
get_tags(){
image=$1
curl https://${registry}/v2/$image/tags/list | jq '.tags' -c
}
arch="amd64"
version ="v1.10.2"
#sync_with_tags etcd 2.0.12 2.0.13 # sync etcd:2.0.12 and etcd:2.0.13
# sync_after_tag kube-apiserver-${arch} ${version}
# sync_after_tag kube-controller-manage-${arch} ${version}
# sync_after_tag kube-scheduler-${arch} ${version}
# sync_after_tag kube-proxy-${arch} ${version}
# sync_after_tag hyperkube ${version}
sync_all_tags kube-apiserver-${arch} kube-controller-manage-${arch} kube-scheduler-${arch} kube-proxy-${arch} hyperkube
参考:利用 Katacoda 免费同步 Docker 镜像到 Docker Hub (opens new window).