File size: 5,749 Bytes
5d9f8de b7e41c5 d82b1ee 78760a2 b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 5d9f8de b7e41c5 5d9f8de b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 5d9f8de b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 d82b1ee b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 d82b1ee b7e41c5 5d9f8de d82b1ee 5d9f8de b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 b7e41c5 74dc4e9 d82b1ee b7e41c5 74dc4e9 d82b1ee b7e41c5 5d9f8de b7e41c5 74dc4e9 5d9f8de b7e41c5 d82b1ee b7e41c5 |
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 148 149 150 |
#!/bin/bash
# 设置配置变量 | Set configuration variables
CACHE_DIR=".docker-cache/pip"
BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1"
COMPOSE_FILE="docker-compose.yml"
CLEAN_CACHE=0
REBUILD=0
SERVICE=""
# 设置Docker BuildKit环境变量 | Set Docker BuildKit environment variables
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
# 解析命令行参数 | Parse command line arguments
while [[ $# -gt 0 ]]; do
case "$1" in
--clean)
CLEAN_CACHE=1
shift
;;
--rebuild)
REBUILD=1
shift
;;
--service)
SERVICE="$2"
shift 2
;;
--help)
echo "用法 | Usage: ./build_docker.sh [选项 | options]"
echo "选项 | Options:"
echo " --clean 清理缓存目录 | Clean cache directory"
echo " --rebuild 强制重新构建镜像 | Force rebuild image"
echo " --service 指定要构建的服务名称 | Specify service name to build"
echo " --help 显示此帮助信息 | Show this help message"
exit 0
;;
*)
echo "未知选项 | Unknown option: $1"
echo "使用 --help 查看帮助 | Use --help to see help"
exit 1
;;
esac
done
# 检测操作系统类型 | Detect operating system type
OS_TYPE=$(uname -s)
echo "检测到操作系统 | Detected OS: $OS_TYPE"
# 检查Docker是否安装 | Check if Docker is installed
if ! command -v docker &> /dev/null; then
echo "错误 | Error: Docker未安装 | Docker not installed"
echo "请先安装Docker | Please install Docker first: https://docs.docker.com/get-docker/"
exit 1
fi
# 检查Docker是否运行 | Check if Docker is running
if ! docker info &> /dev/null; then
echo "错误 | Error: Docker未运行 | Docker not running"
echo "请启动Docker服务 | Please start Docker service"
exit 1
fi
# 检查docker-compose.yml文件是否存在 | Check if docker-compose.yml file exists
if [ ! -f "$COMPOSE_FILE" ]; then
echo "错误 | Error: 未找到$COMPOSE_FILE文件 | $COMPOSE_FILE file not found"
echo "请确保在正确的目录中运行此脚本 | Please make sure you are running this script in the correct directory"
exit 1
fi
echo "启用Docker BuildKit加速构建... | Enabling Docker BuildKit to accelerate build..."
# 清理缓存(如果指定) | Clean cache (if specified)
if [ $CLEAN_CACHE -eq 1 ]; then
echo "清理缓存目录... | Cleaning cache directory..."
rm -rf "$CACHE_DIR"
fi
# 创建缓存目录 | Create cache directory
mkdir -p "$CACHE_DIR"
# 添加构建时间标记 | Add build time tag
BUILD_TIME=$(date +"%Y%m%d_%H%M%S")
BUILD_ARGS="$BUILD_ARGS --build-arg BUILD_TIME=$BUILD_TIME"
# 获取脚本所在目录 | Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 获取项目根目录(脚本所在目录的父目录) | Get project root directory (parent directory of script directory)
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "脚本目录 | Script directory: $SCRIPT_DIR"
echo "项目根目录 | Project root directory: $PROJECT_ROOT"
# 切换到项目根目录 | Change to project root directory
cd "$PROJECT_ROOT"
# 检查Docker Compose命令 | Check Docker Compose command
if command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
echo "使用 docker-compose 命令 | Using docker-compose command"
elif docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
echo "使用 docker compose 命令 | Using docker compose command"
else
echo "错误 | Error: 未找到Docker Compose命令 | Docker Compose command not found"
echo "请安装Docker Compose | Please install Docker Compose: https://docs.docker.com/compose/install/"
exit 1
fi
# 检测CPU核心数,用于并行构建 | Detect CPU cores for parallel build
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核心,启用并行构建... | Detected ${CPU_CORES} CPU cores, enabling parallel build..."
else
PARALLEL_FLAG=""
fi
# 构建命令基础部分 | Base part of build command
BUILD_CMD="$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" build $PARALLEL_FLAG --build-arg BUILDKIT_INLINE_CACHE=1"
# 根据操作系统类型执行不同的命令 | Execute different commands based on OS type
if [[ "$OS_TYPE" == "Darwin" ]]; then
# macOS
echo "在macOS上构建Docker镜像... | Building Docker image on macOS..."
eval $BUILD_CMD
elif [[ "$OS_TYPE" == "Linux" ]]; then
# Linux
echo "在Linux上构建Docker镜像... | Building Docker image on Linux..."
eval $BUILD_CMD
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
# Windows
echo "在Windows上构建Docker镜像... | Building Docker image on Windows..."
eval $BUILD_CMD
else
echo "未知操作系统,尝试使用标准命令构建... | Unknown OS, trying to build with standard command..."
eval $BUILD_CMD
fi
# 检查构建结果 | Check build result
if [ $? -eq 0 ]; then
echo "Docker镜像构建成功! | Docker image build successful!"
echo "构建时间 | Build time: $BUILD_TIME"
echo "可以使用以下命令启动容器: | You can use the following command to start the container:"
echo "$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" up -d"
else
echo "Docker镜像构建失败,请检查错误信息。 | Docker image build failed, please check error messages."
exit 1
fi |