#!/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