ARM架構下的Docker環境,OpenJDK官方沒有8版本映象,如何完美解決?
阿新 • • 發佈:2020-09-28
### 為什麼需要ARM架構下的OpenJDK8的Docker映象?
對現有的Java應用,之前一直執行在x86處理器環境下,編譯和執行都是JDK8,如今在樹莓派的Docker環境執行(或者其他ARM架構電腦,例如華為泰山伺服器),需要JDK8映象作為基礎映象。
### 現在有什麼問題?
在[《ARM64架構下,OpenJDK的官方Docker映象為何沒有8版本?》](https://blog.csdn.net/boling_cavalry/article/details/101908575)一文中,已經確定了OpenJDK官方並未提供8版本的Docker映象,因此,原有的Java應用,如果是基於JDK8編譯和執行的,現在從X86架構轉戰到ARM架構的Docker環境下,就會面臨沒有JDK基礎映象的問題;
### 應對之道
[《ARM64架構下,OpenJDK的官方Docker映象為何沒有8版本?》](https://blog.csdn.net/boling_cavalry/article/details/101908575)一文曾經提到應對之道:
1. 自己編譯一個8版本的OpenJDK安裝包,以此來做Docker映象;
2. Oracle提供了ARM版本的JDKD安裝包,以此包來做Docker映象;
3. 用OpenJDK的11版本,但是11和8的差異要自行處理;
對於第一種方式,自己編譯8版本的OpenJDK,難度太大(對我自己而言),因為編譯OpenJDK需要低版本的OpenJDK作為編譯工具,也就是說我要找到ARM版本的OpenJDK7,才能編譯ARM版本的OpenJDK8,因此我覺得這樣做的難度太大…
今天要討論的是第二種和第三種,
### 環境資訊
1. 硬體:樹莓派4B
2. 作業系統:openfans的64為Debian
3. Docker:19.03.1
4. docker-compose:1.24.1
### 參考文件
1. 在樹莓派4B安裝64位Debian和Docker的方法,請參考[《樹莓派4B安裝64位Linux(不用顯示器鍵盤滑鼠)》](https://xinchen.blog.csdn.net/article/details/100594275)
2. 在樹莓派4B安裝docker-compose的方法,請參考[《樹莓派4B安裝docker-compose(64位Linux)》](https://xinchen.blog.csdn.net/article/details/101105693)
3. 將Java應用製作成Docker映象,請參考[《Docker與Jib(maven外掛版)實戰》](https://blog.csdn.net/boling_cavalry/article/details/94355659)
### Java應用的原始碼
本文要解決的問題是ARM架構的電腦上,如何在Docker環境執行Java應用,因此需要有個Java應用來驗證,這裡找了個最普通的SpringBoot應用,提供一個hello world的http介面,通過jib外掛構建成Docker映象,整個應用的原始碼可以從GitHub上下載,地址和連結資訊如下表所示:
| 名稱 | 連結 | 備註|
| :-------- | :----| :----|
| 專案主頁| https://github.com/zq2599/blog_demos | 該專案在GitHub上的主頁 |
| git倉庫地址(https)| https://github.com/zq2599/blog_demos.git | 該專案原始碼的倉庫地址,https協議 |
| git倉庫地址(ssh)| [email protected]:zq2599/blog_demos.git | 該專案原始碼的倉庫地址,ssh協議 |
這個git專案中有多個資料夾,本章的原始碼在hellojib資料夾下,如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202009/485422-20200928074548117-165052872.jpg) ### 操作步驟簡介 接下來的操作步驟,如下圖所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202009/485422-20200928074549317-2112865738.png) ### ARM機器上安裝JDK 要想在ARM機器上編譯構建hellojib工程,就要把JDK和Maven裝好,先裝JDK; 1. 去Oracle網站下載ARM版本的JDK8,地址是:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ,如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202009/485422-20200928074550432-1673177107.jpg) 2. 上述JDK檔案解壓後是個名為jdk1.8.0_221的資料夾,將此資料夾放在ARM電腦的/usr/lib/jvm目錄下; 3. 開啟檔案~/.bashrc,增加以下內容: ```shell export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_221 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH ``` 4. 執行source ~/.bashrc,使得配置立即生效; 5. 執行命令java -version試試JDK是否已經可用: ```shell root@raspbian:~# java -version java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode) ``` ### ARM機器上安裝Maven 1. 去Maven官網下載安裝包,我這裡下載的是3.6.2版本,地址:https://www-eu.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz 2. 安裝包解壓之後是個名為apache-maven-3.6.2的資料夾,將此資料夾放在ARM電腦的/usr/local目錄下; 3. 開啟檔案~/.bashrc,增加以下內容: ```shell export MAVEN_HOME=/usr/local/apache-maven-3.6.2 export PATH=$MAVEN_HOME/bin:$PATH ``` 4. 執行source ~/.bashrc,使得配置立即生效; 5. 執行命令mvn -version試試maven是否已經可用: ```shell root@raspbian:~# mvn -version Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00) Maven home: /usr/local/apache-maven-3.6.2 Java version: 1.8.0_221, vendor: Oracle Corporation, runtime: /usr/lib/jvm/jdk1.8.0_221/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "4.19.69-openfans+20190906-v8", arch: "aarch64", family: "unix" ``` 折騰了這麼久,總算是完成了準備工作,接下來開始做作映象了; 要把咱們自己的Java應用做成Docker映象,需要有個JDK8映象作為基礎映象,接下來我們來做這個基礎映象; ### 自己動手,做一個JDK8映象 1. 在ARM電腦上新建一個資料夾,裡面新建名為Dockerfile的檔案,內容如下: ```shell #Docker image of JDK8 in ARM64 # VERSION 8 # Author: bolingcavalry #基礎映象使用的是OpenJDK官方映象公用的 FROM buildpack-deps:stretch-scm #作者 MAINTAINER Boling
這個git專案中有多個資料夾,本章的原始碼在hellojib資料夾下,如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202009/485422-20200928074548117-165052872.jpg) ### 操作步驟簡介 接下來的操作步驟,如下圖所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202009/485422-20200928074549317-2112865738.png) ### ARM機器上安裝JDK 要想在ARM機器上編譯構建hellojib工程,就要把JDK和Maven裝好,先裝JDK; 1. 去Oracle網站下載ARM版本的JDK8,地址是:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ,如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202009/485422-20200928074550432-1673177107.jpg) 2. 上述JDK檔案解壓後是個名為jdk1.8.0_221的資料夾,將此資料夾放在ARM電腦的/usr/lib/jvm目錄下; 3. 開啟檔案~/.bashrc,增加以下內容: ```shell export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_221 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH ``` 4. 執行source ~/.bashrc,使得配置立即生效; 5. 執行命令java -version試試JDK是否已經可用: ```shell root@raspbian:~# java -version java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode) ``` ### ARM機器上安裝Maven 1. 去Maven官網下載安裝包,我這裡下載的是3.6.2版本,地址:https://www-eu.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz 2. 安裝包解壓之後是個名為apache-maven-3.6.2的資料夾,將此資料夾放在ARM電腦的/usr/local目錄下; 3. 開啟檔案~/.bashrc,增加以下內容: ```shell export MAVEN_HOME=/usr/local/apache-maven-3.6.2 export PATH=$MAVEN_HOME/bin:$PATH ``` 4. 執行source ~/.bashrc,使得配置立即生效; 5. 執行命令mvn -version試試maven是否已經可用: ```shell root@raspbian:~# mvn -version Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00) Maven home: /usr/local/apache-maven-3.6.2 Java version: 1.8.0_221, vendor: Oracle Corporation, runtime: /usr/lib/jvm/jdk1.8.0_221/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "4.19.69-openfans+20190906-v8", arch: "aarch64", family: "unix" ``` 折騰了這麼久,總算是完成了準備工作,接下來開始做作映象了; 要把咱們自己的Java應用做成Docker映象,需要有個JDK8映象作為基礎映象,接下來我們來做這個基礎映象; ### 自己動手,做一個JDK8映象 1. 在ARM電腦上新建一個資料夾,裡面新建名為Dockerfile的檔案,內容如下: ```shell #Docker image of JDK8 in ARM64 # VERSION 8 # Author: bolingcavalry #基礎映象使用的是OpenJDK官方映象公用的 FROM buildpack-deps:stretch-scm #作者 MAINTAINER Boling