#!/bin/bash
<<INFO
AUTHOR:运维@小兵
DATE:2021-07-08
DESCRIBE:Docker方式安装redis
SYSTEM:CentOS7/RedHat7
WARNING:
MODIFY:
INFO

set -e
source /etc/profile #避免ansible远程执行shell获取环境变量不一致的问题

WORKDIR=$(cd `dirname $0`;pwd) #脚本所在路径
echo "Current Excute: bash ${WORKDIR}/$0 $@"

REDIS_PORT="6379"
REDIS_CONTAINER_NAME="redis"
HARBOR_USER="admin"
HARBOR_PWD="12345"
HARBOR_IP="192.168.1.2"
IMAGE_ADDR="${HARBOR_IP}/redis:6.0"

#环境检查
Check_Env(){
echo "INFO:Begin Check Env..."
local pid=$(lsof -i:${REDIS_PORT} -t)
if ss -nutlp | grep -w ':${REDIS_PORT}\b' &> /dev/null;then
echo "ERROR:${REDIS_PORT} Is Used" && exit 1
fi
if ! command -v docker &> /dev/null;then
echo "ERROR:Please Install Docker" && exit 1
fi
}

#配置docker信任
Config_Docker(){
if ! docker info | grep -w "${HARBOR_IP}" &> /dev/null;then
[[ ! -f /etc/docker/daemon.json.bak ]] && cp /etc/docker/daemon.json{,.bak}
tee /etc/docker/daemon.json << EOF
{
"registry-mirrors":["https://7bezldxe.mirror.aliyuncs.com/"],
"log-driver":"json-file","log-opts":{"max-size":"5m"},
"storage-driver":"overlay2",
"storage-opts":["overlay2.override_kernel_check=true"],
"insecure-registries": ["${HARBOR_IP}","${HARBOR_IP}:80"]
}
EOF
systemctl restart docker
docker info | grep -w "${HARBOR_IP}"
fi
}

#拉取镜像
Pull_Image(){
echo "INFO:Begin Pull Image ${IMAGE_ADDR}..."
Config_Docker
docker login -u ${HARBOR_USER} -p ${HARBOR_PWD} ${HARBOR_IP}
docker pull ${IMAGE_ADDR}
}

#安装redis容器
Install_Redis(){
Check_Env
Pull_Image
echo "INFO:Begin Create Redis Container..."
docker run -d --name=${REDIS_CONTAINER_NAME} --restart unless-stopped \
-p ${REDIS_PORT}:6379 ${IMAGE_ADDR}

sleep 2
if ss -nutlp | grep -w ":${REDIS_PORT}\b" &> /dev/null;then
echo "INFO:${REDIS_CONTAINER_NAME} Container Create Success"
else
echo "ERROR:${REDIS_CONTAINER_NAME} Container Create Fail" && exit 1
fi
}

#卸载REDIS
Uninstall_Redis(){
if docker ps -a | egrep -w "\b${REDIS_CONTAINER_NAME}$" &> /dev/null;then
docker rm -f ${REDIS_CONTAINER_NAME}
echo "INFO:${REDIS_CONTAINER_NAME} Container uninstall Success" && exit 0
else
echo "WARN:${REDIS_CONTAINER_NAME} Container Is Without" && exit 0
fi
}

######################主程序######################
[[ $# -ne 1 ]] && echo "ERROR:Invalid Param!!! eg:bash $0 (install|uninstall)" && exit 1
case $1 in
install)
Install_Redis;;
uninstall)
Uninstall_Redis;;
*)
echo "ERROR:Invalid Param!!! eg:bash $0 install or uninstall" && exit 1
esac