Browse Source

新增 Windows 和 Linux 版本的 Docker 构建脚本,支持镜像构建、容器运行、资源清理及帮助信息显示

feat/collect
谢亚昕 1 day ago
parent
commit
46d0bbc3a6
  1. 121
      scripts/docker-build.bat
  2. 138
      scripts/docker-build.sh

121
scripts/docker-build.bat

@ -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

138
scripts/docker-build.sh

@ -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…
Cancel
Save