一千萬個為什麽

搜索

docker沒有Oracle JDK嗎?



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時,其大小增加了一倍以上。我希望碼頭圖像盡可能小,但Oracle JDK似乎比圖像本身更大!

問題</強>

docker沒有Oracle JDK嗎?

轉載註明原文: docker沒有Oracle JDK嗎?

一共有 3 個回答:

不可以。因為您不能分發Oracle JDK或JRE,不允許分發。當由第三方發布(與您的應用程序一起嵌入)時,其無法正常工作的所有責任在該方。這就是為什麽在任何公共Docker註冊表或任何Linux軟件包存儲庫中都找不到Oracle JDK/JRE的原因。

您可以創建自己的映像,並使用 webupd8team/java 安裝Oracle JDK或JRE。 > Ubuntu/Debian軟件包。

如果您正在使用Alpine Linux 此博客文章解釋需要哪些依賴關系,以及鏈接到StackOverflow 以獲取安裝說明。

由於碼頭不是操作系統,因此不存在碼頭的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就在那裏“打包”它們。

You have to do all this in the same RUN command, chaining with && to avoid adding layers where you won't remove size by removing files from previous layer.

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