본문 바로가기
Docker

[Docker] Spring Boot 프로젝트 배포

by sssooon 2024. 10. 22.

프로젝트를 이미지화 하기 전에 프로젝트 내부에 DockFile을 만든다.

프로젝트를 이미지 생성하기 위한것이다.

FROM docker.io/library/tomcat:10.1.26-jdk17-temurin
WORKDIR /usr/local/tomcat
ENV TZ Asia/Seoul
ENV USE_PROFILE=tomcat
ENV JAVA_OPTS="-Dspring.profiles.active=${USE_PROFILE}"
COPY ["./target/crud.war", "/usr/local/tomcat/webapps/crud.war"]
EXPOSE 8080/tcp
ENTRYPOINT ["catalina.sh", "run"]

 

FROM docker.io/library/tomcat:10.1.26-jdk17-temurin

프로젝트는 springboot 3.x, jdk 17 버전이기 때문에 docker hub에서 tomcat 10, jdk 17버전으로 설치 후 위 이미지 기반으로 이미지를 만든다

 

WORKDIR /usr/local/tomcat

작업 디렉터리를 /usr/local/tomcat로 설정. 이후의 명령어들은 이 디렉터리로 실행된다.


ENV TZ Asia/Seoul

컨테이너 타임존 설정. 로그 및 시간 관련 작업에 영향이 있다.


ENV USE_PROFILE=tomcat

USE_PROFILE 환경변수를 tomcat으로 설정

만약 OS의 SPRING_PROFILE_ACTIVE 환경변수를 설정해주었다면 필요 없다.

해당 프로젝트 내부 환경변수에는 SPRING_PROFILE_ACTIVE가 적용 되지 않기 때문에

USE_PROFILE 적용후 아래 JAVA_OPTS도 적용해준다.

 

ENV JAVA_OPTS="-Dspring.profiles.active=${USE_PROFILE}"

JAVA_OPTS으로 spring profile acitve를 적용해준다


COPY ["./target/crud.war", "/usr/local/tomcat/webapps/crud.war"]

호스트의 ./target/crud.war 파일을 컨테이너의 /usr/local/tomcat/webapps/crud.war 경로로 복사.

crud.war는 배포할 웹 애플리케이션의 WAR 파일.


EXPOSE 8080/tcp

호스트의 ./target/crud.war 파일을 컨테이너의 /usr/local/tomcat/webapps/crud.war 경로로 복사.

crud.war는 배포할 웹 애플리케이션의 WAR 파일.


ENTRYPOINT ["catalina.sh", "run"]

컨테이너가 시작될 때 실행될 명령어 설정.

catalina.sh run은 Tomcat 서버를 실행하는 스크립트.

컨테이너가 시작되면 Tomcat이 실행.

 

 

 

프로젝트를 git에 올린 후 git clone으로 해당 repository 가져오기

 

target 폴더에 package 생성

해당 repository 폴더에서 실행

mvn clean package

 

 

해당 프로젝트 이미지 생성

해당 repository 폴더에서  실행

docker build -t (원하는 이미지명):(tag명) -f ./DockerFile

 

docker images 명령어로 이미지 생성되었는지 확인

 

 

docker image ID 확인 후 프로젝트 실행

docker run -p 8080:8080 -d (image ID)

 

-p 8080:8080

호스트와 컨테이너 간의 포트 매핑.

호스트의 8080포트와 컨테이너의 8080 포트를 연결한다는 뜻.

컨테이너의 프로젝트는 호스트의 8080 포트를 통해 외부와 통신할 수 있다는 뜻.

-p 9090:8080 이라면 9090으로 외부에서 접속 가능

 


Docker 실행시 datasource로 jndi 하게 될 경우 배포되는 tomcat context.xml을 수정해주자

나의 삽질은 context.xml 수정 안함과 jdk 버전의 오류였다.....


컨테이너 내부에 vim 설치

 

해당 컨테이너 shell에 진입

docker exec -it (컨테이너 ID) /bin/sh

 

apt-get 업데이트

apt-get update

 

vim 설치

apt-get install vim

 

편집

vi (파일명)

'Docker' 카테고리의 다른 글

[Docker] Docker 명령어  (1) 2024.10.25
[Docker] linux에 Docker 설치하기(Cent Os)+mariadb 설치  (0) 2024.10.21