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

set -e

ORACLE_PORT="1521"
ORACLE_DATA_DIR="/app/oracle/data"
ORACLE_CONTAINER_NAME="oracle"
HARBOR_USER="admin"
HARBOR_PWD="12345"
HARBOR_IP="192.168.1.2"
IMAGE_ADDR="${HARBOR_IP}/common/oracle:11.2.0.1"

#环境检查
Check_Env(){
echo "INFO:Begin Check Env..."
if ss -nutlp | grep -w ':${ORACLE_PORT}\b' &> /dev/null;then
echo "INFO:Oracle Is Installed" && exit 0
fi
if ! command -v docker &> /dev/null;then
echo "ERROR:Please Install Docker" && exit 1
fi
mkdir -p ${ORACLE_DATA_DIR}
if ! grep '^oinstall:' /etc/group &> /dev/null;then
groupadd -g 500 oinstall
fi
if ! id oracle &> /dev/null;then
useradd -s /bin/bash -u 500 -g 500 -m oracle
fi
echo "INFO:Check Env Success"
}

#配置docker信任
Config_Docker(){
if ! docker info | grep -w "${HARBOR_IP}" &> /dev/null;then
mkdir -p /etc/docker
if [[ -f /etc/docker/daemon.json ]];then
[[ ! -f /etc/docker/daemon.json.bak ]] && cp /etc/docker/daemon.json{,.bak}
fi
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
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}
}

#获取Oracle的初始化数据
Get_Oracle_Data(){
echo "INFO:Begin Get MySQL Data..."
local temp_container_name=$(date "+%Y%m%d%H%M")
docker run -itd --name ${temp_container_name} ${IMAGE_ADDR}
docker cp ${temp_container_name}:/home/oracle/app/oracle/oradata/helowin ${ORACLE_DATA_DIR}
cd ${ORACLE_DATA_DIR}
chown -R 500:500 helowin
docker rm -f ${temp_container_name}
}

#安装Oracle
Install_Oracle(){
Check_Env
Pull_Image
Get_Oracle_Data
echo "INFO:Begin Install Oracle..."
docker run -d --name ${ORACLE_CONTAINER_NAME} --restart unless-stopped \
-v ${ORACLE_DATA_DIR}/helowin:/home/oracle/app/oracle/oradata/helowin \
-p ${ORACLE_PORT}:1521 ${IMAGE_ADDR}

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

#卸载Oracle
Uninstall_Oracle(){
if docker ps -a | egrep -w "\b${ORACLE_CONTAINER_NAME}$" &> /dev/null;then
docker rm -f ${ORACLE_CONTAINER_NAME}
rm -rf ${ORACLE_DATA_DIR}
fi
if ! ss -nutlp | grep -w ":${ORACLE_PORT}\b" &> /dev/null;then
echo "INFO:Uninstall Oracle Success"
else
echo "INFO:Uninstall Oracle Fail" && exit 1
fi

}

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