본문 바로가기

IT

리눅스에서 도커(Docker) 활용하기 5(spring boot 이미지 생성 및 실행)

728x90

이번에는 도커를 활용해 스프링부트 앱을 사용해보려고 한다. 도커 이미지 파일을 생성하고 실행해보자

 

이전 도커 없이 spring boot 프로젝트 실행하기 

https://sh970901.tistory.com/60?category=958061 

 

리눅스에서 스프링부트 앱 빌드하여 실행하기

리눅스에 git을 활용하여 스프링 프로젝트를 pull or clone 받아서 실행한다. 로컬에서 스프링 프로젝트를 만든 후 github에 올린다. https://start.spring.io/ 프로젝트를 생성하거나 기존에 프로젝트를 사

sh970901.tistory.com

 

gradle => JDK => 소스를 컴파일하면 => jar 파일(실행 파일 + 톰캣)이 생성

사실 (jar파일 + java)만 있으면 모든 실행환경이 조성된다. 이를 만들기 위해 도커라이즈(도커화) 시키는 작업이 필요하다.

 

도커라이즈 하는 방법 참고 => https://spring.io/guides/gs/spring-boot-docker/

DB 사용앱을 도커라이즈 => https://sh970901.tistory.com/62

 

DB 사용앱을 도커라이즈

ㅇㅇ

sh970901.tistory.com

Dockerfile 생성

  • vim Dockerfile
 # m1 이라면 openjdk:17-jdk-alpine 대신 openjdk:17 사용
FROM openjdk:17-jdk-alpine
ARG JAR_FILE=build/libs/projectname-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","/app.jar"]
FROM openjdk:17-jdk-alpine

도커는 하나하나가 리눅스이다. alpine(가벼운 리눅스)에 openjdk 17이 설치되어있다. (도커허브에 존재) => 환경을 조성

ARG JAR_FILE=build/libs/프로젝트명-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar

위(변수 선언)를 아래(app.jar)에 복사 

EXPOSE 8080

8080 포트를 사용하겠다.

ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","/app.jar"]

실행 명령

 

sbhello 도커 이미지 생성

  • docker build -t sbhello .
  • sbhello라는(tag) 이미지를 현재 폴더에 생성
  • openjdk (기존 이미지)를 이용하여 sbhello라는 이미지를 생성하였다.

docker images

sbhello 이미지 실행

docker run \
  --name=sbhello_1 \
  -p 8080:8080 \
  -d \
  sbhello

sbhello_1이라는 컨테이너 이름으로 외부, 내부 포트를 지정, 백그라운드로 돌림(detach), sbhello라는 이미지 실행

 

실행 결과

 

실행 화면

 

**참고**

소드 코드 업데이트로 인한 재 배포시에는 기존 프로젝트에 git pull을 받고 재빌드(/gradlew clean build )후 이미지를 생성하여 런해주면 된다.

 

그래들 빌드, Dockerfile 생성, 도커 이미지 생성을 대신 해주는 명령어

  • /gradlew bootBuildImage
  • 이 때 수행되는 소스코드빌드에서는 테스트가 스킵된다. (DB가 없어도 만들어짐 gradlew clean build skip-test)
  • 만들어진 이미지 이름이 앱이름:앱버전의 형태