Tools/docker
[Docker] SpringBoot 웹어플리케이션을 도커 이미지로 빌드하는 두가지 방법
MOMOBOB
2021. 5. 4. 23:42
반응형
1. Dockerfile을 이용한 이미지 빌드
특정 디렉토리에 dockerfile과 jar파일 준비
- 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를 생성.
- 프로젝트를 분석하고 필요한 프레임 워크와 라이브러리를 결정하는 작업을 수행
- 빌드팩이 생성하는 이미지는 다중 레이어로 제공되기 때문에 애플리케이션 코드만 변경할 경우 빌드가 빨라짐
반응형