#!/bin/bash # ################################################################### # build.sh - FGTools Docker 이미지 빌드 스크립트 # ################################################################### # 용도: WSL2 Ubuntu에서 docker-compose build 오류 해결 # # 사용법: # chmod +x scripts/build.sh # ./scripts/build.sh # 기본 빌드 # ./scripts/build.sh clean # 캐시 무시하고 빌드 # ./scripts/build.sh force # 완전 초기화 후 빌드 # ./scripts/build.sh push # 빌드 및 푸시 # ################################################################### set -e REGISTRY="reg.firstgarden.co.kr" IMAGE_NAME="fgtools:latest" FULL_IMAGE="$REGISTRY/$IMAGE_NAME" # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 함수: 메시지 출력 log() { echo -e "${GREEN}[FGTools Build]${NC} $1" } error() { echo -e "${RED}[FGTools Build ERROR]${NC} $1" } warn() { echo -e "${YELLOW}[FGTools Build WARN]${NC} $1" } # 함수: 기본 빌드 build_normal() { log "도커 이미지 빌드 시작 (일반 모드)..." export DOCKER_BUILDKIT=0 docker compose build log "✓ 빌드 완료: $FULL_IMAGE" } # 함수: 캐시 무시 빌드 build_clean() { log "도커 이미지 빌드 시작 (캐시 무시)..." docker compose build --no-cache log "✓ 빌드 완료: $FULL_IMAGE" } # 함수: 강제 초기화 후 빌드 build_force() { log "완전 초기화 모드 시작..." warn "서비스 중지 중..." docker compose down || true warn "이전 이미지 삭제 중..." docker rmi "$FULL_IMAGE" || true warn "BuildKit 캐시 정리 중..." docker buildx prune -a --force || true log "도커 이미지 빌드 시작..." export DOCKER_BUILDKIT=0 docker compose build log "✓ 빌드 완료: $FULL_IMAGE" } # 함수: 빌드 및 푸시 build_and_push() { log "도커 이미지 빌드 및 푸시 시작..." export DOCKER_BUILDKIT=0 docker compose build log "이미지 푸시 중..." docker compose push log "✓ 빌드 및 푸시 완료: $FULL_IMAGE" } # 함수: 사용법 출력 usage() { cat << EOF 사용법: ./scripts/build.sh [옵션] 옵션: (기본값) 일반 빌드 (BuildKit 비활성화) clean 캐시를 무시하고 빌드 force 완전 초기화 후 빌드 (강력함) push 빌드 및 사설 레지스트리에 푸시 예시: ./scripts/build.sh # 기본 빌드 ./scripts/build.sh clean # 캐시 제거 후 빌드 ./scripts/build.sh force # 완전 초기화 ./scripts/build.sh push # 빌드 및 푸시 트러블슈팅: WSL2에서 "image already exists" 오류 발생 시: 1. 먼저 clean 모드 시도: ./scripts/build.sh clean 2. 실패 시 force 모드 시도: ./scripts/build.sh force 3. 계속 실패하면: docker system prune -a EOF } # 메인 로직 case "${1:-default}" in default) build_normal ;; clean) build_clean ;; force) build_force ;; push) build_and_push ;; help|--help|-h) usage ;; *) error "알 수 없는 옵션: $1" usage exit 1 ;; esac log "완료!"