@setlocal
@echo off
setlocal enabledelayedexpansion
REM program : win_redis_docker_start.bat
REM author : wangqijia@youzan.com
REM   date : 2020-02-17
REM version : 0.0.0.1
REM 声明采用UTF-8编码
chcp 65001

set SHUTDOWN_FLAG=0

:: 解析参数
if "%1"=="-h"  (
echo Usage:
echo -h: 打印帮助信息; 
echo -s: 停止本地redis容器服务;
goto :succ
)

if "%1"=="-s" set SHUTDOWN_FLAG=1

:: 检测安装Dockers信息
docker -v
if !errorlevel! == 0 (
echo 检测到已安装Docker!!
) else (
echo 检测到尚未安装Docker，请先安装Docker 
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
)

if !SHUTDOWN_FLAG! equ 1 (
docker ps | find "yz-redis"
if !errorlevel! == 0 (
docker stop yz-redis
echo redis组件容器服务已停止！
) else (
echo 本地redis容器组件服务尚未启动！
)
goto :succ
)

:: 安装并启动redis
echo 准备启动本地redis容器服务实例！

:: 检查redis镜像是否存在
docker images | find "hub-mirror.c.163.com/library/redis" | find "3.2"
if !errorlevel! neq 0 (
echo redis 3.2容器镜像不存在，请先下载redis镜像。
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
