[feat] Dockerfile, docker-compose, Kubernetes 매니페스트 추가#797
Conversation
The repo has no container image definition or k8s manifests. Add a minimal but production-shaped set built on top of tomcat:10.1-jre17. - Dockerfile: multi-stage Maven 3.9 + Temurin 17 -> tomcat:10.1-jre17, default ROOT app dropped and replaced with the built war. Copies pom.xml first for layer caching, then src/ and script/. - .dockerignore: keep build context small. - docker-compose.yml: single-service compose for demo runs. - k8s/deployment.yaml: replica=1 RollingUpdate, runAsNonRoot, drop ALL, resource requests/limits sized for the large 253-function bundle (500m-2000m CPU, 1Gi-2Gi memory), liveness/readiness probes on /, ephemeral Tomcat work/temp/logs volumes. - k8s/service.yaml: ClusterIP exposing port 8080.
|
표준프레임워크에 대한 지속적인 참여와 소중한 PR에 대단히 감사드립니다. 제출해 주신 코드를 기반으로 내부 인프라 환경(Docker/Kubernetes)에서 빌드 및 배포 검증을 진행하였으나, 아래 두 가지 항목에서 정상적으로 구동되지 않는 현상이 확인되어 공유해 드립니다.
더불어 표준프레임워크 가이드라인으로서 처음 접하는 사용자도 쉽게 활용할 수 있도록, 처음 도커 빌드 및 실행을 테스트할 때 참고할 수 있는 간단한 '도커 시작 가이드(실행 명령어 등)'를 README나 PR 내용에 함께 포함해 주시면 감사하겠습니다. 소중한 기여에 다시 한번 감사드립니다. |
격리된 멀티스테이지 도커 빌드에서 중앙 저장소에 없는 smeapi jar를 찾지 못해
'package x3.client.smeapi does not exist' 컴파일 오류가 발생하던 문제를
빌드 스테이지의 install:install-file 단계로 해결한다.
또한 k8s 프로브 경로를 ROOT('/')에서 정적 리소스(/css/**)로 변경한다.
ROOT 경로는 DispatcherServlet/스프링 시큐리티/DB에 의존해 기동 시점에
302/500을 반환하면서 CrashLoopBackOff를 유발했다. permitAllList에 포함된
정적 경로는 인증·DB 없이 200을 반환하며, startupProbe를 추가해 느린 기동
중 livenessProbe에 의한 조기 재시작을 방지한다.
처음 사용하는 사용자가 따라 할 수 있도록 도커 빌드/실행, docker compose, 쿠버네티스 배포 및 접속·헬스체크 방법을 k8s/README.md에 정리한다.
|
검증 중 발견하신 세 가지를 반영했습니다.
로컬 환경 제약으로 도커 클린 빌드와 k8s 기동까지의 실런타임 검증은 수행하지 못했습니다. Dockerfile/매니페스트 문법과 헬스 경로의 보안 허용 여부·파일 존재는 정적으로 확인했습니다. 가능하시면 클린 빌드 한 번 더 확인 부탁드립니다. |
변경 사유
컨테이너 이미지/k8s 매니페스트가 없어 로컬 빌드와 수동 배포만 가능합니다.
tomcat:10.1-jre17기반 최소 산출물을 추가합니다.변경 내용
Dockerfile— multi-stagemaven:3.9-eclipse-temurin-17→tomcat:10.1-jre17, 기본 ROOT 앱 제거 후 war를 ROOT.war로 배치,pom.xml선행 캐싱.dockerignore— 빌드 컨텍스트 축소docker-compose.yml— 단일 서비스,${APP_VERSION:-5.0.0}변수화k8s/deployment.yaml— 1 replica RollingUpdate, runAsNonRoot, drop ALL, 253개 공통컴포넌트 번들에 맞춘 resource requests/limits (500m–2000m CPU / 1Gi–2Gi), liveness/readiness probe(/)k8s/service.yaml— ClusterIP 8080영향 범위
image:태그는 예시 — 운영 환경 레지스트리로 교체 필요체크리스트