Java 11 기본 Docker 이미지가 왜 그렇게 큰가요? (openjdk : 11-jre-slim)
Java 11이 최신 LTS 버전으로 발표되었습니다. 그래서 우리는이 Java 버전을 기반으로 새로운 서비스를 시작하려고합니다.
그러나 Java 11의 기본 Docker 이미지는 Java 8에 해당하는 이미지보다 훨씬 큽니다.
openjdk:8-jre-alpine
: 84MBopenjdk:11-jre-slim
: (283) MB
(나는 공식 OpenJDK 와 각 Java 버전에 대한 가장 가벼운 이미지 만을 고려 하고 있습니다.)
심층 조사를 통해 다음과 같은 "사물"이 발견되었습니다.
openjdk:11-jre-slim
이미지는베이스 이미지를 사용한다debian:sid-slim
. 이것은 두 가지 문제를 가져옵니다.이것은 60MB보다 큽니다.
alpine:3.8
데비안
sid
버전은 불안정하다
openjdk-11-jre-headless
화상 설치 패키지는 3 배 이상openjdk8-jre
(도커 컨테이너를 실행하는 내부) :openjdk:8-jre-alpine
:/ # du -hs /usr/lib/jvm/java-1.8-openjdk/jre/lib/ 57.5M /usr/lib/jvm/java-1.8-openjdk/jre/lib/
openjdk:11-jre-slim
:# du -sh /usr/lib/jvm/java-11-openjdk-amd64/lib/ 179M /usr/lib/jvm/java-11-openjdk-amd64/lib/
더 깊이 들어가서 나는이 무거움의 "근본"을 발견했습니다. 이것은
modules
JDK 의 파일입니다.# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
자, 이제 오는 질문 :
alpine
Java 11 슬림 이미지의 기본 이미지로 더 이상 사용되지 않는 이유는 무엇 입니까?LTS Java 이미지에 불안정한 sid 버전이 사용되는 이유는 무엇 입니까?
OpenJDK 11 용 슬림 / 헤드리스 / JRE 패키지가 유사한 OpenJDK 8 패키지에 비해 왜 그렇게 큰가요?
- OpenJDK 11에서 135MB를 가져 오는 이 모듈 파일 은 무엇입니까 ?
UPD : 이러한 문제에 대한 솔루션으로 다음 답변을 사용할 수 있습니다. Java 11 애플리케이션을 도커 이미지로 사용
alpine
Java 11 슬림 이미지의 기본 이미지로 더 이상 사용되지 않는 이유는 무엇 입니까?
슬프게도 현재 Alpine에 대한 공식적인 안정적인 OpenJDK 11 빌드가 없기 때문입니다.
Alpine은 대부분의 Linux에서 사용하는 표준 glibc와 달리 musl libc를 사용합니다. 즉, JVM은 vanilla Alpine을 지원하기 위해 musl libc와 호환되어야합니다. musl OpenJDK 포트는 OpenJDK의 Portola 프로젝트 에서 개발 중 입니다.
현재 상태는 OpenJDK 11 페이지 에 요약되어 있습니다 .
-
이전에이 페이지에서 사용할 수 있었던 Alpine Linux 빌드는 JDK 11 GA에서 제거되었습니다. GA 빌드로 간주 될만큼 철저하게 테스트되지 않았기 때문에 프로덕션 준비 상태가 아닙니다. 그 자리에 얼리 액세스 JDK 12 Alpine Linux 빌드를 사용하십시오.
현재 Alpine의 유일한 안정적인 OpenJDK 버전은 IcedTea 프로젝트 에서 제공하는 7 및 8 입니다.
그러나-공식 OpenJDK가 아닌 다른 것을 고려하고 싶다면 Azul의 Zulu OpenJDK는 매력적인 대안을 제공합니다.
- Alpine musl (작성 당시 버전 11.0.2) 에서 Java 11을 지원합니다 .
- OpenJDK TCK 준수 제품군을 사용하여 검증 된 인증 된 OpenJDK 빌드입니다.
- 무료이며 오픈 소스이며도 커가 준비되어 있습니다 ( Dockerhub ).
지원 가용성 및 로드맵은 Azul 지원 로드맵을 참조하십시오 .
업데이트, 3/6/19 : 어제부터 openjdk11
Alpine 저장소에서 사용할 수 있습니다! Alpine에서 다음을 사용하여 가져올 수 있습니다.
apk --no-cache add openjdk11
이 패키지는 jdk11u
OpenJDK 브랜치와 다음 PR 과 함께 도입 된 Portola 프로젝트의 이식 된 수정 사항을 기반으로합니다 . Alpine 팀에 대한 명성과 큰 감사.
LTS Java 이미지에 불안정한 sid 버전이 사용되는 이유는 무엇 입니까?
공정한 질문 / 요청입니다. 안정적인 데비안 릴리스에서 Java 11을 제공하기위한 공개 티켓이 실제로 있습니다 :
https://github.com/docker-library/openjdk/issues/237
업데이트, 26/12/18 : 문제가 해결되었으며 현재 OpenJDK 11 슬림 이미지는 stretch-backports
최근에 출시 된 OpenJDK 11을 기반 으로합니다 ( PR 링크 ).
Why is the slim/headless/JRE package for OpenJDK 11 so large compared to the similar OpenJDK 8 package? What is this modules file which brings 135 MB in OpenJDK 11?
Java 9 introduced the module system, which is a new and improved approach for grouping packages and resources, compared to jar files. This article from Oracle gives a very detailed introduction to this feature:
https://www.oracle.com/corporate/features/understanding-java-9-modules.html
The modules
file bundles all modules shipped with the JRE. The complete list of modules could be printed with java --list-modules
. modules
is indeed a very large file, and as commented, it contains all standard modules, and it is therefore quite bloated.
One thing to note however is that it replaces rt.jar
and tools.jar
which became deprecated, among other things, so when accounting for the size of modules
when comparing to pre-9 OpenJDK builds, the sizes of rt.jar
and tools.jar
should be subtracted (they should take up some 80MB combined).
as for 07.2019 https://adoptopenjdk.net/ has official Alpine support for Java 11:
However, modules (jmods, jlink
) still shall be considered when one assembles minimal application.
Note: slim images don't contain some modules (like java.sql
) - they are excluded explicitly (https://github.com/AdoptOpenJDK/openjdk-docker/blob/21b8393b9c23f94d6921a56cce27b026537c6ca2/11/jdk/alpine/slim-java.sh#L233)
'code' 카테고리의 다른 글
단일 Git 커밋 리베이스 (0) | 2020.08.23 |
---|---|
Mercurial에서 이식편 사용의 결과 (0) | 2020.08.22 |
R에서 예외 처리 (0) | 2020.08.22 |
Mongo 인터페이스 (0) | 2020.08.22 |
rsync 제외 .gitignore & .hgignore & svn : ignore like --filter = : C (0) | 2020.08.22 |