code

Java 11 기본 Docker 이미지가 왜 그렇게 큰가요?

codestyles 2020. 8. 22. 08:57
반응형

Java 11 기본 Docker 이미지가 왜 그렇게 큰가요? (openjdk : 11-jre-slim)


Java 11이 최신 LTS 버전으로 발표되었습니다. 그래서 우리는이 Java 버전을 기반으로 새로운 서비스를 시작하려고합니다.

그러나 Java 11의 기본 Docker 이미지는 Java 8에 해당하는 이미지보다 훨씬 큽니다.

(나는 공식 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/
      

      더 깊이 들어가서 나는이 무거움의 "근본"을 발견했습니다. 이것은 modulesJDK 파일입니다.

      # ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
      135M    /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
      

자, 이제 오는 질문 :

  • alpineJava 11 슬림 이미지의 기본 이미지로 더 이상 사용되지 않는 이유는 무엇 입니까?

  • LTS Java 이미지에 불안정한 sid 버전이 사용되는 이유는 무엇 입니까?

  • OpenJDK 11 용 슬림 / 헤드리스 / JRE 패키지가 유사한 OpenJDK 8 패키지에 비해 왜 그렇게 큰가요?

    • OpenJDK 11에서 135MB를 가져 오는 모듈 파일 은 무엇입니까 ?

UPD : 이러한 문제에 대한 솔루션으로 다음 답변을 사용할 수 있습니다. Java 11 애플리케이션을 도커 이미지로 사용


alpineJava 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 : 어제부터 openjdk11Alpine 저장소에서 사용할 수 있습니다! Alpine에서 다음을 사용하여 가져올 수 있습니다.

apk --no-cache add openjdk11

이 패키지는 jdk11uOpenJDK 브랜치와 다음 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)

참고URL : https://stackoverflow.com/questions/53375613/why-is-the-java-11-base-docker-image-so-large-openjdk11-jre-slim

반응형