没有适用于docker的Oracle JDK吗?


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

当将运行docker映像时,显示以下消息:

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

部署Oracle JDK后,docker映像大小增加了一倍以上!

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

讨论区

谷歌搜索“是否没有适用于Docker的Oracle JDK”时,仅返回指向包含docker的docker映像的某些链接。在Docker映像中部署Oracle JDK时,大小增加了一倍以上。我想使docker映像尽可能小,但是Oracle JDK似乎比映像本身大!

没有适用于docker的Oracle JDK吗?


如果您想讨论@peter,请随时进入chatops :)
Tensibai

Answers:


20

不能。因为您不能分发Oracle JDK或JRE,所以该许可证实际上不允许分发。当由第三方(与您的应用程序一起嵌入)分发时,由于该第三方不起作用,所有责任由该方承担。这就是为什么您不会在任何公共Docker注册表或任何Linux软件包系统信息库中找到Oracle JDK / JRE的原因。

您可以创建自己的映像,并使用适用于Ubuntu / Debian 的webupd8team / java软件包安装Oracle JDK或JRE 。

而且,如果您使用的是Alpine Linux,则此博客文章将说明需要哪些依赖项,并提供指向StackOverflow的链接以获取安装说明。

更新:Oracle现在已在Docker Store上提供了官方Docker映像。https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

链接泊坞窗商店甲骨文Java图像- https://store.docker.com/images/oracle-serverjre-8



我不会依赖它长期可用。如我所写,Oracle的许可证不允许公开分发-只有Oracle可以合法分发其JDK或JRE。因此,基本上,该存储库是非法的,很可能会消失。
Evgeny

可以做的是Dockerfile在GitHub上使用他们的,使用Java获得自己的Docker映像。例如github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/...
叶夫根

并且一旦创建了Docker映像,就可以将其存储在我们的私有Docker注册表中了吗?
030

1
是。该许可证禁止以二进制形式公开分发JDK / JRE。
Evgeny

8

由于docker不是操作系统,因此没有适用于docker的JDK。

据我了解,您的问题是,完整的JDK太大了,无法满足您的需求,在这种情况下,您可以尝试切换到仅JRE并仅包含必要的库。

JDK是Java Development Kit的首字母缩写,JRE是Java Runtime Engine的缩写。“懒惰”由于列出每个所需依赖项的复杂性而导致,没有人只能将其简化为必要的库,但是如果您希望将安装大小减小到最小,那是必须采取的方法。

一种更有用的方法是剥离一些已占用大量空间的已安装东西:

/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实现。他们的推理:

由于所有主要的上游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我同意,我的意图是说:“没有正式的docker镜像,包括Oracle的Oracle JDK”,也许只是JDK和实现之间缺少的“
docker”

糟糕,是的,我的意思是使该特定于Docker。我已经纠正了我的答案。
Peter G
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.