You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

121 lines
2.8 KiB

@echo off
setlocal enabledelayedexpansion
REM Docker构建脚本 (Windows版本)
set "SCRIPT_NAME=%~n0"
REM 颜色定义 (Windows CMD不支持ANSI颜色,但保留结构)
set "RED=[ERROR]"
set "GREEN=[INFO]"
set "YELLOW=[WARNING]"
REM 打印带标签的消息
:print_message
echo %GREEN% %~1
goto :eof
:print_warning
echo %YELLOW% %~1
goto :eof
:print_error
echo %RED% %~1
goto :eof
REM 检查Docker是否运行
:check_docker
docker info >nul 2>&1
if errorlevel 1 (
call :print_error "Docker未运行,请启动Docker服务"
exit /b 1
)
goto :eof
REM 清理旧的镜像和容器
:cleanup
call :print_message "清理旧的Docker资源..."
docker system prune -f
goto :eof
REM 构建镜像
:build_image
set "tag=%~1"
if "%tag%"=="" set "tag=koa3-demo:latest"
call :print_message "构建Docker镜像: %tag%"
docker build --target production --tag "%tag%" --build-arg BUILDKIT_INLINE_CACHE=1 .
if errorlevel 1 (
call :print_error "镜像构建失败"
exit /b 1
)
call :print_message "镜像构建成功: %tag%"
goto :eof
REM 运行容器
:run_container
set "tag=%~1"
if "%tag%"=="" set "tag=koa3-demo:latest"
call :print_message "启动容器..."
docker run -d --name koa3-demo --publish 3000:3000 --volume "%cd%\database:/app/database" --volume "%cd%\logs:/app/logs" --env NODE_ENV=production --env BUN_ENV=production --env PORT=3000 "%tag%"
if errorlevel 1 (
call :print_error "容器启动失败"
exit /b 1
)
call :print_message "容器启动成功"
call :print_message "应用运行在: http://localhost:3000"
goto :eof
REM 使用docker-compose
:use_compose
call :print_message "使用docker-compose启动服务..."
docker-compose up -d --build
if errorlevel 1 (
call :print_error "服务启动失败"
exit /b 1
)
call :print_message "服务启动成功"
call :print_message "应用运行在: http://localhost:3000"
goto :eof
REM 显示帮助信息
:show_help
echo 用法: %SCRIPT_NAME% [选项]
echo.
echo 选项:
echo build [tag] 构建Docker镜像
echo run [tag] 运行容器
echo compose 使用docker-compose启动服务
echo cleanup 清理Docker资源
echo help 显示此帮助信息
echo.
echo 示例:
echo %SCRIPT_NAME% build 构建镜像
echo %SCRIPT_NAME% build v1.0 构建带标签的镜像
echo %SCRIPT_NAME% run 运行容器
echo %SCRIPT_NAME% compose 使用docker-compose启动
goto :eof
REM 主函数
:main
call :check_docker
if errorlevel 1 exit /b 1
set "action=%~1"
if "%action%"=="" set "action=help"
if "%action%"=="build" (
call :build_image "%~2"
) else if "%action%"=="run" (
call :run_container "%~2"
) else if "%action%"=="compose" (
call :use_compose
) else if "%action%"=="cleanup" (
call :cleanup
) else if "%action%"=="help" (
call :show_help
) else (
call :show_help
)
exit /b 0