Computer Science/CI&CD

[CI/CD] Jar 파일 생성 및 실행, Jar 파일 도커 컨테이너 실행, 도커 컴포즈 컨테이너 실행까지

Bay Im 2024. 1. 16. 17:45

Jar 파일 생성 실행

  • application.yml 추가
spring:
  # jar 파일 만들때 템플릿 경로 지정
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
  • build.gradle 추가
// jar 파일 만들 때 여러 번 실행하니 중복되어서 코드 추가
bootJar {
	duplicatesStrategy = 'exclude'
}
  • Gradle에서 build-bootJar 더블 클릭하면 Jar 파일 생성 완료
  • 생성된  Jar 파일 Run하고 애플리케이션 확인
  • 만약 jar 삭제하고 다시 생성하고 싶을 땐 터미널에 “.\gradlew clean” 입력 후 재 생성 하기!
  • 주의할 점
    • jar 파일 실행 에러(templates을 못 찾을 때)
      • controller와 html의 템플릿 경로가 맞는지 확인한다. 예를 들어 어느 것은 /layout/default 이거나, layout/default 처럼 앞에 슬래시가 있거나 없을 수 있다. 
      • 앞에 슬래시(/)가 있는 코드들은 templates 경로를 찾아갈 때 슬래시가 두 번 있어서 경로를 못찾는다.
      • 그러므로 controller와 html 파일의 templates 경로를 맨 앞에 슬래시가 있는 코드들은 모두 없애주어 경로 통일을 해준다!

 

Jar 파일 도커 컨테이너 실행

  • 도커 파일 작성
FROM openjdk:11-jdk
LABEL maintainer="(labelName)"
ARG JAR_FILE=build/libs/*.jar
ADD ${JAR_FILE} app.jar
EXPOSE 8099
ENTRYPOINT ["java","-jar","/app.jar"]
  • 도커 파일 빌드해서 이미지 생성
    • 터미널에 “docker build -t docker-springboot . “ 입력하기 
  • 도커 컨테이너 실행
    • 터미널에 “docker run -p 8099:8099 docker-springboot” 입력하기 
  • 어플리케이션 실행 확인

 

 

Jar 파일 도커 컴포즈 컨테이너 실행

  • 도커 컴포즈 사용 이유
    • 컨테이너 하나만 올리면 될 줄 알았는데 레디스 때문에 컨테이너를 2개 올려야 하여 도커 컴포즈를 사용하게 되었다.
  • 도커 컴포즈 만들기
    • docker-compose.yml 생성
      • 포트 포워딩(ports) : “호스트 포트(외부 IP):컨테이너 포트(내부 IP)”
    version: "3"
    services:
      webserver:
        build: .  # 현재 위치에서 도커 파일을 찾는다.
        ports:
          - "80:8099"
        depends_on:  # 레디스랑 연결 
          - redis
        #restart:
          #always
    
      redis:
        image: redis:latest  # 최신 레디스 이미지 다운 or 실행
        ports:
          - "6379:6379"
        command: redis-server --port 6379
        hostname: redis
        #restart:
         #always
    
    • application.yml 수정 (yml 파일 수정 시 Jar 파일 삭제 후 재 생성하기!!)
    redis:
        host: redis  # 도커 컴포즈로 인해 수정
        port: 6379
    
    • 터미널에서 “docker-compose up” 작성 후 애플리케이션 실행 확인
    • 컨테이너 종료 시 터미널에서 “docker-compose down” 입력
728x90