本文共 3246 字,大约阅读时间需要 10 分钟。
#!/bin/bash#-x 会回显命令执行的语句和参数set -x#相对路径执行脚本,并通过cd - 返回当前目录cd ../../utils. ./sys_info.sh. ./sh-test-libcd -#要支持docker ,可以看出不同发行版安装的包有所不同case $distro in centos) pkgs="make wget docker" ;; ubuntu) pkgs="make wget docker docker.io" ;; *) echo "[$PKG_NAME] do not support install hhvm on $HOST system" ;;esac#安装docker相关的包,并打印返回的值以检查是否安装成功install_deps "${pkgs}"print_info $? install-docker#启动docker serviceif [ "$start_service"x = ""x ]; then service docker startelse groupadd docker $start_service docker.servicefiprint_info $? docker-start-service#查询docker 进程是否已经起来if [ "`ps -aux | grep docker`"x != ""x ]; then print_info 0 docker-status-serviceelse print_info 1 docker-status-servicefi#不存在docker 目录的话,就下载if [ ! -d docker ]; then download_file http://htsat.vicp.cc:804/docker/docker.tar.gz [[ $? -eq 0 ]] && tar -xvf docker.tar.gz print_info $? download-docker-imagefi#docker 的load子命令解释如下 load Load an image from a tar archive or STDINdocker load --input docker/openestuary_apache.tar.gzprint_info $? docker-load-apachedocker load --input docker/openestuary_mysql.tar.gzprint_info $? docker-load-mysql#images List imagesimages=$(docker images| grep -v 'REPOSITORY' | awk '{print $1}')docker_images=$(echo $images | grep mysql | grep apache)#不存在这个目录if [ ! -d docker/Discuz ]; then #将当前目录下docker这个目录压栈 pushd ./docker #解包 tar -xf Discuz.tgz print_info $? unzip-discuz-file #返回到./docker 目录 popdfi#sed 替换ip地址,并通过grep 检查特定文件中ip是否替换成功sed -i "s/192.168.1.246/${local_ip}/g" `grep -rl 192.168.1.246 ./docker/Discuz`print_info $? replace-discuz-ipcp -rf ./docker/Discuz ./docker/mysql_data /root/print_info $? prepare-lamp-file#运行镜像docker run -d -p 32768:80 --name apache -v /root/Discuz:/var/www/html openestuary/apacheprint_info $? docker-run-apachedocker run -d -p 32769:3306 --name mysql -v /root/mysql_data:/u01/my3306/data openestuary/mysqlprint_info $? docker-run-mysql#通过docker ps 得到目前运行的docker idcontainer_id=$(docker ps | grep -v IMAGE | awk '{print $1}')if [ "$container_id"x != ""x ]; then print_info 0 docker-pselse print_info 1 docker-psfi#declare -a 声明两个数组declare -A id_service_dicdeclare -a image_id#根据docker ps得到两个数组ids=$(docker ps | grep -v IMAGE | awk '{print $1}')services=$(docker ps | grep -v IMAGE | awk '{print $NF}')#ids包含一个数组,将这个数组值读入到image_id 这个数组中read -a image_id <<< $(echo $ids)declare -a serviceread -a service <<< $(echo $services)#得到数组的长度len_ids=${#service[@]}i=0while [ $i -lt $len_ids ]do id_service_dic[${image_id[$i]}]=${service[$i]} i=$(( $i + 1 ))done#判断当前目录下这个目录是否存在if [ ! -f "upload" ]; then echo "upload file not exist!!"fi#下载文件wget http://${local_ip}:32768/upload#print_info $? docker-run-LAMP#modify by liucaili 20170606if [ -f "upload" ]; then print_info 0 docker-run-LAMPelse print_info 1 docker-run-LAMPfi#针对container_id 中每个docker 执行restart 命令for i in $container_iddo docker restart $i print_info $? docker-restart-${id_service_dic[$i]}done#执行stop命令for i in $container_iddo docker stop $i print_info $? docker-stop-${id_service_dic[$i]}done#删除每个dockerfor i in $container_iddo docker rm $i print_info $? docker-rm-${id_service_dic[$i]}done#删除镜像for i in ${images}do docker rmi $i print_info $? docker-rmi-$idone
转载地址:http://tznmi.baihongyu.com/