개발일기장
스프링 부트 환경에서 도커를 찍먹해보자 feat. war 파일
자몽포도
2025. 3. 2. 16:49
알아갈 수 있는 정보
- war 파일 Dockerfile 구성 방법
스프링 부트 환경에서 Dockerfile 을 이용하면 비교적 간단하게 컨테이너를 구성할 수 있다. 우선 프로젝트 루트 아래 Dockerfile 을 을 생성하자.
Dockerfile 는 아래와 같이 구성되어 있다. 각 행의 맨 앞에는 Dockerfile 에서 사용할 수 있는 키워드가 나온다. 자세한 내용은 다음 링크를 참고 바람 (https://docs.docker.com/reference/dockerfile/)
아래 도커 파일은 스프링 부트에서 일반적으로 사용하는 내장 톰캣에 맞춰진 명령이 아니다.
war 파일을 웹에 띄울 것이기 때문에 톰캣 이미지를 불러온다.
내장 톰캣을 사용한다면 (https://spring.io/guides/gs/spring-boot-docker) 참고
# 사용할 이미지(도커헙에서 검색하면 나옴)
FROM tomcat:10-jdk17
# 빌드 단계에서 사용할 변수 선언
ARG BUILD_FILE=build/libs/*.war
# Tomcat server.xml 8080 -> 8000 포트로 수정(요 애플리케이션은 8000 포트를 사용), 야매 방법
RUN sed -i 's/8080/8000/g' /usr/local/tomcat/conf/server.xml
# 로컬에서 빌드한 war 파일을 컨테이너 내부 경로에 복사
COPY ${BUILD_FILE} /usr/local/tomcat/webapps/manage.war
# 리스닝할 포트 선언
EXPOSE 8000
# 한줄 요약 어려움, https://docs.docker.com/reference/dockerfile/#cmd 참고
CMD ["catalina.sh", "run"]
WAS는 컨테이너 / DB는 로컬에 구성되어 있을 경우
이럴 경우, 만약 yml, properties 에 DB 연결 정보가 localhost 로 구성되어 있을 경우, 컨테이너 내부에 해당 파일을 읽는다면 오류가 발생한다. 왜냐하면 컨테이너 입장에서 localhost는 컨테이너 위에 있는 host 임
그래서 아래와 같이 host.docker.internal 로 구성해야 로컬 환경의 DB와 연결할 수 있음