@setlocal
@echo off
setlocal enabledelayedexpansion
REM program : install_docker_server.sh
REM author : wangqijia@youzan.com
REM   date : 2020-02-17
REM version : 0.0.0.1
REM 声明采用UTF-8编码
chcp 65001

set INSTALL_MYSQL_FLAG=1
set INSTALL_REDIS_FLAG=1

echo 中文

:: 解析参数
if "%1"=="-h"  (
echo Usage:
echo -h: 打印帮助信息; 
echo -a: 安装并运行所有组件; 
echo -m: 安装并运行mysql;
echo -r: 安装并运行 redis; 
goto :succ
)

if "%1"=="-a" (
echo 安装所有组件容器
)

if "%1"=="-r" set INSTALL_MYSQL_FLAG=0

if "%1"=="-m" set INSTALL_REDIS_FLAG=0

if !INSTALL_MYSQL_FLAG! equ 1 echo "安装并运行mysql~"
if !INSTALL_REDIS_FLAG! equ 1 echo "安装并运行redis~"

:: 检测安装Dockers信息
docker -v
if !errorlevel! == 0 (
echo 检测到已安装Docker!!
) else (
echo 检测到尚未安装Docker，请先安装Dockers，参考文档xxx 
goto :fail
)

:: 检查Docker版本信息
set MIN_DOCKER_VERSION="17.03"
for /f "tokens=3 delims= " %%i in ('docker -v') do ( set docker_ver=%%i)
set docker_version=!docker_ver:~0,-1!

if !docker_version! geq %MIN_DOCKER_VERSION% (
echo 当前Docker版本：!docker_version!
) else (
echo 当前Docker版本太低，请先升级，最低版本要求: %MIN_DOCKER_VERSION%
goto :fail
)
:: 安装并启动mysql
if !INSTALL_MYSQL_FLAG! equ 1 (
echo 准备本地安装mysql容器服务实例！

:: 拉取mysql镜像
docker pull hub-mirror.c.163.com/library/mysql:5.6
if !errorlevel! == 0 (
echo 拉取mysql 5.6镜像成功！
) else (
echo 拉取mysql镜像失败，请检查网络连接并启用docker镜像加速功能，详见文档xxx。
goto :fail
)

:: 检查mysql容器服务是否已启动
docker ps | find "yz-mysql"
if !errorlevel! == 0 (
echo mysql组件容器服务已启动！
) else (
:: 检查mysql容器是否已创建
docker ps -a | find "yz-mysql"
if !errorlevel! == 0 (
echo mysql组件容器服务已创建，尚未启动！
:: 重启mysql容器
docker start yz-mysql
if !errorlevel! == 0 (
echo mysql组件容器服务重新启动成功！
) else (
echo mysql组件容器启动失败！。
goto :fail
)

) else (
::创建并启动mysql组件容器
echo 准备创建并启动mysql组件容器服务...
docker run -d --name yz-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 hub-mirror.c.163.com/library/mysql:5.6
if !errorlevel! == 0 (
echo 创建并启动mysql组件容器成功！！！
) else (
echo mysql组件容器创建并启动失败！
goto :fail
)
)
)

:: 等待10s
ping -n 10 127.0.0.1 > nul

echo 检查mysql容器是否成功...
for /l %%i in (1, 1, 10) do (
echo try %%i
for /f "delims= " %%j in ( 'docker inspect -f "{{.Id}}" yz-mysql' ) do ( set yz_mysql_id=%%j )
echo !yz_mysql_id!
docker exec -t !yz_mysql_id! mysql -h localhost -uroot -p123456 -e "show databases;"
if !errorlevel! == 0 (
echo mysql容器服务检测OK！！！
:: 创建测试数据库yztest
docker exec -t !yz_mysql_id! mysql -h localhost -uroot -p123456 -e "Create Database If Not Exists yztest Character Set UTF8;"
if !errorlevel! == 0 (
echo mysql创建测试数据库yztest OK！！！
) else (
echo mysql创建测试数据库yztest失败！
goto :fail
)
goto :mysql_done
) 
:: 等待3s
ping -n 3 127.0.0.1 > nul
if %%i equ 6 (
echo mysql组件服务检测失败！
goto :fail
)
)

:mysql_done
:: 输出mysql启动信息
echo mysql  Ver 14.14 Distrib 5.6.47
echo mysql连接信息：host主机:localhost，端口:3306，密码：123456
echo 连接串: mysql -h localhost -uroot -p123456
)

:: 安装并启动redis
if !INSTALL_REDIS_FLAG! equ 1 (
echo 准备本地安装redis容器服务实例！

:: 拉取redis镜像
docker pull hub-mirror.c.163.com/library/redis:3.2
if !errorlevel! == 0 (
echo 拉取redis 3.2镜像成功！
) else (
echo 拉取redis 3.2镜像失败，请检查网络连接并启用docker镜像加速功能，详见文档xxx。
goto :fail
)

:: 检查mysql容器服务是否已启动
docker ps | find "yz-redis"
if !errorlevel! == 0 (
echo redis组件容器服务已启动！
) else (
:: 检查redis容器是否已创建
docker ps -a | find "yz-redis"
if !errorlevel! == 0 (
echo redis组件容器服务已创建，尚未启动！
:: 重启redis容器
docker start yz-redis
if !errorlevel! == 0 (
echo redis组件容器服务重新启动成功！
) else (
echo redis组件容器启动失败！。
goto :fail
)

) else (
::创建并启动redis组件容器
echo 准备创建并启动redis组件容器服务...
docker run -d -p 6379:6379  --name yz-redis hub-mirror.c.163.com/library/redis:3.2 redis-server --appendonly yes
if !errorlevel! == 0 (
echo 创建并启动redis组件容器成功！！！
) else (
echo redis组件容器创建并启动失败！
goto :fail
)
)
)

:: 等待10s
ping -n 10 127.0.0.1 > nul

echo 检查redis容器是否成功...
for /l %%j in (1,1,10) do (
for /f "delims= " %%j in ( 'docker inspect -f "{{.Id}}" yz-redis' ) do ( set yz_redis_id=%%j)
echo !yz_redis_id!
:: docker exec -it !yz_redis_id! redis-cli ping
for /f "delims= " %%p in ( 'docker exec -t  !yz_redis_id! redis-cli ping' ) do ( set yz_redis_ping=%%p)
echo !yz_redis_ping!
if "!yz_redis_ping!" == "PONG" (
echo redis容器服务检测OK！！！
goto :redis_done
) 
:: 等待3s
ping -n 3 127.0.0.1 > nul
if %%j equ 6 (
echo redis组件服务检测失败！
goto :fail
)
)

:redis_done
:: 输出redis启动信息
echo redis 3.2.12
echo redis连接信息：host主机:localhost，端口:6379
)

:succ
exit /B 0

:fail
exit /B 1

:: pause
