![]()
#!/bin/bash
#镜像名
image="asr-server"
#镜像版本
ver="5.2.1"
#容器名
dname="asr"
#资源目录配置
if [ $# -eq 1 ] ; then
echo $1
rfile=$1
else
#资源文件路径
rfile="/mnt/resource/test/server/resources"
fi
#日志目录解析
logfile="${rfile%/*}/log"
if [ ! -d $logfile ] ; then
mkdir -p $logfile
fi
#环境检测
function check_environment
{
#打印提示信息
echo -e "start check environment ..."
#设置最大文件描述符
nfile=`ulimit -n`
#知识点1:屏幕输入写法
if [ $nfile -lt 102400 ] ; then
cat >> /etc/security/limits.conf << EOF
* soft nofile 102400
* hard nofile 102400
EOF
fi
#校验docker是否安装
docker images > /dev/null 2>&1
if [ $? -ne 0 ];then
echo "Please install docker first ."
exit 0
fi
#打印提示信息
echo -e "check environment successful ."
}
#备份资源文件
function backup
{
#打印提示信息
echo -e "start backup old resources ..."
#校验资源文件是否存在
if [ ! -d $rfile ] ; then
echo "${rfile} not exist ."
exit 0
fi
#按日期备份
file_name=${rfile##*/}
#知识点2:日期相关语法
back_name="/tmp/${file_name}_$(date +%Y%m%d%H).tgz"
#tar主要支持相对路径备份,如果要备份绝对路径需要使用 -P 选项
tar -zcPf ${back_name} ${rfile}
#清空资源目录下文件
rm -rf "${rfile}/*"
#打印提示信息
echo -e "backup old resources successful ."
}
#镜像文件安装
function intasll
{
#打印提示信息
echo -e "start intasll ..."
#停止旧容器
container=$(docker ps|grep ${dname} | awk '{print $1}')
for i in $container
do
docker stop $i
docker rm $i
done
#打印提示信息
echo -e "stop old container successful ."
#备份资源文件
backup
#解压文件到临时目录
tar -zxf ./resources/resources.tgz -C ./tmp
#强制拷贝
/usr/bin/cp -rf ./tmp/resources/* ${rfile}/
#清理临时目录
rm -rf ./tmp/*
#获取当前镜像版本
cur_image=`docker images | grep ${image} | awk '{print $2}'`
#知识点3:注意字符串为空判断 "shell变量" 需要加双引号
if [ -n "$cur_image" ] ; then
for j in $cur_image
do
if [ "$j" = "$ver" ] ; then
echo "${image}:${ver} already exist ."
exit 0
fi
done
fi
#安装新镜像
docker load -i "./server/${image}.tar"
#启动容器
docker run -p 50053:50053 -v $rfile:/home/asr/resources -v ${logfile}:/opt/asr/log -d --name ${dname} ${image}:${ver}
#打印提示信息
echo -e "start docker successful ."
}
check_environment
intasll