도 커용 Oracle JDK가 없습니까?


15
REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
an-image            1         X              26 seconds ago      279 MB

도커 이미지가 실행될 때 다음 메시지가 표시됩니다.

No java installations was detected.
Please go to http://www.java.com/getjava/ and download

Oracle JDK가 배포되면 도커 이미지 크기가 두 배 이상 증가합니다!

REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
an-image            2         X              26 seconds ago      666 MB

토론

"Docker 용 Oracle JDK가 없습니다"가 표시되면 docker가 포함 된 docker 이미지에 대한 일부 링크 만 반환됩니다. Oracle JDK가 docker 이미지에 배포되면 크기가 두 배 이상 증가합니다. 도커 이미지를 가능한 작게 유지하고 싶지만 Oracle JDK가 이미지 자체보다 큰 것 같습니다!

질문

도 커용 Oracle JDK가 없습니까?


@peter 당신이 그것을 토론하고 싶다면 chatops 에 뛰어 들어 주시기 바랍니다 :)
Tensibai

답변:


20

아니요. Oracle JDK 또는 JRE를 배포수 없으므로 사실상 라이센스는 배포를 허용하지 않습니다 . 앱에 포함 된 타사에서 배포 한 경우 작동하지 않는 모든 책임은 해당 당사자에게 있습니다. 그렇기 때문에 공개 Docker 레지스트리 또는 해당 Linux 패키지 저장소에서 Oracle JDK / JRE를 찾을 수 없습니다.

Ubuntu / Debian 용 webupd8team / java 패키지를 사용하여 고유 한 이미지를 작성하고 Oracle JDK 또는 JRE를 설치할 수 있습니다 .

Alpine Linux를 사용하는 경우이 블로그 게시물 에서는 필요한 종속성과 설치 지침에 대한 StackOverflow 링크를 설명합니다 .

업데이트 : 오라클은 Docker Store 에 공식 Docker 이미지를 보유하고 있습니다. https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

링크 도커 스토어 오라클 자바 이미지 - https://store.docker.com/images/oracle-serverjre-8



나는 그것이 오랫동안 이용 가능하다는 것에 의존하지 않을 것이다. 필자가 쓴 것처럼 Oracle 라이센스는 공개적으로 배포 할 수 없으며 Oracle만이 JDK 또는 JRE를 합법적으로 배포 할 수 있습니다. 따라서 기본적으로이 저장소는 불법이며 사라질 가능성이 높습니다.
Evgeny

당신이 할 수있는 일은 DockerfileGitHub에서 s를 사용 하여 Java로 자신의 Docker 이미지를 얻는 것입니다. 예 : github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny

도커 이미지가 생성되면 개인 도커 레지스트리에 저장할 수 있습니까?
030

1
예. 라이센스는 JDK / JRE를 이진 형식으로 공개적으로 배포하는 것을 금지합니다.
Evgeny

8

docker는 운영 체제가 아니기 때문에 docker 용 JDK는 없습니다.

귀하의 질문을 이해함에 따라 전체 JDK가 귀하가 원하기에 너무 큽니다.이 경우 JRE로 전환하고 필요한 라이브러리 만 포함시킬 수 있습니다.

JDK는 Java Development Kit의 약어이며 JRE는 Java Runtime Engine의 약어입니다. 필요한 모든 의존성을 나열하는 복잡성으로 인해 "lazyness"로 인해 필요한 라이브러리 만 제거 할 수는 없지만 설치된 크기를 최소로 줄이려면이 방법이 필요합니다.

더 유용한 방법은 많은 공간을 차지하는 설치된 것들 중 일부를 제거 할 수 있습니다.

/usr/lib/jvm/jdk1.8.0_101$ du -hs *
776K    bin
4.0K    COPYRIGHT
5.7M    db
208K    include
4.9M    javafx-src.zip
187M    jre
133M    lib
4.0K    LICENSE
2.0M    man
4.0K    README.html
4.0K    release
21M     src.zip
108K    THIRDPARTYLICENSEREADME-JAVAFX.txt
176K    THIRDPARTYLICENSEREADME.txt

제거 할 수있는 두 개의 * src.zip이 있으며 사용하지 않으며 lib 디렉토리의 크기가 절반이며 그 안에 실제로 필요하지 않은 많은 것들이 있습니다.

/usr/lib/jvm/jdk1.8.0_101$ du -hs lib/*
120K    lib/amd64
1.2M    lib/ant-javafx.jar
18M     lib/ct.sym
160K    lib/dt.jar
20K     lib/ir.idl
36K     lib/javafx-mx.jar
400K    lib/jconsole.jar
12K     lib/jexec
60M     lib/missioncontrol
4.0K    lib/orb.idl
8.0K    lib/packager.jar
2.4M    lib/sa-jdi.jar
18M     lib/tools.jar
34M     lib/visualvm

문제없이 서버에서 missoncontrol을 제거 할 수 있습니다 .visualvm도 제거 할 수 있다고 가정합니다.이 lib 디렉토리에 무언가가 필요한지 확인해야하지만 앱을 모르면 알 수 없습니다.

oracle jdk를 설치하는 동안 dockerfile에서해야 할 한 가지는 파일이 이미 압축 .tar.gz되어있는 결과 디렉토리와 거의 동일한 크기 의 다운로드 파일 을 제거하는 .jar것입니다. tar.gz는 파일을 "패키지"하기 위해 있습니다.

이전 레이어에서 파일을 제거하여 크기를 제거하지 않는 레이어를 추가하지 않도록 RUN체인으로 연결 하여 동일한 명령 으로이 모든 작업을 수행해야합니다 &&.


3

Docker가 제공하는 공식 Oracle JDK 구현은 없습니다. Docker 는 hub.docker.com에서 자체 Java 라이브러리 를 지원하는 데 사용 되었지만 "OpenJDK가 처음 도입 된 이후 OpenJDK 전용"이기 때문에 실제 OpenJDK 구현을 선호하여 더 이상 사용되지 않습니다. 그들의 추론 :

모든 주요 업스트림 Linux 배포판은 Oracle Java를 자체 배포 채널로 재배포하지 않으려 고 따라갔습니다. 각 배포에서 Oracle Java를 배포하지 않는 방법에 대해서는 아래 참조를 참조하십시오.

따라서 Docker 이미지를 가능한 작게 유지하려면 OpenJDK를 대신 사용하십시오. 공식 OpenJDK Dockerfile 저장소가 있거나을 사용할 수 있습니다 docker pull openjdk. OpenJDK 7의 기본 "쉬운 실행"Dockerfile은 다음과 같습니다 (이전 문장에 나열된 웹 사이트에서 가져옴).

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]

1
공식 Oracle JDK가 없습니까? 그것은 다소 부정확하거나 적어도 틀린 말로 보입니다.
Evgeny

1
@Evgeny 나는 "Oracle의 Oracle JDK를 포함한 공식 도커 이미지가 없습니다"라고 말하고 JDK와 구현 사이에 "docker"가없는 것 같습니다.
Tensibai

네, Docker를 구체적으로 만들려고했습니다. 내 답변을 수정했습니다.
Peter G
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.