bibimbap/docker-compose.override.yml

32 lines
2.0 KiB
YAML

# =============================================================================
# 로컬 dev 전용 오버라이드 — `docker compose` 가 docker-compose.yml 과 자동 병합한다.
# 목적: app 을 "WAR 굽기" 대신 소스 bind-mount + `mvn spring-boot:run` 으로 띄워
# 코드/JSP 변경을 이미지 재빌드 없이 반영(로컬 빠른 루프).
#
# 배포 이미지는 이 파일과 무관(별도 경로). 배포/운영 빌드는 base 만 명시 사용:
# docker compose -f docker-compose.yml up -d --build app # Dockerfile WAR 굽기
# (override 자동병합을 피하려고 `-f docker-compose.yml` 로 base 만 지정한다.)
#
# 반영 방법(로컬, 이미지 재빌드 0):
# - JSP/정적: 저장 즉시 반영(Jasper 가 마운트된 webapp 에서 재컴파일). 재시작 불필요.
# - Java 코드: `docker compose restart app` (spring-boot:run 재기동 ~1~2s)
# 또는 `docker compose exec app mvn -o -P dev -DskipTests compile` 후 restart.
# 전제: 호스트 ~/.m2 에 의존성이 캐시돼 있어야 offline(-o) 으로 뜬다(기존 빌드 이력으로 충족).
#
# 참고: devtools 자동재시작은 도입하지 않음 — 컨테이너 spring-boot:run 에는 소스 자동
# 재컴파일러가 없어(IDE 부재) 이득이 미미하고, SNAPSHOT devtools 의 offline 해소가
# 불안정해 restart/exec-compile 루프가 더 견고하다.
# =============================================================================
services:
app:
image: maven:3.9-eclipse-temurin-21
# base 의 build(Dockerfile WAR 굽기)를 로컬에선 사용하지 않는다.
build: !reset null
working_dir: /build
# offline: 프록시 CA 우회 + 재현성. 새 의존성 추가 시에만 일시적으로 -o 제거 후 1회 온라인.
command: ["mvn", "-o", "-P", "dev", "-DskipTests", "spring-boot:run"]
volumes:
- .:/build # 소스 bind-mount (코드/JSP 즉시 공유)
- ${HOME}/.m2:/root/.m2 # 호스트 의존성 캐시 재사용(offline 가능)