zoukankan      html  css  js  c++  java
  • Docker registry cli 私有仓库镜像查询、删除、上传、下载 shell

    #Docker官方私有仓库registry
    #官方只提供了API接口,不方便使用,就写了个shell
    #docker-registry安装配置http://www.cnblogs.com/elvi/p/8384604.html

    #使用:
    #复制代码保存为 img_registry.sh
     sh img_registry.sh  -h   #查看帮助

    # HUB=hub.test.com:5000 改为自己的地址

    #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
  • 相关阅读:
    HDU 4348 To the moon(可持久化线段树)
    HDU 5875 Function 大连网络赛 线段树
    HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
    HDU 5876 大连网络赛 Sparse Graph
    HDU 5701 中位数计数 百度之星初赛
    CodeForces 708B Recover the String
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    ASP.NET生成验证码
    ASP.NET生成验证码
    ASP.NET生成验证码
  • 原文地址:https://www.cnblogs.com/cherylgi/p/13529944.html
Copyright © 2011-2022 走看看