#!/bin/bash
#-x 会回显命令执行的语句和参数
set -x
#相对路径执行脚本,并通过cd - 返回当前目录
cd ../../utils
. ./sys_info.sh
. ./sh-test-lib
cd -
#要支持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 service
if [ "$start_service"x = ""x ]; then
service docker start
else
groupadd docker
$start_service docker.service
fi
print_info $? docker-start-service
#查询docker 进程是否已经起来
if [ "`ps -aux | grep docker`"x != ""x ]; then
print_info 0 docker-status-service
else
print_info 1 docker-status-service
fi
#不存在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-image
fi
#docker 的load子命令解释如下 load Load an image from a tar archive or STDIN
docker load --input docker/openestuary_apache.tar.gz
print_info $? docker-load-apache
docker load --input docker/openestuary_mysql.tar.gz
print_info $? docker-load-mysql
#images List images
images=$(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 目录
popd
fi
#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-ip
cp -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/apache
print_info $? docker-run-apache
docker run -d -p 32769:3306 --name mysql -v /root/mysql_data:/u01/my3306/data openestuary/mysql
print_info $? docker-run-mysql
#通过docker ps 得到目前运行的docker id
container_id=$(docker ps | grep -v IMAGE | awk '{print $1}')
if [ "$container_id"x != ""x ]; then
print_info 0 docker-ps
else
print_info 1 docker-ps
fi
#declare -a 声明两个数组
declare -A id_service_dic
declare -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 service
read -a service <<< $(echo $services)
#得到数组的长度
len_ids=${#service[@]}
i=0
while [ $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 20170606
if [ -f "upload" ]; then
print_info 0 docker-run-LAMP
else
print_info 1 docker-run-LAMP
fi
#针对container_id 中每个docker 执行restart 命令
for i in $container_id
do
docker restart $i
print_info $? docker-restart-${id_service_dic[$i]}
done
#执行stop命令
for i in $container_id
do
docker stop $i
print_info $? docker-stop-${id_service_dic[$i]}
done
#删除每个docker
for i in $container_id
do
docker rm $i
print_info $? docker-rm-${id_service_dic[$i]}
done
#删除镜像
for i in ${images}
do
docker rmi $i
print_info $? docker-rmi-$i
done
test-definitions/blob/master/auto-test/docker/docker.sh
最新推荐文章于 2023-10-12 13:20:52 发布