Docker最全教程之使用Docker搭建Java開發環境(十七)
前言
Java是一門面向物件的優秀程式語言,市場佔有率極高,但是在容器化實踐過程中,發現官方支援並不友好,同時與其他程式語言的基礎映象相比(具體見各語言映象比較),確實是非常臃腫。
本篇僅作探索,希望對大家有所幫助。
目錄
-
Java
-
官方映象
-
各語言映象比較
-
使用Docker搭建Java開發環境
-
編寫Hello world!
-
編寫Dockerfile
-
構建映象並執行
Java
Java是一門面向物件程式語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以理解的多繼承、指標等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向物件程式語言的代表,極好地實現了面向物件理論,允許程式設計師以優雅的思維方式進行復雜的程式設計。
Java具有簡單性、面向物件、分散式、健壯性、安全性、平臺獨立與可移植性、多執行緒、動態性等特點。Java可以編寫桌面應用程式、Web應用程式、分散式系統和嵌入式系統應用程式等。
目前最新的版本為Java 9,以下為官方文件地址:
https://docs.oracle.com/javase/9/
注意: 值得注意的是, Oracle (甲骨文)公司宣佈,“2019年1月之後”,如果沒有獲得Oracel公司的商業許可證,Java SE 8 (注: Java SE為Java平臺 標準版 的 簡稱) 將不會再收到公開更新,也將無法用於“商業或生產用途”。 目前收費標準為,對於 PC,每使用者每月是 2.5 美元,對於伺服器/雲部署,每個 處理器 每月是 25 美元 。
官方映象
Java官網映象地址為:
官方介紹無。在Java社群,對Docker的擁抱粒度相對其他語言不是很大,不僅教程相對缺失,而且官方支援力度不大。這一點,大家可以通過搜尋引擎進一步瞭解。不過,還是有許多Java開發者也在擁抱Docker。
各語言映象比較
寫到這裡,筆者突發奇想,相對主流的映象做一個體積比較。
我們可以通過docker images命令來列出本地映象,同時可以使用引數來進行篩選。
- Java
我們可以使用以下命令來檢視Java相關映象的大小:
600M左右的體積,相對來說,還是臃腫。我們可以和其他映象做一些對比:
- NET Core
docker images microsoft/dotnet
執行時映象200M左右,而且高版本映象越來越輕量。
- Python
docker images python
- Php
docker images php
使用Docker搭建Java開發環境
本篇僅做探索,主要解決以下問題:
- 無需搭建Java開發環境
- 開發環境變化只需更新映象即可(比如從Java8改為Java9)
- 無需安裝IDE(比如eclipse)
- 提供一個極簡Demo
編寫Hello world!
按照碼農協會行業定律,初學必寫Hello World,以表達對程式設計世界的敬仰之情。如下面程式碼所示:
//引入名稱空間 import java.util.*; //類 public class Hello{ //程式入口 public static void main(String[] args){ //列印字串(控制檯) System.out.println("Hello World!"); //列印當前時間 System.out.println(new Date()); } }
這裡順便說下,我們使用萬能編輯器VisualStudio Code來編輯上述程式碼,支援程式碼高亮,同時還會自動推薦相關擴充套件,如下所示:
並且還提供完善的文件教程:
編寫Dockerfile
如下所示,示例Dockerfile檔案如下:
# 基於Java 9 FROM java:9 # 設定工作目錄 WORKDIR /app # 複製檔案到工作目錄 COPY . /app # 設定Java環境變數 ENV PATH=$PATH:$JAVA_HOME/bin ENV JRE_HOME=${JAVA_HOME}/jre ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib # 編譯 RUN ["/usr/lib/jvm/java-9-openjdk-amd64/bin/javac","Hello.java"] # 執行 ENTRYPOINT ["/usr/lib/jvm/java-9-openjdk-amd64/bin/java", "Hello"]
構建映象並執行
接下來,我們可以執行以下命令以構建Docker映象:
docker build --rm -f "Dockerfile" -t java-hello:latest .
構建成功後,我們跑起來看效果:
docker run java-hello:latest