optimization shell
Browse files- .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
|
15 |
-
|
16 |
-
#
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
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 |
-
|
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 "
|
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
|