#!/bin/bash # 后端Docker镜像构建脚本 # 用于构建若依后端应用的Docker镜像 set -e # 遇到错误立即退出 # 脚本配置 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" IMAGE_NAME="anxin-backend" IMAGE_TAG="latest" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 显示帮助信息 show_help() { cat << EOF 后端Docker镜像构建脚本 用法: $0 [选项] 选项: -t, --tag TAG 设置镜像标签 (默认: latest) -n, --name NAME 设置镜像名称 (默认: anxin-backend) --no-cache 不使用缓存构建 --clean 构建前清理Maven缓存 -h, --help 显示此帮助信息 示例: $0 # 使用默认设置构建 $0 -t v1.0.0 # 构建并标记为v1.0.0 $0 --no-cache # 不使用缓存构建 $0 --clean -t dev # 清理后构建dev版本 EOF } # 解析命令行参数 parse_args() { while [[ $# -gt 0 ]]; do case $1 in -t|--tag) IMAGE_TAG="$2" shift 2 ;; -n|--name) IMAGE_NAME="$2" shift 2 ;; --no-cache) NO_CACHE="--no-cache" shift ;; --clean) CLEAN_BUILD=true shift ;; -h|--help) show_help exit 0 ;; *) log_error "未知参数: $1" show_help exit 1 ;; esac done } # 检查Docker是否可用 check_docker() { if ! command -v docker &> /dev/null; then log_error "Docker未安装或不在PATH中" exit 1 fi if ! docker info &> /dev/null; then log_error "Docker守护进程未运行" exit 1 fi } # 清理Maven缓存 clean_maven() { if [[ "$CLEAN_BUILD" == "true" ]]; then log_info "清理Maven缓存..." cd "$PROJECT_ROOT" if command -v mvn &> /dev/null; then mvn clean else log_warning "Maven未安装,跳过清理步骤" fi fi } # 构建Docker镜像 build_image() { log_info "开始构建Docker镜像..." log_info "项目根目录: $PROJECT_ROOT" log_info "镜像名称: $IMAGE_NAME:$IMAGE_TAG" cd "$PROJECT_ROOT" # 构建命令 BUILD_CMD="docker build -f docker/backend/Dockerfile -t $IMAGE_NAME:$IMAGE_TAG $NO_CACHE ." log_info "执行构建命令: $BUILD_CMD" if eval "$BUILD_CMD"; then log_success "Docker镜像构建成功: $IMAGE_NAME:$IMAGE_TAG" else log_error "Docker镜像构建失败" exit 1 fi } # 显示镜像信息 show_image_info() { log_info "镜像信息:" docker images "$IMAGE_NAME:$IMAGE_TAG" --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}" } # 主函数 main() { log_info "开始构建若依后端Docker镜像..." parse_args "$@" check_docker clean_maven build_image show_image_info log_success "构建完成!" log_info "运行镜像: docker run -d -p 8080:8080 --name anxin-backend-container $IMAGE_NAME:$IMAGE_TAG" } # 执行主函数 main "$@"