2 changed files with 259 additions and 0 deletions
@ -0,0 +1,121 @@ |
|||||
|
@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 |
@ -0,0 +1,138 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
# Docker构建脚本 |
||||
|
set -e |
||||
|
|
||||
|
# 颜色定义 |
||||
|
RED='\033[0;31m' |
||||
|
GREEN='\033[0;32m' |
||||
|
YELLOW='\033[1;33m' |
||||
|
NC='\033[0m' # No Color |
||||
|
|
||||
|
# 打印带颜色的消息 |
||||
|
print_message() { |
||||
|
echo -e "${GREEN}[INFO]${NC} $1" |
||||
|
} |
||||
|
|
||||
|
print_warning() { |
||||
|
echo -e "${YELLOW}[WARNING]${NC} $1" |
||||
|
} |
||||
|
|
||||
|
print_error() { |
||||
|
echo -e "${RED}[ERROR]${NC} $1" |
||||
|
} |
||||
|
|
||||
|
# 检查Docker是否运行 |
||||
|
check_docker() { |
||||
|
if ! docker info > /dev/null 2>&1; then |
||||
|
print_error "Docker未运行,请启动Docker服务" |
||||
|
exit 1 |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# 清理旧的镜像和容器 |
||||
|
cleanup() { |
||||
|
print_message "清理旧的Docker资源..." |
||||
|
docker system prune -f |
||||
|
} |
||||
|
|
||||
|
# 构建镜像 |
||||
|
build_image() { |
||||
|
local tag=${1:-"koa3-demo:latest"} |
||||
|
print_message "构建Docker镜像: $tag" |
||||
|
|
||||
|
docker build \ |
||||
|
--target production \ |
||||
|
--tag "$tag" \ |
||||
|
--build-arg BUILDKIT_INLINE_CACHE=1 \ |
||||
|
. |
||||
|
|
||||
|
if [ $? -eq 0 ]; then |
||||
|
print_message "镜像构建成功: $tag" |
||||
|
else |
||||
|
print_error "镜像构建失败" |
||||
|
exit 1 |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# 运行容器 |
||||
|
run_container() { |
||||
|
local tag=${1:-"koa3-demo:latest"} |
||||
|
print_message "启动容器..." |
||||
|
|
||||
|
docker run -d \ |
||||
|
--name koa3-demo \ |
||||
|
--publish 3000:3000 \ |
||||
|
--volume "$(pwd)/database:/app/database" \ |
||||
|
--volume "$(pwd)/logs:/app/logs" \ |
||||
|
--env NODE_ENV=production \ |
||||
|
--env BUN_ENV=production \ |
||||
|
--env PORT=3000 \ |
||||
|
"$tag" |
||||
|
|
||||
|
if [ $? -eq 0 ]; then |
||||
|
print_message "容器启动成功" |
||||
|
print_message "应用运行在: http://localhost:3000" |
||||
|
else |
||||
|
print_error "容器启动失败" |
||||
|
exit 1 |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# 使用docker-compose |
||||
|
use_compose() { |
||||
|
print_message "使用docker-compose启动服务..." |
||||
|
docker-compose up -d --build |
||||
|
|
||||
|
if [ $? -eq 0 ]; then |
||||
|
print_message "服务启动成功" |
||||
|
print_message "应用运行在: http://localhost:3000" |
||||
|
else |
||||
|
print_error "服务启动失败" |
||||
|
exit 1 |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# 显示帮助信息 |
||||
|
show_help() { |
||||
|
echo "用法: $0 [选项]" |
||||
|
echo "" |
||||
|
echo "选项:" |
||||
|
echo " build [tag] 构建Docker镜像" |
||||
|
echo " run [tag] 运行容器" |
||||
|
echo " compose 使用docker-compose启动服务" |
||||
|
echo " cleanup 清理Docker资源" |
||||
|
echo " help 显示此帮助信息" |
||||
|
echo "" |
||||
|
echo "示例:" |
||||
|
echo " $0 build 构建镜像" |
||||
|
echo " $0 build v1.0 构建带标签的镜像" |
||||
|
echo " $0 run 运行容器" |
||||
|
echo " $0 compose 使用docker-compose启动" |
||||
|
} |
||||
|
|
||||
|
# 主函数 |
||||
|
main() { |
||||
|
check_docker |
||||
|
|
||||
|
case "${1:-help}" in |
||||
|
"build") |
||||
|
build_image "$2" |
||||
|
;; |
||||
|
"run") |
||||
|
run_container "$2" |
||||
|
;; |
||||
|
"compose") |
||||
|
use_compose |
||||
|
;; |
||||
|
"cleanup") |
||||
|
cleanup |
||||
|
;; |
||||
|
"help"|*) |
||||
|
show_help |
||||
|
;; |
||||
|
esac |
||||
|
} |
||||
|
|
||||
|
# 执行主函数 |
||||
|
main "$@" |
Loading…
Reference in new issue