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容器名称,默认registryRN=${RN:-registry}#访问网址,默认localhost:5000HUB=${HUB:-localhost:5000}HUB=hub.test.com:5000#检测 checkfunction Check_hub() {[[ `curl -s $HUB/v2/_catalog` == "Failed connect" ]] && { echo -e "\033[31m$HUB 访问失败\033[0m";exit;  }}#查询imagesfunction 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 "\033[31m$HUB 没有docker镜像\033[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";    donedone}#删除imagesfunction 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 "\033[31m$IMG:$TAG  镜像不存在\033[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 "\033[31m$n  删除失败\033[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/$IMGdoneecho '清理 Clean ...'docker exec $RN bin/registry garbage-collect /etc/docker/registry/config.yml &>/dev/nulldocker restart $RN &>/dev/null}#上传 pushfunction Push() {for IMG in $IMGS;do  echo -e "\033[33m docker push $IMG to $HUB \033[0m"  docker tag $IMG $HUB/$IMG  docker push $HUB/$IMG  docker rmi $HUB/$IMG &>/dev/nulldone}#下载 pullfunction Pull() {for IMG in $IMGS;do  echo -e "\033[33m dokcer pull $IMG from $HUB \033[0m"  docker pull $HUB/$IMG  docker tag $HUB/$IMG $IMG  docker rmi $HUB/$IMG &>/dev/nulldone}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
(0)

相关推荐