# Docker 빌드 및 실행 가이드 ## 추가된 파일 | 파일 | 설명 | |------|------| | `Dockerfile` | 멀티스테이지 빌드 정의 | | `.dockerignore` | Docker 빌드 컨텍스트 제외 목록 | --- ## Dockerfile 구조 ### Stage 1 — Builder (`eclipse-temurin:21-jdk-jammy`) 1. Gradle wrapper 및 `build.gradle` 복사 → 의존성 레이어 캐싱 2. 소스 코드 복사 후 `./gradlew clean bootJar -x test` 실행 3. 출력: `build/libs/shp-exporter-v2.jar` ### Stage 2 — Runtime (`eclipse-temurin:21-jre-jammy`) - JDK 없이 JRE만 포함 → 이미지 크기 최소화 - 출력 디렉토리 `/data/model_output/export` 사전 생성 - JVM 옵션 포함 (`-Xmx4g`, G1GC 튜닝 등) --- ## 빌드 ```bash docker build -t shp-exporter . ``` --- ## 실행 ### Spring Batch 모드 (권장) ```bash docker run --rm \ -v /data/model_output/export:/data/model_output/export \ -e GEOSERVER_USERNAME=admin \ -e GEOSERVER_PASSWORD=geoserver \ shp-exporter \ --batch \ --converter.batch-ids[0]=252 ``` ### GeoServer 등록 포함 ```bash docker run --rm \ -v /data/model_output/export:/data/model_output/export \ -e GEOSERVER_USERNAME=admin \ -e GEOSERVER_PASSWORD=geoserver \ shp-exporter \ --batch \ --geoserver.enabled=true \ --converter.inference-id=D5E46F60FC40B1A8BE0CD1F3547AA6 \ --converter.batch-ids[0]=252 \ --converter.batch-ids[1]=253 ``` ### Shapefile 업로드 모드 ```bash docker run --rm \ -v /data/model_output/export:/data/model_output/export \ -e GEOSERVER_USERNAME=admin \ -e GEOSERVER_PASSWORD=geoserver \ shp-exporter \ --upload-shp /data/model_output/export/path/to/file.shp \ --layer layer_name ``` ### DB 주소 오버라이드 `application-prod.yml`의 DB 호스트(`kamco-cd-postgis`)가 네트워크 환경과 다를 경우: ```bash docker run --rm \ --network your-network \ -v /data/model_output/export:/data/model_output/export \ shp-exporter \ --batch \ --spring.datasource.url=jdbc:postgresql://HOST:5432/kamco_cds \ --converter.batch-ids[0]=252 ``` --- ## 주의사항 - **볼륨 마운트 필수**: 출력 파일(`/data/model_output/export`)은 호스트 볼륨으로 마운트하지 않으면 컨테이너 종료 시 소실됨 - **네트워크**: DB 호스트명 `kamco-cd-postgis`가 컨테이너에서 resolve되어야 함 (`--network` 또는 `--add-host` 활용) - **GeoServer 크리덴셜**: `GEOSERVER_USERNAME` / `GEOSERVER_PASSWORD` 환경변수로 주입 (`application-prod.yml`에 하드코딩된 값은 덮어씌워짐) - **`.dockerignore`는 `.gitignore`에 등록**되어 있어 git에 커밋되지 않음 — 필요 시 `.gitignore`에서 해당 라인 제거