- WSL2 Ubuntu에서 'image already exists' 오류 해결 문서 추가 - Linux/macOS용 build.sh 스크립트 추가 (BuildKit 비활성화) - Windows PowerShell용 build.ps1 스크립트 추가 - 빌드 오류 트러블슈팅 가이드 추가 - docker-compose.yml에 빌드 오류 관련 주석 추가 - MODULES.md에 Docker 빌드 오류 해결 섹션 추가
163 lines
4.3 KiB
PowerShell
163 lines
4.3 KiB
PowerShell
# ###################################################################
|
|
# build.ps1 - FGTools Docker 이미지 빌드 스크립트 (PowerShell)
|
|
# ###################################################################
|
|
# 용도: Windows/WSL2에서 docker-compose build 오류 해결
|
|
#
|
|
# 사용법:
|
|
# Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
|
# .\scripts\build.ps1 # 기본 빌드
|
|
# .\scripts\build.ps1 -Clean # 캐시 무시하고 빌드
|
|
# .\scripts\build.ps1 -Force # 완전 초기화 후 빌드
|
|
# .\scripts\build.ps1 -Push # 빌드 및 푸시
|
|
# ###################################################################
|
|
|
|
param(
|
|
[switch]$Clean = $false,
|
|
[switch]$Force = $false,
|
|
[switch]$Push = $false,
|
|
[switch]$Help = $false
|
|
)
|
|
|
|
# 설정
|
|
$REGISTRY = "reg.firstgarden.co.kr"
|
|
$IMAGE_NAME = "fgtools:latest"
|
|
$FULL_IMAGE = "$REGISTRY/$IMAGE_NAME"
|
|
|
|
# 함수: 메시지 출력
|
|
function Write-Log {
|
|
param([string]$Message)
|
|
Write-Host "[FGTools Build] $Message" -ForegroundColor Green
|
|
}
|
|
|
|
function Write-Error-Custom {
|
|
param([string]$Message)
|
|
Write-Host "[FGTools Build ERROR] $Message" -ForegroundColor Red
|
|
}
|
|
|
|
function Write-Warn {
|
|
param([string]$Message)
|
|
Write-Host "[FGTools Build WARN] $Message" -ForegroundColor Yellow
|
|
}
|
|
|
|
# 함수: 기본 빌드
|
|
function Build-Normal {
|
|
Write-Log "도커 이미지 빌드 시작 (일반 모드)..."
|
|
$env:DOCKER_BUILDKIT = 0
|
|
docker compose build
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Log "✓ 빌드 완료: $FULL_IMAGE"
|
|
} else {
|
|
Write-Error-Custom "빌드 실패"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# 함수: 캐시 무시 빌드
|
|
function Build-Clean {
|
|
Write-Log "도커 이미지 빌드 시작 (캐시 무시)..."
|
|
docker compose build --no-cache
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Log "✓ 빌드 완료: $FULL_IMAGE"
|
|
} else {
|
|
Write-Error-Custom "빌드 실패"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# 함수: 강제 초기화 후 빌드
|
|
function Build-Force {
|
|
Write-Log "완전 초기화 모드 시작..."
|
|
|
|
Write-Warn "서비스 중지 중..."
|
|
docker compose down 2>$null
|
|
|
|
Write-Warn "이전 이미지 삭제 중..."
|
|
docker rmi $FULL_IMAGE 2>$null
|
|
|
|
Write-Warn "BuildKit 캐시 정리 중..."
|
|
docker buildx prune -a --force 2>$null
|
|
|
|
Write-Log "도커 이미지 빌드 시작..."
|
|
$env:DOCKER_BUILDKIT = 0
|
|
docker compose build
|
|
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Log "✓ 빌드 완료: $FULL_IMAGE"
|
|
} else {
|
|
Write-Error-Custom "빌드 실패"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# 함수: 빌드 및 푸시
|
|
function Build-And-Push {
|
|
Write-Log "도커 이미지 빌드 및 푸시 시작..."
|
|
|
|
$env:DOCKER_BUILDKIT = 0
|
|
docker compose build
|
|
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error-Custom "빌드 실패"
|
|
exit 1
|
|
}
|
|
|
|
Write-Log "이미지 푸시 중..."
|
|
docker compose push
|
|
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Log "✓ 빌드 및 푸시 완료: $FULL_IMAGE"
|
|
} else {
|
|
Write-Error-Custom "푸시 실패"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# 함수: 사용법 출력
|
|
function Show-Usage {
|
|
$usage = @"
|
|
FGTools Docker 이미지 빌드 스크립트
|
|
|
|
사용법:
|
|
.\scripts\build.ps1 # 기본 빌드
|
|
.\scripts\build.ps1 -Clean # 캐시 무시하고 빌드
|
|
.\scripts\build.ps1 -Force # 완전 초기화 후 빌드
|
|
.\scripts\build.ps1 -Push # 빌드 및 푸시
|
|
.\scripts\build.ps1 -Help # 이 메시지 출력
|
|
|
|
옵션:
|
|
-Clean 캐시를 무시하고 빌드
|
|
-Force 완전 초기화 후 빌드 (강력함)
|
|
-Push 빌드 및 사설 레지스트리에 푸시
|
|
-Help 도움말 출력
|
|
|
|
트러블슈팅:
|
|
WSL2에서 "image already exists" 오류 발생 시:
|
|
1. 먼저 clean 모드 시도: .\scripts\build.ps1 -Clean
|
|
2. 실패 시 force 모드 시도: .\scripts\build.ps1 -Force
|
|
3. 계속 실패하면: docker system prune -a
|
|
|
|
참고:
|
|
처음 실행 시 실행 정책 변경 필요:
|
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
|
"@
|
|
Write-Host $usage
|
|
}
|
|
|
|
# 메인 로직
|
|
if ($Help) {
|
|
Show-Usage
|
|
exit 0
|
|
}
|
|
|
|
if ($Force) {
|
|
Build-Force
|
|
} elseif ($Clean) {
|
|
Build-Clean
|
|
} elseif ($Push) {
|
|
Build-And-Push
|
|
} else {
|
|
Build-Normal
|
|
}
|
|
|
|
Write-Log "완료!"
|