From 46d0bbc3a6246008f81878663513b155b95e0ca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BA=9A=E6=98=95?= <1549469775@qq.com> Date: Tue, 26 Aug 2025 14:42:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20Windows=20=E5=92=8C=20Linu?= =?UTF-8?q?x=20=E7=89=88=E6=9C=AC=E7=9A=84=20Docker=20=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=EF=BC=8C=E6=94=AF=E6=8C=81=E9=95=9C=E5=83=8F?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E3=80=81=E5=AE=B9=E5=99=A8=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E3=80=81=E8=B5=84=E6=BA=90=E6=B8=85=E7=90=86=E5=8F=8A=E5=B8=AE?= =?UTF-8?q?=E5=8A=A9=E4=BF=A1=E6=81=AF=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/docker-build.bat | 121 +++++++++++++++++++++++++++++++++++++++++ scripts/docker-build.sh | 138 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 259 insertions(+) create mode 100644 scripts/docker-build.bat create mode 100644 scripts/docker-build.sh diff --git a/scripts/docker-build.bat b/scripts/docker-build.bat new file mode 100644 index 0000000..33ef60d --- /dev/null +++ b/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 diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh new file mode 100644 index 0000000..02d5d5c --- /dev/null +++ b/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 "$@"