sanpang commited on
Commit
d82b1ee
·
1 Parent(s): 97ad7c6

optimization shell

Browse files
Files changed (1) hide show
  1. .container/build_docker.sh +116 -18
.container/build_docker.sh CHANGED
@@ -1,41 +1,139 @@
1
  #!/bin/bash
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  # 检测操作系统类型
4
  OS_TYPE=$(uname -s)
5
  echo "检测到操作系统: $OS_TYPE"
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  # 设置Docker BuildKit环境变量
8
  export DOCKER_BUILDKIT=1
9
  export COMPOSE_DOCKER_CLI_BUILD=1
10
 
11
  echo "启用Docker BuildKit加速构建..."
12
 
 
 
 
 
 
 
13
  # 创建缓存目录
14
- mkdir -p .docker-cache/pip
15
-
16
- # 根据操作系统类型执行不同的命令
17
- if [[ "$OS_TYPE" == "Darwin" ]]; then
18
- # macOS
19
- echo "在macOS上构建Docker镜像..."
20
- docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1
21
- elif [[ "$OS_TYPE" == "Linux" ]]; then
22
- # Linux
23
- echo "在Linux上构建Docker镜像..."
24
- docker-compose build --parallel --build-arg BUILDKIT_INLINE_CACHE=1
25
- elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
26
- # Windows
27
- echo "在Windows上构建Docker镜像..."
28
- docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1
29
  else
30
- echo "未知操作系统,尝试使用标准命令构建..."
31
- docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1
32
  fi
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  # 检查构建结果
35
  if [ $? -eq 0 ]; then
36
  echo "Docker镜像构建成功!"
 
37
  echo "可以使用以下命令启动容器:"
38
- echo "docker-compose up -d"
39
  else
40
  echo "Docker镜像构建失败,请检查错误信息。"
 
41
  fi
 
1
  #!/bin/bash
2
 
3
+ # 设置配置变量
4
+ CACHE_DIR=".docker-cache/pip"
5
+ BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1"
6
+ COMPOSE_FILE="docker-compose.yml"
7
+ CLEAN_CACHE=0
8
+ REBUILD=0
9
+ SERVICE=""
10
+
11
+ # 解析命令行参数
12
+ while [[ $# -gt 0 ]]; do
13
+ case "$1" in
14
+ --clean)
15
+ CLEAN_CACHE=1
16
+ shift
17
+ ;;
18
+ --rebuild)
19
+ REBUILD=1
20
+ shift
21
+ ;;
22
+ --service)
23
+ SERVICE="$2"
24
+ shift 2
25
+ ;;
26
+ --help)
27
+ echo "用法: ./build_docker.sh [选项]"
28
+ echo "选项:"
29
+ echo " --clean 清理缓存目录"
30
+ echo " --rebuild 强制重新构建镜像"
31
+ echo " --service 指定要构建的服务名称"
32
+ echo " --help 显示此帮助信息"
33
+ exit 0
34
+ ;;
35
+ *)
36
+ echo "未知选项: $1"
37
+ echo "使用 --help 查看帮助"
38
+ exit 1
39
+ ;;
40
+ esac
41
+ done
42
+
43
  # 检测操作系统类型
44
  OS_TYPE=$(uname -s)
45
  echo "检测到操作系统: $OS_TYPE"
46
 
47
+ # 检查Docker是否安装
48
+ if ! command -v docker &> /dev/null; then
49
+ echo "错误: Docker未安装"
50
+ echo "请先安装Docker: https://docs.docker.com/get-docker/"
51
+ exit 1
52
+ fi
53
+
54
+ # 检查Docker是否运行
55
+ if ! docker info &> /dev/null; then
56
+ echo "错误: Docker未运行"
57
+ echo "请启动Docker服务"
58
+ exit 1
59
+ fi
60
+
61
+ # 检查docker-compose.yml文件是否存在
62
+ if [ ! -f "$COMPOSE_FILE" ]; then
63
+ echo "错误: 未找到$COMPOSE_FILE文件"
64
+ echo "请确保在正确的目录中运行此脚本"
65
+ exit 1
66
+ fi
67
+
68
+ # 检查Docker Compose命令
69
+ if command -v docker-compose &> /dev/null; then
70
+ COMPOSE_CMD="docker-compose"
71
+ elif docker compose version &> /dev/null; then
72
+ COMPOSE_CMD="docker compose"
73
+ else
74
+ echo "错误: 未找到Docker Compose命令"
75
+ exit 1
76
+ fi
77
+
78
  # 设置Docker BuildKit环境变量
79
  export DOCKER_BUILDKIT=1
80
  export COMPOSE_DOCKER_CLI_BUILD=1
81
 
82
  echo "启用Docker BuildKit加速构建..."
83
 
84
+ # 清理缓存(如果指定)
85
+ if [ $CLEAN_CACHE -eq 1 ]; then
86
+ echo "清理缓存目录..."
87
+ rm -rf "$CACHE_DIR"
88
+ fi
89
+
90
  # 创建缓存目录
91
+ mkdir -p "$CACHE_DIR"
92
+
93
+ # 添加构建时间标记
94
+ BUILD_TIME=$(date +"%Y%m%d_%H%M%S")
95
+ BUILD_ARGS="$BUILD_ARGS --build-arg BUILD_TIME=$BUILD_TIME"
96
+
97
+ # 检测CPU核心数,用于并行构建
98
+ CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2)
99
+ if [ $CPU_CORES -gt 2 ]; then
100
+ PARALLEL_FLAG="--parallel"
101
+ echo "检测到$CPU_CORES个CPU核心,启用并行构建..."
 
 
 
 
102
  else
103
+ PARALLEL_FLAG=""
 
104
  fi
105
 
106
+ # 构建Docker镜像
107
+ echo "开始构建Docker镜像..."
108
+
109
+ # 构建命令基础部分
110
+ BUILD_CMD="$COMPOSE_CMD build $PARALLEL_FLAG $BUILD_ARGS"
111
+
112
+ # 添加重新构建选项
113
+ if [ $REBUILD -eq 1 ]; then
114
+ BUILD_CMD="$BUILD_CMD --no-cache"
115
+ echo "强制重新构建镜像..."
116
+ fi
117
+
118
+ # 添加服务名称(如果指定)
119
+ if [ ! -z "$SERVICE" ]; then
120
+ BUILD_CMD="$BUILD_CMD $SERVICE"
121
+ echo "构建服务: $SERVICE"
122
+ else
123
+ echo "构建所有服务"
124
+ fi
125
+
126
+ # 执行构建命令
127
+ echo "执行: $BUILD_CMD"
128
+ $BUILD_CMD
129
+
130
  # 检查构建结果
131
  if [ $? -eq 0 ]; then
132
  echo "Docker镜像构建成功!"
133
+ echo "构建时间: $BUILD_TIME"
134
  echo "可以使用以下命令启动容器:"
135
+ echo "$COMPOSE_CMD up -d"
136
  else
137
  echo "Docker镜像构建失败,请检查错误信息。"
138
+ exit 1
139
  fi