본문 바로가기

Docker

[Docker] 스프링부트 프로젝트 도커 이미지(image) 만들고 실행하기

1) 빌드

인텔리제이 오른쪽 코끼리(gradle) 아이콘 클릭 -> 프로젝트명-Tasks-build-bootJar 클릭하면 빌드 됨!

 

 

빌드 할 때 에러 발생한 내용 ▼

더보기

명령어로 빌드 했는데 아래와 같이 에러 빌드가 안됨(마우스 클릭클릭 빌드는 되는데 왜 명령어 빌드는 안되징....)

 

./gradlew clean build 
> Task :compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x4566203c) cannot access class cohttp://m.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export cohttp://m.sun.tools.javac.processing to unnamed module @0x4566203c

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 433ms
2 actionable tasks: 2 executed

 

 

에러 원인은 lombok과 java 버전이 맞지 않아서 발생하는 문제라고해서

기존 프로젝트 버전 (jdk 1.8)은 그대로 유지하고 lombok 버전을 1.18.22로 변경

    implementation 'org.projectlombok:lombok:1.18.22'
    annotationProcessor 'org.projectlombok:lombok:1.18.22'

 

그리고 빌드 했더니 성공! 

 

 

2) Dockerfile 생성

파일 위치 : 프로젝트 루트 디렉토리에 'Dockerfile' 생성

 

파일 내용

FROM adoptopenjdk:8-jre-hotspot

ARG JAR_FILE=build/libs/*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-jar","/app.jar"]
  • FROM: jdk 버전 JRE 이미지를 base로 함
  • ARG: Gradle 빌드된 JAR 파일 위치
  • COPY: Gradle 빌드된 JAR 파일을 이미지 내부로 복사
  • ENTRYPOINT: 애플리케이션 실행 명령어 설정

 

3) 도커 이미지 빌드(생성)

현재 위치('.')에서 빌드 

# 명령어
docker build {옵션(선택)} {이미지명} {경로}

-t옵션: 이미지에 이름과 태그 부여 

.: 현재 경로(위치)를 나타내는 '.' 사용

 

 

 

 

4) 도커 이미지 실행

# 명령어
docker run -p {호스트 포트}:{도커 컨테이너 포트} {이미지명}

# 실제 실행 명령어
docker run -p 8080:8080 queue

 

 

도커 이미지 백그라운드 실행

# 명령
docker run {옵션} {이미지명}

# 실제 실행 명령
docker run -d -p 55714:55714 gpu2:version1

 

 

이미지 삭제

docker rmi {이미지명 또는 이미지ID}