fix: docker-compose 빌드 오류 해결 가이드 및 자동화 스크립트 추가
- WSL2 Ubuntu에서 'image already exists' 오류 해결 문서 추가 - Linux/macOS용 build.sh 스크립트 추가 (BuildKit 비활성화) - Windows PowerShell용 build.ps1 스크립트 추가 - 빌드 오류 트러블슈팅 가이드 추가 - docker-compose.yml에 빌드 오류 관련 주석 추가 - MODULES.md에 Docker 빌드 오류 해결 섹션 추가
This commit is contained in:
25
MODULES.md
25
MODULES.md
@ -230,6 +230,31 @@ $env:DB_USER
|
|||||||
$env:DB_NAME
|
$env:DB_NAME
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Docker 빌드 오류 ("image already exists")
|
||||||
|
```powershell
|
||||||
|
# WSL2 Ubuntu 환경에서 발생하는 오류 해결:
|
||||||
|
|
||||||
|
# 방법 1: BuildKit 비활성화 (권장)
|
||||||
|
$env:DOCKER_BUILDKIT=0
|
||||||
|
docker compose build
|
||||||
|
|
||||||
|
# 방법 2: 캐시 무시하고 빌드
|
||||||
|
docker compose build --no-cache
|
||||||
|
|
||||||
|
# 방법 3: 이전 이미지 삭제
|
||||||
|
docker rmi reg.firstgarden.co.kr/fgtools:latest
|
||||||
|
docker compose build
|
||||||
|
|
||||||
|
# 방법 4: BuildKit 캐시 정리
|
||||||
|
docker buildx prune -a
|
||||||
|
|
||||||
|
# 방법 5: 완전 초기화 후 빌드
|
||||||
|
docker compose down
|
||||||
|
docker rmi reg.firstgarden.co.kr/fgtools:latest
|
||||||
|
docker buildx prune -a
|
||||||
|
docker compose build
|
||||||
|
```
|
||||||
|
|
||||||
## 추가 정보
|
## 추가 정보
|
||||||
|
|
||||||
- [전체 프로젝트 구조](README.md)
|
- [전체 프로젝트 구조](README.md)
|
||||||
|
|||||||
97
README.md
97
README.md
@ -279,6 +279,103 @@ docker compose push
|
|||||||
docker compose build && docker compose push
|
docker compose build && docker compose push
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 9. 빌드 오류 해결
|
||||||
|
|
||||||
|
#### 오류: "image already exists"
|
||||||
|
```bash
|
||||||
|
# 증상
|
||||||
|
# > [weather-api] exporting to image:
|
||||||
|
# [+] build 0/1
|
||||||
|
# target weather-api: failed to solve: image "reg.firstgarden.co.kr/fgtools:latest": already exists
|
||||||
|
|
||||||
|
# 해결 방법 1: BuildKit 비활성화 (권장)
|
||||||
|
DOCKER_BUILDKIT=0 docker compose build
|
||||||
|
|
||||||
|
# 해결 방법 2: 캐시 무시하고 빌드
|
||||||
|
docker compose build --no-cache
|
||||||
|
|
||||||
|
# 해결 방법 3: 이전 이미지 삭제 후 빌드
|
||||||
|
docker rmi reg.firstgarden.co.kr/fgtools:latest
|
||||||
|
docker compose build
|
||||||
|
|
||||||
|
# 해결 방법 4: 완전 초기화
|
||||||
|
docker compose down
|
||||||
|
docker rmi reg.firstgarden.co.kr/fgtools:latest
|
||||||
|
docker buildx prune -a
|
||||||
|
docker compose build
|
||||||
|
|
||||||
|
# 해결 방법 5: 빌드 스크립트 사용 (권장)
|
||||||
|
# Linux/macOS
|
||||||
|
chmod +x scripts/build.sh
|
||||||
|
./scripts/build.sh clean # 또는 ./scripts/build.sh force
|
||||||
|
|
||||||
|
# Windows PowerShell
|
||||||
|
.\scripts\build.ps1 -Clean # 또는 .\scripts\build.ps1 -Force
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 빌드 스크립트 사용
|
||||||
|
|
||||||
|
자동화된 빌드 스크립트를 제공합니다:
|
||||||
|
|
||||||
|
**Linux/macOS:**
|
||||||
|
```bash
|
||||||
|
chmod +x scripts/build.sh
|
||||||
|
|
||||||
|
# 기본 빌드 (BuildKit 비활성화)
|
||||||
|
./scripts/build.sh
|
||||||
|
|
||||||
|
# 캐시 무시하고 빌드
|
||||||
|
./scripts/build.sh clean
|
||||||
|
|
||||||
|
# 완전 초기화 후 빌드
|
||||||
|
./scripts/build.sh force
|
||||||
|
|
||||||
|
# 빌드 및 사설 레지스트리에 푸시
|
||||||
|
./scripts/build.sh push
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows PowerShell:**
|
||||||
|
```powershell
|
||||||
|
# 첫 실행 시 실행 정책 설정
|
||||||
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||||
|
|
||||||
|
# 기본 빌드
|
||||||
|
.\scripts\build.ps1
|
||||||
|
|
||||||
|
# 캐시 무시하고 빌드
|
||||||
|
.\scripts\build.ps1 -Clean
|
||||||
|
|
||||||
|
# 완전 초기화 후 빌드
|
||||||
|
.\scripts\build.ps1 -Force
|
||||||
|
|
||||||
|
# 빌드 및 푸시
|
||||||
|
.\scripts\build.ps1 -Push
|
||||||
|
```
|
||||||
|
|
||||||
|
#### WSL2 Ubuntu에서 권장 방법
|
||||||
|
```bash
|
||||||
|
# WSL2 우분투에서 BuildKit 문제가 자주 발생합니다.
|
||||||
|
# 다음 방법들을 순서대로 시도하세요:
|
||||||
|
|
||||||
|
# 1단계: BuildKit 비활성화로 빌드
|
||||||
|
DOCKER_BUILDKIT=0 docker compose build
|
||||||
|
|
||||||
|
# 실패하면:
|
||||||
|
# 2단계: 캐시 무시하고 빌드
|
||||||
|
DOCKER_BUILDKIT=0 docker compose build --no-cache
|
||||||
|
|
||||||
|
# 여전히 실패하면:
|
||||||
|
# 3단계: 완전 초기화
|
||||||
|
docker compose down
|
||||||
|
docker rmi reg.firstgarden.co.kr/fgtools:latest
|
||||||
|
docker buildx prune -a
|
||||||
|
DOCKER_BUILDKIT=0 docker compose build
|
||||||
|
|
||||||
|
# 또는 제공된 빌드 스크립트 사용:
|
||||||
|
chmod +x scripts/build.sh
|
||||||
|
./scripts/build.sh force
|
||||||
|
```
|
||||||
|
|
||||||
## 📖 API 문서
|
## 📖 API 문서
|
||||||
|
|
||||||
### Dashboard API (포트 5000)
|
### Dashboard API (포트 5000)
|
||||||
|
|||||||
@ -9,6 +9,11 @@
|
|||||||
# 실행: docker compose up -d
|
# 실행: docker compose up -d
|
||||||
# 중지: docker compose down
|
# 중지: docker compose down
|
||||||
# 로그: docker compose logs -f
|
# 로그: docker compose logs -f
|
||||||
|
#
|
||||||
|
# 빌드 오류 시 (image already exists):
|
||||||
|
# - docker compose build --no-cache
|
||||||
|
# - docker rmi reg.firstgarden.co.kr/fgtools:latest
|
||||||
|
# - DOCKER_BUILDKIT=0 docker compose build (WSL2에서 권장)
|
||||||
# ###################################################################
|
# ###################################################################
|
||||||
|
|
||||||
x-common: &common
|
x-common: &common
|
||||||
|
|||||||
165
scripts/README.md
Normal file
165
scripts/README.md
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
# Scripts 가이드
|
||||||
|
|
||||||
|
프로젝트의 각종 자동화 스크립트를 제공합니다.
|
||||||
|
|
||||||
|
## 빌드 스크립트
|
||||||
|
|
||||||
|
### build.sh (Linux/macOS)
|
||||||
|
|
||||||
|
Docker 이미지 빌드를 자동화하는 Bash 스크립트입니다. WSL2 Ubuntu에서 발생하는 "image already exists" 오류를 해결합니다.
|
||||||
|
|
||||||
|
#### 설치
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 실행 권한 부여
|
||||||
|
chmod +x scripts/build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 사용법
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 기본 빌드 (BuildKit 비활성화)
|
||||||
|
./scripts/build.sh
|
||||||
|
|
||||||
|
# 캐시 무시하고 빌드
|
||||||
|
./scripts/build.sh clean
|
||||||
|
|
||||||
|
# 완전 초기화 후 빌드 (강력함)
|
||||||
|
./scripts/build.sh force
|
||||||
|
|
||||||
|
# 빌드 및 사설 레지스트리에 푸시
|
||||||
|
./scripts/build.sh push
|
||||||
|
|
||||||
|
# 도움말
|
||||||
|
./scripts/build.sh help
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 옵션 설명
|
||||||
|
|
||||||
|
| 옵션 | 설명 | 사용 시점 |
|
||||||
|
|------|------|----------|
|
||||||
|
| (기본값) | BuildKit 비활성화로 빌드 | 일반적인 빌드 |
|
||||||
|
| `clean` | 캐시를 무시하고 빌드 | 의존성 변경 후 |
|
||||||
|
| `force` | 완전 초기화 후 빌드 | "image already exists" 오류 발생 |
|
||||||
|
| `push` | 빌드 및 사설 레지스트리 푸시 | 배포 시 |
|
||||||
|
|
||||||
|
### build.ps1 (Windows PowerShell)
|
||||||
|
|
||||||
|
PowerShell로 작성된 Windows용 빌드 스크립트입니다.
|
||||||
|
|
||||||
|
#### 설치
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 실행 정책 변경 (처음 한 번만)
|
||||||
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||||
|
|
||||||
|
# 또는 현재 세션에서만 실행 허용
|
||||||
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 사용법
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 기본 빌드
|
||||||
|
.\scripts\build.ps1
|
||||||
|
|
||||||
|
# 캐시 무시하고 빌드
|
||||||
|
.\scripts\build.ps1 -Clean
|
||||||
|
|
||||||
|
# 완전 초기화 후 빌드
|
||||||
|
.\scripts\build.ps1 -Force
|
||||||
|
|
||||||
|
# 빌드 및 푸시
|
||||||
|
.\scripts\build.ps1 -Push
|
||||||
|
|
||||||
|
# 도움말
|
||||||
|
.\scripts\build.ps1 -Help
|
||||||
|
```
|
||||||
|
|
||||||
|
## 빌드 오류 해결 흐름도
|
||||||
|
|
||||||
|
```
|
||||||
|
docker compose build 실행
|
||||||
|
↓
|
||||||
|
"image already exists" 오류 발생?
|
||||||
|
↓ YES
|
||||||
|
./scripts/build.sh clean (또는 build.ps1 -Clean)
|
||||||
|
↓
|
||||||
|
성공?
|
||||||
|
↓ NO
|
||||||
|
./scripts/build.sh force (또는 build.ps1 -Force)
|
||||||
|
↓
|
||||||
|
성공?
|
||||||
|
↓ NO
|
||||||
|
docker system prune -a
|
||||||
|
docker compose build
|
||||||
|
```
|
||||||
|
|
||||||
|
## 트러블슈팅
|
||||||
|
|
||||||
|
### WSL2 Ubuntu 특정 팁
|
||||||
|
|
||||||
|
WSL2의 Docker 환경에서 BuildKit 캐시 문제가 자주 발생합니다:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. BuildKit 비활성화
|
||||||
|
export DOCKER_BUILDKIT=0
|
||||||
|
./scripts/build.sh
|
||||||
|
|
||||||
|
# 2. 또는 스크립트에서 자동으로 처리됨
|
||||||
|
./scripts/build.sh clean
|
||||||
|
|
||||||
|
# 3. 최후의 수단: 시스템 정리
|
||||||
|
docker system prune -a --volumes
|
||||||
|
./scripts/build.sh force
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker Desktop 설정 확인
|
||||||
|
|
||||||
|
Windows/macOS에서 Docker Desktop을 사용하는 경우:
|
||||||
|
|
||||||
|
1. Docker Desktop 설정 열기
|
||||||
|
2. "Resources" → "WSL integration" 확인
|
||||||
|
3. "Docker Engine" → "BuildKit" 활성화 확인
|
||||||
|
4. 필요시 다시 시작
|
||||||
|
|
||||||
|
### PowerShell 실행 정책 오류
|
||||||
|
|
||||||
|
```
|
||||||
|
File cannot be loaded because running scripts is disabled on this system.
|
||||||
|
```
|
||||||
|
|
||||||
|
해결:
|
||||||
|
```powershell
|
||||||
|
# 영구적 변경
|
||||||
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||||
|
|
||||||
|
# 현재 세션에서만
|
||||||
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
|
||||||
|
|
||||||
|
# 또는 -NoProfile 옵션으로 실행
|
||||||
|
powershell -NoProfile -ExecutionPolicy Bypass -File "scripts\build.ps1"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 향후 추가 스크립트 (계획)
|
||||||
|
|
||||||
|
- `test.sh` - 모든 모듈 테스트 실행
|
||||||
|
- `deploy.sh` - 배포 자동화
|
||||||
|
- `cleanup.sh` - Docker 리소스 정리
|
||||||
|
- `setup.sh` - 개발 환경 초기화
|
||||||
|
|
||||||
|
## 지원 환경
|
||||||
|
|
||||||
|
| OS | Shell | 상태 |
|
||||||
|
|----|-------|------|
|
||||||
|
| Linux | bash | ✓ 지원 |
|
||||||
|
| macOS | bash | ✓ 지원 |
|
||||||
|
| WSL2 Ubuntu | bash | ✓ 지원 (권장) |
|
||||||
|
| Windows | PowerShell | ✓ 지원 |
|
||||||
|
| Windows | CMD | ✗ 미지원 |
|
||||||
|
|
||||||
|
## 참고
|
||||||
|
|
||||||
|
- 모든 스크립트는 프로젝트 루트 디렉토리에서 실행해야 합니다.
|
||||||
|
- 스크립트는 Docker 및 Docker Compose가 설치되어 있어야 합니다.
|
||||||
|
- WSL2에서 실행할 때는 WSL2 배포판 내에서 실행하세요.
|
||||||
162
scripts/build.ps1
Normal file
162
scripts/build.ps1
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
# ###################################################################
|
||||||
|
# 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 "완료!"
|
||||||
137
scripts/build.sh
Normal file
137
scripts/build.sh
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
#!/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 "완료!"
|
||||||
Reference in New Issue
Block a user