bugfix: copy hosts file
[bottlenecks.git] / docker / docker_cleanup.sh
1 #!/bin/bash
2 ##############################################################################
3 # Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
4 #
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
10
11 usage="Script to clear up dockers and their images.
12
13 usage:
14     bash $(basename "$0") [-h|--help] [-d|--docker <docker name>] [--debug]
15
16 where:
17     -h|--help         show the help text
18     -d|--docker       specify dockers' name
19       <docker name>   keyword of dockers' name used to find dockers
20                           e.g. keyword "bottlenecks" to find "opnfv/bottlenecks:*"
21     --debug           print debug information with default false
22
23 examples:
24     $(basename "$0")
25     $(basename "$0") -d bottlenecks --debug"
26
27 clnup_debug=false
28
29 while [[ $#>0 ]]; do
30     clnup_docr="$1"
31     case $clnup_docr in
32         -h|--help)
33             echo "$usage"
34             exit 0
35             shift
36         ;;
37         -d|--docker)
38             docker_name="$2"
39             shift
40
41             if [[ $2 == "--debug" ]]; then
42                 clnup_debug=true
43                 shift
44             fi
45         ;;
46         --debug)
47             clnup_debug=true
48             shift
49             if [[ "$1" == "-d" || "$1" == "--docker" ]]; then
50                 docker_name="$2"
51                 shift
52             fi
53         ;;
54         *)
55             echo "unknow options $1 $2 $3"
56             exit 1
57         ;;
58     esac
59     shift
60 done
61
62
63 # check if docker name is empty
64 if [[ $docker_name == "" ]]; then
65     echo empty docker name
66     exit 1
67 fi
68
69 # clean up dockers and their images with keyword in their names
70 [[ $clnup_debug == true ]] && redirect="/dev/stdout" || redirect="/dev/null"
71
72 echo "$docker_name: docker containers/images cleaning up"
73
74 dangling_images=($(docker images -f "dangling=true" | grep $docker_name | awk '{print $3}'))
75 if [[ -n $dangling_images ]]; then
76     echo "Removing $docker_name:<none> dangling images and their containers"
77     docker images | head -1 && docker images | grep $dangling_images
78     for image_id in "${dangling_images[@]}"; do
79         echo "$docker_name: Removing dangling image $image_id"
80         docker rmi -f $image_id >${redirect}
81     done
82 fi
83
84 for image_id in "${dangling_images[@]}"; do
85     if [[ -n $(docker ps -a | grep $image_id) ]]; then
86         echo "$docker_name: Removing containers associated with dangling image: $image_id"
87         docker ps -a | head -1 && docker ps -a | grep $image_id
88         docker ps -a | grep $image_id | awk '{print $1}'| xargs docker rm -f >${redirect}
89     fi
90 done
91
92 if [[ -n $(docker ps -a | grep $docker_name) ]]; then
93     echo "Removing existing $docker_name containers"
94     docker ps -a | head -1 && docker ps -a | grep $docker_name
95     docker ps -a | grep $docker_name | awk '{print $1}' | xargs docker rm -f >$redirect
96 fi
97
98 if [[ -n $(docker images | grep $docker_name) ]]; then
99     echo "$docker_name: docker images to remove:"
100     docker images | head -1 && docker images | grep $docker_name
101     image_ids=($(docker images | grep $docker_name | awk '{print $3}'))
102     for image_id in "${image_ids[@]}"; do
103         echo "Removing docker image $docker_name:$tag..."
104         docker rmi $image_id >$redirect
105     done
106 fi