• Docker registry 私有仓库镜像查询、删除、上传、下载 shell


    #Docker官方私有仓库registry
    #官方只提供了API接口,不方便使用,就写了个shell
    #docker-registry安装配置http://www.cnblogs.com/elvi/p/8384604.html
    
    #使用:
    #复制代码保存为 img_registry.sh
    # sh img_registry.sh  -h   #查看帮助
    
    #shell代码 git地址https://gitee.com/almi/docker/blob/master/0.Shell/img_registry.sh
    
    
    
    
    
    #!/bin/bash
    #cnetos7,docker-ce v17.12.0,registry v2.6.2
    #Docker registry 私有仓库镜像查询、删除、上传、下载
    
    #Author  Elven <elven89@qq.com>
    #Blog    http://www.cnblogs.com/elvi/p/8384675.html
    
    #root
    [[ $UID -ne 0 ]] && { echo "Run in root user !";exit; }
    #need jq ,get json data
    [[ -f /usr/bin/jq ]] || { echo 'install jq';yum install -y jq &>/dev/null; }
    
    #参数 variable
    #registry容器名称,默认registry
    RN=${RN:-registry}
    #访问网址,默认localhost:5000
    HUB=${HUB:-localhost:5000}
    HUB=hub.test.com:5000
    
    #检测 check
    function Check_hub() {
    [[ `curl -s $HUB/v2/_catalog` == "Failed connect" ]] && { echo -e "33[31m$HUB 访问失败33[0m";exit;  }
    }
    
    #查询images
    function Select_img() {
    IMG=$(curl -s $HUB/v2/_catalog |jq .repositories |awk -F'"' '{for(i=1;i<=NF;i+=2)$i=""}{print $0}')
    [[ $IMG = "" ]] && { echo -e "33[31m$HUB 没有docker镜像33[0m";exit; }
    #echo "$HUB Docker镜像:"
    for n in $IMG;
      do
      TAG=$(curl -s http://$HUB/v2/$n/tags/list |jq .tags |awk -F'"' '{for(i=1;i<=NF;i+=2)$i=""}{print $0}')
        for t in $TAG;
        do
          echo "$n:$t";
        done
    done
    }
    
    #删除images
    function Delete_img() {
    for n in $IMGS;
    do
      IMG=${n%%:*}
      TAG=${n##*:}
      i=1
      [[ "$IMG" == "$TAG" ]] && { TAG=latest; n="$n:latest"; }
      Digest=`curl  --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -Is  ${HUB}/v2/${IMG}/manifests/${TAG} |awk '/Digest/ {print $NF}'`
      [[ -z "$Digest" ]] && { echo -e "33[31m$IMG:$TAG  镜像不存在33[0m";} || { 
        URL="${HUB}/v2/${IMG}/manifests/${Digest}"
        Rs=$(curl -Is -X DELETE ${URL%?}|awk '/HTTP/ {print $2}')
        [[ $Rs -eq 202 ]] && { let i++;echo "$n  删除成功"; } || { echo -e "33[31m$n  删除失败33[0m"; } }
    done
    #registry垃圾回收 RN=registry
    [[ "$i" -gt 1 ]] && { echo "Clean...";docker exec ${RN} /bin/registry garbage-collect /etc/docker/registry/config.yml &>/dev/null;docker restart ${RN} &>/dev/null; }
    }
    
    #删除镜像所在目录(清除所有 -dd .* )
    #简单高效,删库跑路,必备技能
    function Delete_img_a() {
    [[ -f /usr/bin/docker ]] || echo 'No docker !'
    [[ -z $(docker ps |awk '/'$RN'/ {print $NF}') ]] && { echo "$RN容器不存在!";exit; }
    for n in $IMGS;
    do
      IMG="${n%%:*}"
      docker exec $RN rm -rf /var/lib/registry/docker/registry/v2/repositories/$IMG
    done
    echo '清理 Clean ...'
    docker exec $RN bin/registry garbage-collect /etc/docker/registry/config.yml &>/dev/null
    docker restart $RN &>/dev/null
    }
    
    #上传 push
    function Push() {
    for IMG in $IMGS;
    do
      echo -e "33[33m docker push $IMG to $HUB 33[0m"
      docker tag $IMG $HUB/$IMG
      docker push $HUB/$IMG
      docker rmi $HUB/$IMG &>/dev/null
    done
    }
    
    #下载 pull
    function Pull() {
    for IMG in $IMGS;
    do
      echo -e "33[33m dokcer pull $IMG from $HUB 33[0m"
      docker pull $HUB/$IMG
      docker tag $HUB/$IMG $IMG
      docker rmi $HUB/$IMG &>/dev/null
    done
    }
    
    case "$1" in 
      "-h")
      echo  
      echo "#默认查询images"
      echo "sh $0 -h #帮助 -d #删除 -dd #清理空间"
      echo "    -pull img1 img2 #下载 -push #上传"
      echo 
      echo "#示例:删除 nginx:1.1 nginx:1.2 (镜像名:版本)"
      echo "sh $0 -d nginx:1.1 nginx:1.2 "
      echo "sh $0 -dd nginx #删除nginx所有版本"
      echo 
      echo "#定义仓库url地址hub.test.com:5000(默认 localhost:5000)"
      echo "env HUB=hub.test.com:5000 /bin/sh $0 -d nginx:1.1 "
      echo  
    ;;
      "-d")
      Check_hub
      IMGS=${*/-dd/}
      IMGS=${IMGS/-d/}
      Delete_img
    ;;
      "-dd")
      Check_hub
      IMGS=${*/-dd/}
      IMGS=${IMGS/-d/}
      Delete_img_a
    ;;
      "-pull")
      IMGS=${*/-pull/}
      Pull
    ;;
      "-push")
      IMGS=${*/-push/}
      Push
    ;;
      *)
      Check_hub
      Select_img
    ;;
    esac
  • 相关阅读:
    linux ubuntu 中文汉化
    微信内核浏览器一些用法
    struts2解耦和获取提交的值
    html背景图片自适应
    Heroku 云服务部署流程
    mac 遇到的奇怪问题?
    h5完美实现无刷新上传并附带上传效果
    ionic 实现 应用内(webview中html页面点击) 和 应用外 (浏览器html页面点击) 打开本地安装应用
    ionic 实现微信朋友圈分享的完整开发流程
    OpenGL ES学习笔记(三)——纹理
  • 原文地址:https://www.cnblogs.com/kcxg/p/10766550.html
Copyright © 2020-2023  润新知