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