Files
kamco-cd-cron/shp-exporter/DOCKER.md
2026-03-20 13:31:16 +09:00

2.6 KiB

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 튜닝 등)

빌드

docker build -t shp-exporter .

실행

Spring Batch 모드 (권장)

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 등록 포함

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 업로드 모드

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)가 네트워크 환경과 다를 경우:

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에서 해당 라인 제거