docker

[docker] Dockerfile로 서버에 war 파일 배포하기(feat. jar)

밍글링글링 2022. 11. 28.
728x90

우선 준비해야할 것은 Dockerfile, 스프링부트에서 빌드된 .war 파일이다

jar 파일로 배포해도 상관없지만, 이번엔 war파일로 서버에 배포할 것이기 때문에...

혹시나해서 jar 파일로 배포하는 Dockerfiles 참고하길 바란다.


1. jar 파일 배포 Dockerfile 내용(참고용)

FROM openjdk:11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar

ARG ENVIRONMENT
ENV SPRING_PROFILES_ACTIVE=${ENVIRONMENT}

# ENTRYPOINT ["java","-jar","/app.jar"]
# 설정파일을 분리해서 사용할 때
ENTRYPOINT ["java","-jar","/app.jar"]
# java -jar -Dspring.profiles.active=prod app.jar


2. war 파일 배포 Dockerfile 내용

FROM tomcat:8.5.46-jdk8-openjdk

# tomcat root 경로 삭제
RUN rm -Rf /usr/local/tomcat/webapps/ROOT 

ARG ENVIRONMENT
ENV SPRING_PROFILES_ACTIVE=${ENVIRONMENT}

ARG WAR_FILE=*.war
COPY ${WAR_FILE} /usr/local/tomcat/webapps/ROOT.war

#: docker build --build-arg ENVIRONMENT=dev -t mingty .
#: docker run -it -d --name mingty -p 3100:8080 -v /upload/file:/upload/file -e TZ=Asia/Seoul mingty

jar와 war의 가장 큰 차이 중 하나는 war는 jar와 달리 웹서버, 웹컨테이너 필요하기 떄문에 위와 같이

[1]번은 docker에서 openjdk:11 이미지를 다운받아 jar를 실행시키고...

[2]번은 docker에서 외장 tomcat을 사용하여 배포하여 실행시키는 방식으로 서술하였다.

이번엔 war 배포를 할 예정이기에 [2]번으로 기술한다.


한 줄씩 내용을 설명하자면...

FROM tomcat:8.5.46-jdk8-openjdk

 

tomcat:8.5.46-jdk8-openjdk 의 도커 이미지로 부터 아래 내용이 실행되는 것이다.

RUN rm -Rf /usr/local/tomcat/webapps/ROOT

이 해당 도커 이미지 기본 세팅으로는 /usr/local/tomcat/webapps/ROOT 경로에 ROOT.war 파일이 올려지면 ROOT 디렉토리가 생성되며, 자동으로 실행된다.


그래서 초기화를 위함으로 위와 같이 ROOT 디렉토리를 삭제한다.

ARG ENVIRONMENT
ENV SPRING_PROFILES_ACTIVE=${ENVIRONMENT}

이 명령어는 배포서버에 따라 분기하기 위해... 예를 들어
application-dev.yml
application-prod.yml 등등...

나누어져있다면, 환경변수를 통해 분기되게 설정할수도 있다.

 

ARG WAR_FILE=*.war
COPY ${WAR_FILE} /usr/local/tomcat/webapps/ROOT.war

Dockerfile 과 .war 파일이 서버 내부에서 같은 경로에 위치에서 war 파일을 찾는다.
그 후, 도커 컨테이너 내부 /usr/local/tomcat/webapps/ROOT.war 경로에 war 파일을 복사하여...
자동으로 외장 tomcat을 실행하게 한다.

docker build --build-arg ENVIRONMENT=dev -t mingty .

 

위와 같이 docker build 명령어를 사용하여 docker image를 생성하고...
docker run 실행하여 사용한다.

728x90

댓글