docker.sh 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #!/bin/bash
  2. tm=`date +%Y%m%d-%H%M%S`
  3. echo "====================================================="
  4. echo "Starting <${tm}>"
  5. # set constant variables
  6. pmodule=zuul
  7. pvport=15100
  8. pport=15100
  9. pnetwork="bridge"
  10. pdelete=""
  11. pstop=""
  12. pip="192.168.3.221"
  13. pipmask=24
  14. pmask="192.168.3.1"
  15. pnum=2
  16. show_usage="args: [-m, -v, -p, -pn, -d, -s, -ip, -im, -mk, -n]\
  17. [--pmodule, --pvport=, --pport=, --pnetwork=, --pdelete=, --pstop=, --pip=, --pipmask=, --pmask=, --pnum=]"
  18. GETOPT_ARGS=`getopt -o m:v:p:d:s:ip:im:mk:pn:n: -al pmodule:,pvport:,pport:,pnetwork:,pdelete:,pstop:,pip:,pipmask:,pmask:,pnum: -- "$@"`
  19. # echo "$GETOPT_ARGS"
  20. eval set -- "$GETOPT_ARGS"
  21. while [ -n "$1" ]
  22. do
  23. case "$1" in
  24. -m|--pmodule) pmodule=$2; shift 2;;
  25. -v|--pvport) pvport=$2; shift 2;;
  26. -p|--pport) pport=$2; shift 2;;
  27. -d|--pdelete) pdelete=$2; shift 2;;
  28. -s|--pstop) pstop=$2; shift 2;;
  29. -ip|--pip) pip=$2; shift 2;;
  30. -im|--pipmask) pipmask=$2; shift 2;;
  31. -mk|--pmask) pmask=$2; shift 2;;
  32. -pn|--pnetwork) pnetwork=$2; shift 2;;
  33. -n|--pnum) pnum=$2; shift 2;;
  34. --) break ;;
  35. *) echo $1,$2,$show_usage; break ;;
  36. esac
  37. done
  38. if [[ -z $pmodule ]]; then
  39. echo $show_usage
  40. exit 0
  41. fi
  42. base_container_name=${pmodule}-${pport}
  43. # get container sn
  44. sn=`sudo docker ps -a | grep ${pmodule} | wc -l`
  45. echo "Has ${sn} container of ${pmodule}"
  46. # get container id
  47. # container_id=`sudo docker ps -a | grep ${pmodule} | awk -F '[ ]+' 'NR==1{print $1}'`
  48. all_container_id=`sudo docker ps -a | grep ${pmodule} | awk -F '[ ]+' '{print $1}' | tr "\n" " " | sed -e 's/,$/\n/'`
  49. echo "All container id is ${all_container_id}"
  50. gt_container_id=`sudo docker ps -a | grep ${pmodule} | awk 'NR>2' | awk -F '[ ]+' '{print $1}' | tr "\n" " " | sed -e 's/,$/\n/'`
  51. echo "Great ${pnum} container id is ${gt_container_id}"
  52. # get image name
  53. isn=`sudo docker images | grep ${pmodule} | wc -l`
  54. echo "Has ${isn} image of ${pmodule}"
  55. image_name=`sudo docker images | grep ${pmodule} | awk -F '[ ]+' 'NR==1{print $1}'`
  56. # get image latest tag
  57. image_tag=`sudo docker images | grep ${pmodule} | awk -F '[ ]+' 'NR==1{print $2}'`
  58. # get image latest tag id
  59. image_id=`sudo docker images | grep ${pmodule} | awk -F '[ ]+' 'NR==1{print $3}'`
  60. all_image_id=`sudo docker images | grep ${pmodule} | awk -F '[ ]+' '{print $3}' | tr "\n" " " | sed -e 's/,$/\n/'`
  61. echo "All image id is ${all_image_id}"
  62. gt_image_id=`sudo docker images | grep ${pmodule} | awk 'NR>2' | awk -F '[ ]+' '{print $3}' | tr "\n" " " | sed -e 's/,$/\n/'`
  63. echo "Great ${pnum} images id is ${gt_image_id}"
  64. if [ -n "$pstop" ] && [ -n "$all_container_id" ]; then
  65. echo "stop container ${all_container_id}"
  66. sudo docker stop ${all_container_id}
  67. fi
  68. if [ -n "$pdelete" ] && [ -n "$gt_container_id" ]; then
  69. echo "remove container ${gt_container_id}"
  70. sudo docker rm -f ${gt_container_id}
  71. fi
  72. if [ -n "$pdelete" ] && [ -n "$gt_image_id" ]; then
  73. echo "remove image ${gt_image_id}"
  74. sudo docker rmi -f ${gt_image_id}
  75. fi
  76. # genate docker container start command
  77. container_name=${base_container_name}-`cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "`
  78. echo "Starting container ${container_name} of image ${image_name}:${image_tag}"
  79. if [ "bridge" == "${pnetwork}" ]; then
  80. echo "New container's network is bridge."
  81. sudo docker run -d -i -t -p ${pport}:${pvport} --name ${container_name} --network bridge ${image_name}:${image_tag}
  82. elif [ "host" == "${pnetwork}" ]; then
  83. echo "New container's network is host."
  84. sudo docker run -d -i -t -p ${pport}:${pvport} --name ${container_name} --network host ${image_name}:${image_tag}
  85. elif [ "overlay" == "${pnetwork}" ]; then
  86. echo "New container's network is overlay."
  87. sudo docker run -d -i -t -p ${pport}:${pvport} --name ${container_name} --network overlay ${image_name}:${image_tag}
  88. else
  89. echo "New container's network is bridge."
  90. sudo docker run -d -i -t -p ${pport}:${pvport} --name ${container_name} --network bridge ${image_name}:${image_tag}
  91. fi
  92. container_ip=`sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${container_name}`
  93. echo "${container_name} ip $container_ip"
  94. # create vnet
  95. # sudo pipework br0 ${container_name} ${ip}/${pipmask}@${pmask}
  96. # sudo pipework br0 ${container_name} dhcp
  97. # sudo docker restart ${container_name}