Tools/docker

[Docker] SpringBoot 웹어플리케이션을 도커 이미지로 빌드하는 두가지 방법

MOMOBOB 2021. 5. 4. 23:42
반응형

1. Dockerfile을 이용한 이미지 빌드

 특정 디렉토리에 dockerfilejar파일 준비

 

 - dockerfile

FROM openjdk:8-jdk-alpine
EXPOSE 8080
ARG JAR_FILE=target/dockertest-0.0.1-SNAPSHOT.jar
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

 

- 이미지 생성

docker build -t dockertest .

 

- 이미지 생성 확인

docker images

 

 

Docker 이미지는 레이어로 빌드된다. 하지만 Spring Boot fat jar의 특성상 모든 애플리케이션 코드와 라이브러리가 단일 레이어에 배치된다. 즉 한 줄의 코드만 변경되더라도 전체를 다시 빌드 해야하는 문제가 발생한다.

 

로그를 확인해보면 jdk 받는 레이어와, jar 생성하는 레이어 두개로 이루어진 이미지가 생성되는 것을 확인할 수 있다.

 

반응형

 


2. Buildpacks 이용한 이미지 빌드

 

mvnw이 있는 프로젝트 루트로 이동 후, 아래 명령실행

 

- 리눅스

./mvnw spring-boot:build-image

 

- 윈도우

mvnw spring-boot:build-image

pocketobuildpacks에서 builder를 받음

        

 

dockerfile을 이용한 빌드시에는 레이어가 두개인 이미지를 생성한 반면, 수많은 레이어로 구성된 이미지가 생성된 것을 확인할 수 있다. 

 

여러 레이어로 분리되어 이미지가 구성되면 소스코드 변경 등과 같은 작은 수정 후 이미지 리빌드시 수정된 레이어만 빌드하면 되므로 효율적으로 형상을 관리할 수 있다.

 

 

pocketobuildpacks의 특징

- 빌드팩이 런타임을 제공하기 때문에 도커파일을 건너뛰고 image를 생성.

- 프로젝트를 분석하고 필요한 프레임 워크와 라이브러리를 결정하는 작업을 수행

- 빌드팩이 생성하는 이미지는 다중 레이어로 제공되기 때문에 애플리케이션 코드만 변경할 경우 빌드가 빨라짐

 

 

반응형