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

99 lines
2.6 KiB
Markdown

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