File size: 3,495 Bytes
b9d9271
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
@echo off
setlocal enabledelayedexpansion

echo 在Windows上构建Docker镜像...

REM 设置配置变量
set CACHE_DIR=.docker-cache\pip
set BUILD_ARGS=--build-arg BUILDKIT_INLINE_CACHE=1
set COMPOSE_FILE=docker-compose.yml

REM 解析命令行参数
set CLEAN_CACHE=0
set REBUILD=0
set SERVICE=

:parse_args
if "%~1"=="" goto :end_parse_args
if /i "%~1"=="--clean" (
    set CLEAN_CACHE=1
    shift
    goto :parse_args
)
if /i "%~1"=="--rebuild" (
    set REBUILD=1
    shift
    goto :parse_args
)
if /i "%~1"=="--service" (
    set SERVICE=%~2
    shift
    shift
    goto :parse_args
)
if /i "%~1"=="--help" (
    echo 用法: build_docker.bat [选项]
    echo 选项:
    echo   --clean     清理缓存目录
    echo   --rebuild   强制重新构建镜像
    echo   --service   指定要构建的服务名称
    echo   --help      显示此帮助信息
    exit /b 0
)
shift
goto :parse_args
:end_parse_args

REM 检查Docker是否安装
where docker >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
    echo 错误: Docker未安装
    echo 请先安装Docker Desktop: https://docs.docker.com/desktop/install/windows-install/
    pause
    exit /b 1
)

REM 检查Docker是否运行
docker info >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
    echo 错误: Docker未运行
    echo 请启动Docker Desktop应用程序
    pause
    exit /b 1
)

REM 检查docker-compose.yml文件是否存在
if not exist "%COMPOSE_FILE%" (
    echo 错误: 未找到%COMPOSE_FILE%文件
    echo 请确保在正确的目录中运行此脚本
    pause
    exit /b 1
)

REM 检查Docker Compose命令
where docker-compose >nul 2>nul
if %ERRORLEVEL% EQU 0 (
    set COMPOSE_CMD=docker-compose
) else (
    echo 尝试使用新的docker compose命令...
    docker compose version >nul 2>nul
    if %ERRORLEVEL% EQU 0 (
        set COMPOSE_CMD=docker compose
    ) else (
        echo 错误: 未找到Docker Compose命令
        echo 请确保Docker Desktop已正确安装
        pause
        exit /b 1
    )
)

REM 设置Docker BuildKit环境变量
set DOCKER_BUILDKIT=1
set COMPOSE_DOCKER_CLI_BUILD=1

echo 启用Docker BuildKit加速构建...

REM 清理缓存(如果指定)
if %CLEAN_CACHE% EQU 1 (
    echo 清理缓存目录...
    if exist "%CACHE_DIR%" rmdir /s /q "%CACHE_DIR%"
)

REM 创建缓存目录
if not exist "%CACHE_DIR%" (
    echo 创建缓存目录...
    mkdir "%CACHE_DIR%"
)

REM 添加构建时间标记
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YEAR=%dt:~0,4%"
set "MONTH=%dt:~4,2%"
set "DAY=%dt:~6,2%"
set "HOUR=%dt:~8,2%"
set "MINUTE=%dt:~10,2%"
set "BUILD_TIME=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%"
set "BUILD_ARGS=%BUILD_ARGS% --build-arg BUILD_TIME=%BUILD_TIME%"

REM 构建Docker镜像
echo 开始构建Docker镜像...

if "%SERVICE%"=="" (
    if %REBUILD% EQU 1 (
        echo 强制重新构建所有服务...
        %COMPOSE_CMD% build --no-cache %BUILD_ARGS%
    ) else (
        %COMPOSE_CMD% build %BUILD_ARGS%
    )
) else (
    if %REBUILD% EQU 1 (
        echo 强制重新构建服务 %SERVICE%...
        %COMPOSE_CMD% build --no-cache %BUILD_ARGS% %SERVICE%
    ) else (
        echo 构建服务 %SERVICE%...
        %COMPOSE_CMD% build %BUILD_ARGS% %SERVICE%
    )
)

if %ERRORLEVEL% EQU 0 (
    echo Docker镜像构建成功!
    echo 构建时间: %BUILD_TIME%
    echo 可以使用以下命令启动容器:
    echo %COMPOSE_CMD% up -d
) else (
    echo Docker镜像构建失败,请检查错误信息。
)

pause