目 录CONTENT

文章目录

Docker镜像批量管理工具:打包、加载、打Tag与推送脚本

Administrator
2025-07-30 / 0 评论 / 3 点赞 / 52 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Docker镜像批量管理工具:打包、加载、打Tag与推送脚本

背景

针对公司内网环境,开发了Docker镜像批量管理脚本。
分别用于在外网批量打包镜像,以及在内网服务器上批量加载、tag、push这些镜像,显著提升镜像迁移与管理效率。

脚本功能

  • 批量打包镜像:在服务器上将镜像保存为本地tar文件。
    tee save.sh <<'EOF'
    #!/bin/bash
    set -x
    # 指定保存镜像的目录
    OUTPUT_DIR="./images"
    mkdir -p "$OUTPUT_DIR"
     
    # 获取所有本地镜像列表
    IMAGE_LIST=$(docker images --format "{{.Repository}}:{{.Tag}}")
     
    # 遍历每个镜像并保存为 tar 文件
    for IMAGE in $IMAGE_LIST; do
      IMAGE_NAME=$(echo "$IMAGE" | sed 's/.*\///' | sed 's/:/-/')
      IMAGE_TAR="$OUTPUT_DIR/$IMAGE_NAME.tar"
      echo "Saving $IMAGE to $IMAGE_TAR"
      docker save -o "$IMAGE_TAR" "$IMAGE"
    done
     
    echo "All images saved to $OUTPUT_DIR"
    EOF
    
  • 批量加载镜像:在服务器上从本地tar文件恢复Docker镜像。
    tee load.sh <<'EOF'
    #!/bin/bash
    set -x
    # 指定包含镜像 tar 包的目录
    IMAGES_DIR="./images"
    
    # 循环处理目录下的所有 tar 包
    for TAR_FILE in ${IMAGES_DIR}/*.tar; do
      # 输出正在加载的镜像文件
      echo "Loading image from: ${TAR_FILE}"
    
      # 使用 docker load 加载镜像
      docker load -i ${TAR_FILE}
    
      # 检查 docker load 的返回状态
      if [ $? -eq 0 ]; then
        echo "Image loaded successfully."
      else
        echo "Failed to load image."
      fi
    done
    
    echo "All images loaded from ${IMAGES_DIR}"
    EOF
    
  • 批量tag镜像:在服务器上将本地镜像批量打tag。
    tee tag.sh <<'EOF'
    #!/bin/bash
    set -x
    # 获取所有harbor镜像列表
    IMAGE_LIST=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "^goharbor")
    
    # 循环处理
    for IMAGE in ${IMAGE_LIST}; do
      docker tag $IMAGE "k8s-harbor:30002/${IMAGE}"
    
      # 检查 docker load 的返回状态
      if [ $? -eq 0 ]; then
        echo "Image tag successfully."
      else
        echo "Failed to tag image."
      fi
    done
    
    echo "All images tagged"
    EOF
    
  • 批量推送镜像:在服务器上将本地镜像批量推送到私有仓库。
    tee push.sh <<'EOF'
    #!/bin/bash
    set -x
    # 获取所有harbor镜像列表
    IMAGE_LIST=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "^k8s-harbor" |grep "goharbor")
    # 循环处理
    for IMAGE in ${IMAGE_LIST}; do
      docker push "${IMAGE}"
    
      # 检查 docker load 的返回状态
      if [ $? -eq 0 ]; then
        echo "Image ${IMAGE} successfully."
      else
        echo "Failed to push ${IMAGE}."
      fi
    done
    
    echo "All images pushed"
    EOF
    
3
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区