ARM64架構下,OpenJDK的官方Docker鏡像為何沒有8...


為什么需要ARM64架構的OpenJDK8的Docker鏡像

對現有的Java應用,之前一直運行在x86處理器環境下,編譯和運行都是JDK8,如今在樹莓派的Docker環境運行(也可能是其他ARM環境,如華為的泰山ARM服務器),需要JDK8鏡像作為基礎鏡像。

OpenJDK的官方Dockerfile

去OpenJDK的docker鏡像官網查找找,地址是:https://hub.docker.com/r/arm64v8/openjdk ,如下圖,只有JDK11的鏡像:

為啥沒有OpenJDK8的鏡像

心中略有不甘,想搞清楚為何沒有,來探索一下;
  • 打開OpenJDK8的官方GitHub,去看鏡像的制作腳本Dockerfile的源碼,地址是:https://github.com/docker-librar ... er/8/jdk/Dockerfile ,注意下圖的內容:
  • 從上圖的分析我們了解到OpenJDK8鏡像制作過程:先獲取當前宿主機的處理器架構,執行命令是$(dpkg --print-architecture),在樹莓派上執行此命令試試,如下,可見得到了$(dpkg --print-architecture)

root@raspbian:~# echo $(dpkg --print-architecture)arm64

  • 看上圖紅框3中的代碼,如果處理器架構是arm64,那么變量upstreamArch就等於aarch64
  • 看上圖紅框4中的代碼,下載OpenJDK包的地址是${JAVA_BASE_URL}${upstreamArch}linux${JAVA_URL_VERSION}.tar.gz,這里面JAVA_BASE_URL、upstreamArch、JAVA_URL_VERSION的值都已經確定了,於是真實的地址就是:

https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u222-b10/OpenJDK8U-jdk_aarch64_linux_8u222b10.tar.gz

結論

OpenJDK官方鏡像的制作原理,是依據宿主機CPU架構去官方下載對應的OpenJDK安裝包,再做成鏡像,目前OpenJKD8的安裝包並沒有提供ARM版本,因此官方沒有提供ARM版本的OpenJDK8的Docker鏡像;

解決之道

現狀是OpenJDK官方在ARM64架構不提供8版本的官方Docker鏡像,解決此問題的思路有兩個(個人觀點,歡迎探討)
  • 自己編譯一個8版本的OpenJDK安裝包,以此來做Docker鏡像;
  • Oracle提供了ARM版本的JDKD安裝包,以此包來做Docker鏡像;
  • 用OpenJDK的11版本,但是11和8的差異要自行處理;
對於第一種方式,自己編譯8版本的OpenJDK,難度太大(對我自己而言),因為編譯OpenJDK需要低版本的OpenJDK作為編譯工具,也就是說我要找到ARM版本的OpenJDK7,才能編譯ARM版本的OpenJDK8,因此我覺得這樣做的難度太大...
對於第二種和第三種,后續的章節我們一起來實戰吧;
更多學習資料可關注:gzitcast


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM