docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker批量下载pull k8s镜像并打标签tag、推送push至镜像仓库

docker实现批量下载pull k8s镜像并打标签tag、推送push至镜像仓库

作者:学亮编程手记

这篇文章主要介绍了docker实现批量下载pull k8s镜像并打标签tag、推送push至镜像仓库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

docker批量下载pull k8s镜像并打标签tag、推送push至镜像仓库

#!/bin/bash
# set -eux;

images="
nginx:1.19-alpine
haproxy:2.3-alpine
traefik:2.4.8
openresty/openresty:1.19.3.1-alpine
envoyproxy/envoy:v1.16.2
osixia/keepalived:2.0.20
setzero/chrony:3.5
calico/typha:v3.19.1
calico/cni:v3.19.1
calico/node:v3.19.1
calico/kube-controllers:v3.19.1
calico/pod2daemon-flexvol:v3.19.1
calico/ctl:v3.19.1
jettech/kube-webhook-certgen:v1.5.1
kubernetesui/dashboard:v2.3.1
kubernetesui/metrics-scraper:v1.0.6
quay.io/coreos/flannel:v0.14.0
quay.io/jetstack/cert-manager-cainjector:v1.4.0
quay.io/jetstack/cert-manager-webhook:v1.4.0
quay.io/jetstack/cert-manager-controller:v1.4.0
k8s.gcr.io/kube-apiserver:v1.21.14
k8s.gcr.io/kube-controller-manager:v1.21.14
k8s.gcr.io/kube-scheduler:v1.21.14
k8s.gcr.io/kube-proxy:v1.21.14
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.5.4-0
k8s.gcr.io/coredns/coredns:v1.8.0
k8s.gcr.io/ingress-nginx/controller:v0.47.0
k8s.gcr.io/metrics-server/metrics-server:v0.5.0
"

dest_registry=${dest_registry:-'127.0.0.1:5000/kubeadm-ha'}
for image in $images ; do 
  docker pull --platform ${1:-'linux/amd64'} $image
  count=$(echo $image | grep -o '/*' | wc -l)
  if [[ $count -eq 0 ]]; then
    dest=$dest_registry/$image
  elif [[ $count -eq 1 ]]; then
    if [[ $image =~ 'k8s.gcr.io' ]]; then
      dest=$dest_registry/$(echo ${image#*/} | sed 's / _ g')
    else
      dest=$dest_registry/$(echo ${image} | sed 's / _ g')
    fi
  else
    if [[ $image =~ 'coredns' ]]; then
      dest=$dest_registry/$(echo ${image##*/} | sed 's / _ g')
    else
      dest=$dest_registry/$(echo ${image#*/} | sed 's / _ g')
    fi
  fi
  docker tag $image $dest
  docker push $dest
done

这个Bash脚本的主要功能是从公共镜像仓库拉取多个Kubernetes相关镜像,重新打标签后推送到本地或私有的Docker镜像仓库。

以下是详细解释:

脚本结构解析

Shebang与调试选项

#!/bin/bash
# set -eux;

镜像列表

images="
nginx:1.19-alpine
haproxy:2.3-alpine
...
k8s.gcr.io/ingress-nginx/controller:v0.47.0
"

目标仓库设置

dest_registry=${dest_registry:-'127.0.0.1:5000/kubeadm-ha'}

主循环处理镜像

for image in $images ; do
  docker pull --platform ${1:-'linux/amd64'} $image
  ...
done

遍历所有镜像,执行以下操作:

镜像标签处理逻辑

根据镜像路径的斜杠数量(count),分三种情况生成目标标签:

无斜杠(count=0

一个斜杠(count=1

多个斜杠(count≥2

关键命令说明

拉取镜像

docker pull --platform ${1:-'linux/amd64'} $image

处理标签逻辑

docker tag $image $dest
docker push $dest

使用场景

注意事项

Sed命令潜在问题

镜像多平台支持

本地仓库配置

示例执行

假设目标仓库为 192.168.1.100:5000/myrepo,执行命令:

dest_registry=192.168.1.100:5000/myrepo ./script.sh linux/amd64

所有镜像将被拉取、重新打标签,并推送至 192.168.1.100:5000/myrepo

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文