Files
owl/.container/build_docker.sh
2025-03-09 02:37:06 +00:00

150 lines
4.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 设置配置变量
CACHE_DIR=".docker-cache/pip"
BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1"
COMPOSE_FILE="docker-compose.yml"
CLEAN_CACHE=0
REBUILD=0
SERVICE=""
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case "$1" in
--clean)
CLEAN_CACHE=1
shift
;;
--rebuild)
REBUILD=1
shift
;;
--service)
SERVICE="$2"
shift 2
;;
--help)
echo "用法: ./build_docker.sh [选项]"
echo "选项:"
echo " --clean 清理缓存目录"
echo " --rebuild 强制重新构建镜像"
echo " --service 指定要构建的服务名称"
echo " --help 显示此帮助信息"
exit 0
;;
*)
echo "未知选项: $1"
echo "使用 --help 查看帮助"
exit 1
;;
esac
done
# 检测操作系统类型
OS_TYPE=$(uname -s)
echo "检测到操作系统: $OS_TYPE"
# 检查Docker是否安装
if ! command -v docker &> /dev/null; then
echo "错误: Docker未安装"
echo "请先安装Docker: https://docs.docker.com/get-docker/"
exit 1
fi
# 检查Docker是否运行
if ! docker info &> /dev/null; then
echo "错误: Docker未运行"
echo "请启动Docker服务"
exit 1
fi
# 检查docker-compose.yml文件是否存在
if [ ! -f "$COMPOSE_FILE" ]; then
echo "错误: 未找到$COMPOSE_FILE文件"
echo "请确保在正确的目录中运行此脚本"
exit 1
fi
# 设置Docker BuildKit环境变量
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
echo "启用Docker BuildKit加速构建..."
# 清理缓存(如果指定)
if [ $CLEAN_CACHE -eq 1 ]; then
echo "清理缓存目录..."
rm -rf "$CACHE_DIR"
fi
# 创建缓存目录
mkdir -p "$CACHE_DIR"
# 添加构建时间标记
BUILD_TIME=$(date +"%Y%m%d_%H%M%S")
BUILD_ARGS="$BUILD_ARGS --build-arg BUILD_TIME=$BUILD_TIME"
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 获取项目根目录(脚本所在目录的父目录)
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "脚本目录: $SCRIPT_DIR"
echo "项目根目录: $PROJECT_ROOT"
# 切换到项目根目录
cd "$PROJECT_ROOT"
# 检查Docker Compose命令
if command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
echo "使用 docker-compose 命令"
elif docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
echo "使用 docker compose 命令"
else
echo "错误: 未找到Docker Compose命令"
echo "请安装Docker Compose: https://docs.docker.com/compose/install/"
exit 1
fi
# 检测CPU核心数用于并行构建
CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2)
if [ $CPU_CORES -gt 2 ]; then
PARALLEL_FLAG="--parallel"
echo "检测到${CPU_CORES}个CPU核心启用并行构建..."
else
PARALLEL_FLAG=""
fi
# 构建命令基础部分
BUILD_CMD="$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" build $PARALLEL_FLAG --build-arg BUILDKIT_INLINE_CACHE=1"
# 根据操作系统类型执行不同的命令
if [[ "$OS_TYPE" == "Darwin" ]]; then
# macOS
echo "在macOS上构建Docker镜像..."
eval $BUILD_CMD
elif [[ "$OS_TYPE" == "Linux" ]]; then
# Linux
echo "在Linux上构建Docker镜像..."
eval $BUILD_CMD
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
# Windows
echo "在Windows上构建Docker镜像..."
eval $BUILD_CMD
else
echo "未知操作系统,尝试使用标准命令构建..."
eval $BUILD_CMD
fi
# 检查构建结果
if [ $? -eq 0 ]; then
echo "Docker镜像构建成功"
echo "构建时间: $BUILD_TIME"
echo "可以使用以下命令启动容器:"
echo "$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" up -d"
else
echo "Docker镜像构建失败请检查错误信息。"
exit 1
fi