요약
eclipse-temurin:17-jre-alpine으로 이미지 굽자.
상황
어느날 문득, 서버에서 배포할 때 이미 빌드되어 jar 파일만 실행한다면, JDK가 아닌 JRE만 있어도 되는 거 아닌가? 하는 생각이 들었다.
요즘 배포할 때는 도커 이미지로 구워서 띄워버려서, JRE를 사용하면 용량을 더 줄일 수 있을 것 같아서 한번 알아봤다.
openjdk를 우선으로 찾아보았는데 내 서치 실력이 부족한 건지 17-jre만 있는 것은 찾을 수가 없어서, temurin으로 테스트해보았다.
예상대로 17-JDK (419.47 MB) > 17-JDK-alpine (335.97 MB) > 17-JRE (262.53 MB) > 17-JRE-alpine (185.34 MB) 순으로 용량이 줄어들었다.
JDK에서 JRE로 바꾸기만 해도 용량이 반토막이 나고, alpine으로 바꾸면 거기에 또 약 80 MB가 줄어든다!!!
여기서 alpine 이란? 보안과 경량화를 목표로 설계된 alpine linux를 기반으로 하여 이미지 크기가 작아 저장 공간을 절약하고 업로드/다운로드 시간이 줄어드는 장점이 있다.
jar 이미지 굽기
FROM eclipse-temurin:17-jre-alpine
# FROM --platform=linux/amd64 eclipse-temurin:17-jre-alpine # ARM 사용 시
RUN mkdir /app
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} /app/app.jar
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
이제 위 이미지와 도커파일을 토대로 JAR 파일을 만들어보면,
빌드된 jar 파일이 66.15 MB 이었는데, 딱 jar 파일만큼 용량이 늘어났다.
하지만 완벽한 것 같은 jre-alpine도 한 가지 단점이 있다.
ARM을 지원하지 않는다는 것... 그래서 --platform=linux/amd64 를 넣었던 것.
17-jre는 멀티 플랫폼을 지원한다.
참고 링크
'TIL ✍️' 카테고리의 다른 글
TIL #114 : Spring Security 없이 PasswordEncoder 이용하기 (0) | 2024.11.13 |
---|---|
TIL #113 : Assertj로 LocalDateTime.now() 단위 테스트 코드 작성하기 (0) | 2024.11.13 |
TIL #111 : ID를 가진 JPA 엔티티 생성 시 SELECT 문이 나가는 문제 (2) | 2024.11.11 |
24/10/04(금) 110번째 TIL : 컴포넌트 스캔 패키지 구조 문제 (0) | 2024.10.07 |
24/09/30(월) 109번째 TIL : 카프카 직렬화 및 역직렬화 (0) | 2024.10.01 |