批量修改docker镜像脚本

此脚本可以修改单个镜像,pull ,tag,push 功能,也可以全量修改本地镜像和拉取全量镜像并修改等。具体执行该脚本并查看说明。

 1 #!/bin/bash
 2 #set -x
 3 PS3="选择要执行的命令按数字: 
 4 1)拉取单个新的镜像并tag后推送至新镜像仓库。
 5 2)拉取全部镜像需要在本地创建一个*.pi结尾的文件并把需要的镜像按列表黏贴进去即可(注意需要放到和脚本同级目录下)。
 6 3)更改本地已有镜像tag后并推送至新镜像仓库。
 7 (退出请按 4)exit 或 Ctrl+c): "
 8 select to_chose in pull all local exit;do
 9 
10 
11     case $to_chose in
12     pull)
13     while true;do
14         read -ep "输入镜像全路径包括tag,例如: dockerhub.jd.com/test/abc:v0.0.1(回到上一级输入"exit"):"  to_whole
15             if [ $to_whole == exit ];then
16                 break
17             fi
18         read -ep "输入目标镜像部分路径,例如:harbor.jd.sunju/test/(末尾必须加'/'斜杠)(回到上一级输入"exit"):" to_part
19             if [ $to_part == exit ];then
20                 break    
21             fi
22         echo "------------------------------------------------------------------------->"
23         echo -e "\033[31m执行命令pull : docker pull $to_whole \033[0m"
24         docker pull  $to_whole
25         echo "------------------------------------------------------------------------->"
26         echo -e "\033[31m执行命令tag : docker tag $to_whole $to_part${to_whole##*/} \033[0m"
27         docker tag $to_whole $to_part${to_whole##*/}
28         echo "------------------------------------------------------------------------->"
29         echo -e "\033[31m执行命令push : docker push $to_part${to_whole##*/} \033[0m"
30         docker push $to_part${to_whole##*/}
31 
32     done
33     ;;
34     all)
35         hosts=`sed -n '/^[^#]/p' *.pi`
36         read -ep "输入目标镜像部分路径,例如:harbor.jd.sunju/test/(末尾必须加'/'斜杠)(回到上一级输入"exit"):" to_all
37         for host in $hosts;do
38         echo "------------------------------------------------------------------------->"
39         echo -e "\033[31m执行命令pull : docker pull $host \033[0m"
40         docker pull $host
41         echo "------------------------------------------------------------------------->"
42         echo -e "\033[31m执行命令tag :docker tag $host $to_all${host##*/} \033[0m"
43         docker tag $host $to_all${host##*/}
44         echo "------------------------------------------------------------------------->"
45         echo -e "\033[31m执行命令push : docker push $to_all${host##*/} \033[0m"
46         docker push $to_all${host##*/}
47         done    
48     ;;
49     local)
50     while true;do
51         read -ep "输入原镜像全路径例如:dockerhub.jd.com/test/:(末尾必须加'/'斜杠)(回到上一级输入"exit"):"  to_origin
52             if [ $to_origin == exit ];then
53                 break
54             fi
55         read -ep "输入目标镜像全路径例如:harbor.jd.sunju/test/(末尾必须加'/'斜杠)(回到上一级输入"exit"):" to_target
56             if [ $to_target == exit ];then
57                 break
58             fi
59         origin=`docker images | grep "$to_origin"| awk '{print$1,$2}' | tr -s ' ' ':'`
60         tag_origin=`docker images | grep "$to_origin"| awk '{print$1,$2}' | tr -s ' ' ':' |awk -F '\/'  '{print$NF}'`
61         target=$to_target    
62         for n in ${tag_origin[@]}
63         do 
64         if [ "$n" == "$n" ];then
65         echo "------------------------------------------------------------------------->"
66         echo -e "\033[31m执行命令tag : docker tag $to_origin$n $target$n \033[0m"
67         docker tag $to_origin$n $target$n
68         echo "------------------------------------------------------------------------->"
69         echo -e "\033[31m执行命令push : docker push $target$n \033[0m"
70         docker push $target$n
71         else
72         continue
73         fi
74         done
75     done
76     ;;
77     exit)
78         break
79         ;;
80     *)
81     echo -e "\033[35m输入的不是规定的参数,取消执行命令!
82 (请输入数字1或2操作指令pull/local,退出请输入数字:" 3/exit ")\033[0m"
83 
84         echo ""
85         echo "=====================================================>"
86         esac
87 done

 

上一篇:规范主机名和设置最大文件进程数


下一篇:Linux系统Swap一键脚本 添加/删除