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映像的大小为
翻了一倍还多!码头工人返回。在Docker映像中部署Oracle JDK时,大小增加了一倍以上。我想使docker映像尽可能小,但是Oracle JDK似乎比映像本身更大!

评论

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

#1 楼

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

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

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

链接到Docker Store Oracle Java Image -https://store.docker.com/images/oracle-serverjre-8

评论


hub.docker.com/r/anapsix/alpine-java

– 030
17 Mar 8 '17 at 13:40

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

– Evgeny Zislis
17 Mar 8 '17 at 13:41

您可以做的是在GitHub上使用其Dockerfile来使用Java获取自己的Docker映像。例如github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…

– Evgeny Zislis
17 Mar 8 '17 at 13:43

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

– 030
17 Mar 8 '17 at 13:44



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

– Evgeny Zislis
17 Mar 8 '17 at 13:44

#2 楼

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

据我所知,您的完整JDK太大了,在这种情况下,您可以尝试切换到

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目录中是否需要某些东西,但是我不知道您的应用程序是不是。 br />
在安装oracle jdk时,应在dockerfile中做的一件事是删除下载的.tar.gz文件,该文件的大小与生成的目录的大小大致相同,因为.jar文件已经编译ess.tar.gz就在这里,以“打包”它们。从上一层删除文件。

#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"]


评论


有没有官方的Oracle JDK?这似乎有些不正确,或者至少措词不正确。

– Evgeny Zislis
17 Mar 8 '17 at 13:38

@Evgeny我同意,我的意图是说:“没有正式的docker镜像,包括Oracle的Oracle JDK”,也许只是JDK和实现之间缺少的“ docker” ...

–滕西拜
17 Mar 8 '17 at 13:59

糟糕,是的,我的意思是使该特定于Docker。我已经纠正了我的答案。

– Peter G
17 Mar 8 '17 at 19:59