- WSL2 Ubuntu에서 'image already exists' 오류 해결 문서 추가 - Linux/macOS용 build.sh 스크립트 추가 (BuildKit 비활성화) - Windows PowerShell용 build.ps1 스크립트 추가 - 빌드 오류 트러블슈팅 가이드 추가 - docker-compose.yml에 빌드 오류 관련 주석 추가 - MODULES.md에 Docker 빌드 오류 해결 섹션 추가
138 lines
3.3 KiB
Bash
138 lines
3.3 KiB
Bash
#!/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 "완료!"
|