第一版:
1 #!/bin/bash
2 #this is input docker continer shell!
3 #this is 2019-01-29
4 # v1.1.2
5 read -p "请输入要执行docker的名称:" NAME #此出输入要执行docker的名称
6 a=$1
7 case $a in
8 *images)
9 if [ $a = images ];then
10 docker images|grep $NAME|awk '{print $1,$3}'
11 elif [ $a = all-images ];then
12 docker images
13 else
14 echo "error"
15 fi
16 ;;
17 *status)
18 if [ $a = status ];then
19 docker ps -a|grep $NAME
20 elif [ $a = all-status ];then
21 docker ps -a
22 else
23 echo "error"
24 fi
25 ;;
26 run*)
27 if [ $a = run ];then
28 docker run -itd --restart=always --name $NAME $(docker images|grep $NAME|awk '{print $1}')
29 elif [ $a = run-v ];then
30 docker run -itd --restart=always -v /root/:/home/ --name $NAME $(docker images|grep $NAME|awk '{print $1}')
31 elif [ $a = run-p80 ];then
32 docker run -itd --restart=always -v /root/:/home/ -p 80:80 --name $NAME $(docker images|grep $NAMW|awk '{print $1}')
33 else
34 echo "error"
35 fi
36 ;;
37 *id)
38 if [ $a = id ];then
39 docker ps -a|grep $NAME |awk '{print $1}'
40 elif [ $a = all-id ];then
41 docker ps -a|awk '{print $1,$NF}'
42 else
43 echo "error"
44 fi
45 ;;
46 *restart)
47 if [ $a = restart ];then
48 docker restart $(docker ps -a|grep $NAME |awk '{print $1}')
49 elif [ $a = all-restart ];then
50 for i in `docker ps -a|awk '{print $1}'`;do
51 docker restart $i
52 done
53 else
54 echo "error"
55 fi
56 ;;
57 *stop)
58 if [ $a = stop ];then
59 docker stop $(docker ps -a|grep $NAME |awk '{print $1}')
60 elif [ $a = all-stop ];then
61 for s in `docker ps|awk '{print $1}'`;do
62 docker stop $s
63 done
64 else
65 echo "error"
66 fi
67 ;;
68 inspect)
69 docker inspect $(docker ps -a|grep $NAME |awk '{print $1}')
70 ;;
71 *runtime)
72 if [ $a = runtime ];then
73 docker ps -a|grep $NAME |awk '{print $1,$7,$8,$9,$10,$11}'
74 elif [ $a = all-runtime ];then
75 docker ps -a|awk '{print $1,$7,$8,$9,$10,$11}'
76 else
77 echo "error"
78 fi
79 ;;
80 *start)
81 if [ $a = start ];then
82 docker start $(docker ps -a|grep $NAME |awk '{print $1}')
83 elif [ $a = all-start ];then
84 for t in `docker ps -a|grep Exited |awk '{print $1}'`;do
85 docker start $t
86 done
87 else
88 echo "error"
89 fi
90 ;;
91 logs)
92 docker logs $(docker ps -a|grep $NAME|awk '{print $1}')
93 ;;
94 rm)
95 docker rm $(docker ps -a|grep $NAME|awk '{print $1}')
96 ;;
97 help)
98 echo -e "\timages \t--获取所需的镜像名称和ID"
99 echo -e "\tall-images\t--获取所有的镜像名称和ID"
100 echo -e "\tstatus \t--查看所需容器的运行状态"
101 echo -e "\tall-status\t--查看所有容器的运行状态"
102 echo -e "\trun \t--运行所需的容器"
103 echo -e "\trun-v \t--运行所需的容器,并挂在数据卷目录"
104 echo -e "\trun-p80 \t--运行所需的容器,并映射端口80"
105 echo -e "\tid \t--获取已经运行的所需容器的id"
106 echo -e "\tall-id \t--获取所有已经运行的所需容器的id"
107 echo -e "\trestart \t--重启所需容器"
108 echo -e "\tall-restart\t--重启所有运行的容器"
109 echo -e "\tstop \t--停止正在运行的所需容器"
110 echo -e "\tall-stop\t--停止所有正在运行的容器"
111 echo -e "\tinspect \t--获取所需容器的信息"
112 echo -e "\truntime \t--查看所需容器已经启动的时间"
113 echo -e "\tall-runtime\t--查看所有容器已经启动的时间"
114 echo -e "\tstart \t--启动未运行的所需容器"
115 echo -e "\tallstart\t--启动所有未运行的容器"
116 echo -e "\tlogs \t--查看所需容器的日志信息"
117 echo -e "\thelp \t--查看帮助信息"
118 echo -e "\trm \t--删除容器"
119 ;;
120 *)
121 echo "Please input {image|all-image|status|all-status|run|run-v|run-p80|id|all-id|restart|all-restart|stop|all-stop|inspect|runtime|all-runtime|start|all-start|logs|rm|help|}"
122 ;;
123 esac
第二版:
1 #!/bin/bash
2 #this is input docker continer shell!
3 #this is 2019-02-13
4 # v1.2.5
5 ##########################################################################################
6 # 功能:
7 # 1、 将对docker的一些基本操作记录到数据库
8 # 2、 实现预判断,创建库或表
9 # 3、 完善查询与变更操作的写入数据库操作
10 # 4、 优化了创建容器时可以自定义容器名称,以及手动指定要挂载的宿主机路径
11 # 5、 可以在容器里执行systemctl命令
12 # 6、 容器启动则在宿主机/etc/hosts 文件里添加对应的ip地址和主机名称
13 #########################################################################################
14 # 前提条件:
15 # 1、运行此脚本的机器上已经安装了mysql数据库,数据库的一切都是默认不变的;
16 # 2、运行此脚本的机器上已经安装有docker
17 #
18 ########################################################################################
19 read -p "请输入要执行docker的名称:" NAME #此出输入要执行docker的名称
20 z=$1
21 case $z in
22 *images)
23 if [ $z = images ];then
24 docker images|grep $NAME|awk '{print $1,$3}'
25 elif [ $z = all-images ];then
26 docker images
27 else
28 echo "error"
29 fi
30 ;;
31 *status)
32 if [ $z = status ];then
33 docker ps -a|grep $NAME
34 elif [ $z = all-status ];then
35 docker ps -a
36 else
37 echo "error"
38 fi
39 ;;
40 run*)
41 read -p "请输入容器名称:" D_NAME
42 read -p "请输入要挂载的宿主机路径:" Volume
43 if [ $z = run ];then
44 docker run -itd --restart=always -e LANG=en_US.UTF-8 -v /etc/localtime:/etc/localtime --name $D_NAME $(docker images|grep $NAME|awk '{print $1}') /usr/sbin/init
45 ID=`docker ps -a|grep $D_NAME|awk '{print $1}'`
46 IP=`docker exec -it $ID hostname -i`
47 sleep 2
48 sed -i "\$a$IP\t$ID" /etc/hosts
49 elif [ $z = run-v ];then
50 docker run -itd --restart=always -v $Volume:/home/ -e LANG=en_US.UTF-8 -v /etc/localtime:/etc/localtime --name $D_NAME $(docker images|grep $NAME|awk '{print $1}') /usr/sbin/init
51 ID=$(docker ps -a|grep $D_NAME|awk '{print $1}')
52 IP=$(docker exec -it $ID hostname -i)
53 sleep 2
54 sed -i "\$a$IP\t$ID" /etc/hosts
55 elif [ $z = run-p80 ];then
56 docker run -itd --restart=always -v $Volume:/home/ -e LANG=en_US.UTF-8 -v /etc/localtime:/etc/localtime -p 80:80 --name $D_NAME $(docker images|grep $NAMW|awk '{print $1}') /usr/sbin/init
57 ID=$(docker ps -a|grep $D_NAME|awk '{print $1}')
58 IP=$(docker exec -it $ID hostname -i)
59 sleep 2
60 sed -i "\$a$IP\t$ID" /etc/hosts
61 else
62 echo "error"
63 fi
64 ;;
65 *id)
66 if [ $z = id ];then
67 docker ps -a|grep $NAME |awk '{print $1}'
68 elif [ $z = all-id ];then
69 docker ps -a|awk '{print $1,$NF}'
70 else
71 echo "error"
72 fi
73 ;;
74 *restart)
75 if [ $z = restart ];then
76 docker restart $(docker ps -a|grep $NAME |awk '{print $1}')
77 elif [ $z = all-restart ];then
78 for i in `docker ps -a|awk '{print $1}'`;do
79 docker restart $i
80 done
81 else
82 echo "error"
83 fi
84 ;;
85 *stop)
86 if [ $z = stop ];then
87 docker stop $(docker ps -a|grep $NAME |awk '{print $1}')
88 elif [ $z = all-stop ];then
89 for s in `docker ps|awk 'NR!=1{print $1}'`;do
90 docker stop $s
91 done
92 else
93 echo "error"
94 fi
95 ;;
96 inspect)
97 docker inspect $(docker ps -a|grep $NAME |awk '{print $1}')
98 ;;
99 search)
100 docker search $NAME
101 ;;
102 pull)
103 docker pull $NAME
104 ;;
105 *runtime)
106 if [ $z = only-runtime ];then
107 docker ps -a|grep $NAME |awk '{print $1,$7,$8,$9,$10,$11}'
108 elif [ $z = all-runtime ];then
109 docker ps -a|awk '{print $1,$7,$8,$9,$10,$11}'
110 else
111 echo "error"
112 fi
113 ;;
114 *start)
115 if [ $z = start ];then
116 docker start $(docker ps -a|grep $NAME |awk '{print $1}')
117 elif [ $z = all-start ];then
118 for t in `docker ps -a|grep Exited |awk '{print $1}'`;do
119 docker start $t
120 done
121 else
122 echo "error"
123 fi
124 ;;
125 logs)
126 docker logs $(docker ps -a|grep $NAME|awk '{print $1}')
127 ;;
128 *rm*)
129 if [ $z = rm ];then
130 docker rm $(docker ps -a|grep $NAME|awk '{print $1}')
131 elif [ $z = rmi ];then
132 docker rmi $(docker images|grep $NAME|awk '{print $3}')
133 elif [ $z = all-rm ];then
134 for d in `docker ps -a|awk 'NR!=1{print $1}'`;do
135 docker rm $d
136 done
137 else
138 echo "error"
139 fi
140 ;;
141 help)
142 echo -e "\timages \t--获取所需的镜像名称和ID"
143 echo -e "\tall-images\t--获取所有的镜像名称和ID"
144 echo -e "\tstatus \t--查看所需容器的运行状态"
145 echo -e "\tall-status\t--查看所有容器的运行状态"
146 echo -e "\trun \t--运行所需的容器"
147 echo -e "\tpull \t--下载所需镜像"
148 echo -e "\tsearch \t--查询所需镜像"
149 echo -e "\trun-v \t--运行所需的容器,并挂在数据卷目录"
150 echo -e "\trun-p80 \t--运行所需的容器,并映射端口80"
151 echo -e "\tid \t--获取已经运行的所需容器的id"
152 echo -e "\tall-id \t--获取所有已经运行的所需容器的id"
153 echo -e "\trestart \t--重启所需容器"
154 echo -e "\tall-restart\t--重启所有运行的容器"
155 echo -e "\tstop \t--停止正在运行的所需容器"
156 echo -e "\tall-stop\t--停止所有正在运行的容器"
157 echo -e "\tinspect \t--获取所需容器的信息"
158 echo -e "\tonly-runtime \t--查看所需容器已经启动的时间"
159 echo -e "\tall-runtime\t--查看所有容器已经启动的时间"
160 echo -e "\tstart \t--启动未运行的所需容器"
161 echo -e "\tallstart\t--启动所有未运行的容器"
162 echo -e "\tlogs \t--查看所需容器的日志信息"
163 echo -e "\thelp \t--查看帮助信息"
164 echo -e "\trm \t--删除容器"
165 echo -e "\tall-rm \t--删除all容器"
166 echo -e "\trmi \t--删除镜像"
167 ;;
168 *)
169 echo "Please input {image|all-image|status|all-status|pull|run|run-v|run-p80|id|all-id|restart|all-restart|stop|all-stop|inspect|runtime|all-runtime|start|all-start|logs|rm|rmi|help|}"
170 ;;
171 esac
172
173 ####################################
174 #将执行查询操作的步骤记录到数据库
175 ###################################
176
177 for b in images status id inspect runtime logs search help
178 do
179 mysql -e "show databases"|grep docker >>/dev/null #进入docker库,验证数据库是否创建有docker库
180 if [ $? = 0 ];then #如果查询有docker库,则执行下面操作
181 if [ $z = $b ];then
182 mysql -D docker -e "show tables" |grep select>>/dev/null
183 if [ $? = 0 ];then #查询表成功,则执行下面步骤
184 mysql -e "insert into docker.select(name,date,number,action) values(\"$NAME\",\"$(date +%F-%T)\",1,\"select_$b\")"
185 else
186 mysql -e "create table docker.select (name char(64),date char(64),number char(64),action char(64))" #查询无此表,则进行创建
187 mysql -e "insert into docker.select(name,date,number,action) values(\"$NAME\",\"$(date +%F-%T)\",1,\"select_$b\")"
188 fi
189 elif [ $z = all-$b ];then
190 mysql -D docker -e "show tables" |grep select>>/dev/null
191 if [ $? = 0 ];then #查询表成功,则执行下面步骤
192 mysql -e "insert into docker.select(name,date,number,action) values(\"$NAME\",\"$(date +%F-%T)\",1,\"select_all-$b\")"
193 else
194 mysql -e "create table docker.select (name char(64),date char(64),number char(64),action char(64))" #查询无此表,则进行创建
195 mysql -e "insert into docker.select(name,date,number,action) values(\"$NAME\",\"$(date +%F-%T)\",1,\"select_$b\")"
196 fi
197 fi
198 else
199 mysql -e "create database docker" #如果没有docker库,则创建docker数据库
200 if [ $? = 0 ];then #数据库创建成功,则成功执行下面步骤
201 if [ $z = $b ];then
202 mysql -D docker -e "show tables" |grep select>>/dev/null
203 if [ $? = 0 ];then #查询表成功,则执行下面步骤
204 mysql -e "insert into docker.select(name,date,number,action) values(\"$NAME\",\"$(date +%F-%T)\",1,\"select_$b\")"
205 else
206 mysql -e "create table docker.select (name char(64),date char(64),number char(64),action char(64))" #查询无此表,则进行创建
207 mysql -e "insert into docker.select(name,date,number,action) values(\"$NAME\",\"$(date +%F-%T)\",1,\"select_$b\")"
208 fi
209 elif [ $z = all-$b ];then
210 mysql -D docker -e "show tables" grep select>>/dev/null
211 if [ $? = 0 ];then #查询表成功,则执行下面步骤
212 mysql -e "insert into docker.select(name,date,number,action) values(\"$NAME\",\"$(date +%F-%T)\",1,\"select_all-$b\")"
213 else
214 mysql -e "create table docker.select (name char(64),date char(64),number char(64),action char(64))" #查询无此表,则进行创建
215 mysql -e "insert into docker.select(name,date,number,action) values(\"$NAME\",\"$(date +%F-%T)\",1,\"select_$b\")"
216 fi
217 fi
218 else
219 echo "error: don't unknow docker database !!!" #创建docker数据库失败,则打印此提示错误
220 fi
221 fi
222 done
223
224 ###################################
225 #将变更的操作步骤记录到数据库
226 ##################################
227
228 for c in run restart stop start rm pull
229 do
230 mysql -e "show databases" |grep docker >/dev/null
231 if [ $? = 0 ];then
232 if [ $z = $c ];then
233 mysql -e "select * from docker.add">/dev/null
234 if [ $? = 0 ];then
235 mysql -e "insert into docker.add(name,date,action) values(\"$NAME\",\"$(date +%F-%T)\",\"$z\")"
236 else
237 mysql -e "create table docker.add (name char(64),date char(64),action char(64))" #查询无此表,则进行创建
238 mysql -e "insert into docker.add(name,date,action) values(\"$NAME\",\"$(date +%F-%T)\",\"$z\")"
239 fi
240 elif [ $z = all-$c ];then
241 mysql -e "select * from docker.add">/dev/null
242 if [ $? = 0 ];then
243 mysql -e "insert into docker.add(name,date,action) values(\"$NAME\",\"$(date +%F-%T)\",\"all-$z\")"
244 else
245 mysql -e "create table docker.add (name char(64),date char(64),action char(64))" #查询无此表,则进行创建
246 mysql -e "insert into docker.add(name,date,action) values(\"$NAME\",\"$(date +%F-%T)\",\"all-$z\")"
247 fi
248 fi
249 else
250 mysql -e "create database docker"
251 if [ $? = 0 ];then
252 if [ $z = $c ];then
253 mysql -e "select * from docker.add">/dev/null
254 if [ $? = 0 ];then
255 mysql -e "insert into docker.add(name,date,action) values(\"$NAME\",\"$(date +%F-%T)\",\"$z\")"
256 else
257 mysql -e "create table docker.add (name char(64), date char(64), action char(64))"
258 mysql -e "insert into docker.add(name,date,action) values(\"$NAME\",\"$(date +%F-%T)\",\"$z\")"
259 fi
260 elif [ $z = *$c* ];then
261 mysql -e "select * from docker.add">/dev/null
262 if [ $? = 0 ];then
263 mysql -e "insert into docker.add(name,date,action) values(\"$NAME\",\"$(date +%F-%T)\",\"all-$z\")"
264 else
265 mysql -e "create table docker.add (name char(64), date char(64), action char(64))"
266 mysql -e "insert into docker.add(name,date,action) values(\"$NAME\",\"$(date +%F-%T)\",\"all-$z\")"
267 fi
268 fi
269 else
270 echo "error: don't unknow docker database!!!!"
271 fi
272 fi
273 done
274
275 ################################
276 #将已经下载的镜像记录到数据库
277 ###############################
278
279 if [ $z = pull ];then
280 mysql -e "insert into docker.images(name,date) values(\"$(docker images|grep $NAME|awk '{print $1}')\",\"$(date +%F-%T)\")"
281 fi
282
283
284
285 #######################################################################################################
286 # 说明:
287 # 1、此后版本需添加docker 命令的操作记录;
288 # 2、此后版本添加linux系统对docker服务的一些动作,如:启动、重启、停止等等类似的一些操作
289 #
290 ########################################################################################################