前言
Java是一門面向?qū)ο蟮膬?yōu)秀編程語言巫击,市場占有率極高爬橡,但是在容器化實踐過程中,發(fā)現(xiàn)官方支持并不友好钝计,同時與其他編程語言的基礎鏡像相比(具體見各語言鏡像比較),確實是非常臃腫齐佳。
本篇僅作探索私恬,希望對大家有所幫助。
目錄
?
Java
官方鏡像
各語言鏡像比較
使用Docker搭建Java開發(fā)環(huán)境
編寫Hello?world!
編寫Dockerfile
構(gòu)建鏡像并執(zhí)行
Java
Java是一門面向?qū)ο缶幊陶Z言炼吴,不僅吸收了C++語言的各種優(yōu)點本鸣,還摒棄了C++里難以理解的多繼承、指針等概念硅蹦,因此Java語言具有功能強大和簡單易用兩個特征荣德。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚撏郏试S程序員以優(yōu)雅的思維方式進行復雜的編程涮瞻。
Java具有簡單性、面向?qū)ο蠹偻省⒎植际绞鹧省⒔研浴踩允燃邸⑵脚_獨立與可移植性艇抠、多線程幕庐、動態(tài)性等特點。Java可以編寫桌面應用程序家淤、Web應用程序异剥、分布式系統(tǒng)和嵌入式系統(tǒng)應用程序等。
目前最新的版本為Java?9絮重,以下為官方文檔地址:
https://docs.oracle.com/javase/9/
注意 值得注意的是冤寿,Oracle (甲骨文)公司宣布,“2019年1月之后”青伤,如果沒有獲得Oracel公司的商業(yè)許可證督怜,Java SE 8(注:Java SE為Java平臺標準版的簡稱)將不會再收到公開更新,也將無法用于“商業(yè)或生產(chǎn)用途”狠角。目前收費標準為号杠,對于?PC,每用戶每月是 2.5 美元丰歌,對于服務器/云部署姨蟋,每個處理器每月是?25 美元。官方鏡像
Java官網(wǎng)鏡像地址為:
https://hub.docker.com/_/java
官方介紹無立帖。在Java社區(qū)眼溶,對Docker的擁抱粒度相對其他語言不是很大,不僅教程相對缺失晓勇,而且官方支持力度不大堂飞。這一點,大家可以通過搜索引擎進一步了解绑咱。不過绰筛,還是有許多Java開發(fā)者也在擁抱Docker。
各語言鏡像比較
寫到這里羡玛,筆者突發(fā)奇想别智,相對主流的鏡像做一個體積比較。
我們可以通過docker images命令來列出本地鏡像稼稿,同時可以使用參數(shù)來進行篩選薄榛。
l?Java
我們可以使用以下命令來查看Java相關(guān)鏡像的大小:
?
600M左右的體積让歼,相對來說敞恋,還是臃腫。我們可以和其他鏡像做一些對比:
l?.NET Core
docker images microsoft/dotnet
運行時鏡像200M左右谋右,而且高版本鏡像越來越輕量硬猫。
l?Python
docker images python
?
l?Php
docker images php?
使用Docker搭建Java開發(fā)環(huán)境
本篇僅做探索,主要解決以下問題:
l?無需搭建Java開發(fā)環(huán)境
l?開發(fā)環(huán)境變化只需更新鏡像即可(比如從Java8改為Java9)
l?無需安裝IDE(比如eclipse)
l?提供一個極簡Demo
編寫Hello?world!
按照碼農(nóng)協(xié)會行業(yè)定律,初學必寫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來編輯上述代碼衬横,支持代碼高亮裹粤,同時還會自動推薦相關(guān)擴展,如下所示:
?
并且還提供完善的文檔教程:
?
編寫Dockerfile
如下所示蜂林,示例Dockerfile文件如下:
# 基于Java 9
FROM?java:9
?
# 設置工作目錄
WORKDIR?/app
?
# 復制文件到工作目錄
COPY?. /app
?
# 設置Java環(huán)境變量
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"]
?
構(gòu)建鏡像并執(zhí)行
接下來遥诉,我們可以執(zhí)行以下命令以構(gòu)建Docker鏡像:
docker build --rm -f "Dockerfile" -t java-hello:latest .
?
構(gòu)建成功后,我們跑起來看效果:
docker run java-hello:latest
?
如果喜歡作者的文章噪叙,請關(guān)注“magiccodes”訂閱號以便第一時間獲得最新內(nèi)容矮锈。本文版權(quán)歸作者和湖南心萊信息科技有限公司共有,歡迎轉(zhuǎn)載睁蕾,但未經(jīng)作者同意必須保留此段聲明苞笨,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權(quán)利子眶。
QQ群:
編程交流群<85318032>?
產(chǎn)品交流群<897857351>
長沙線下技術(shù)社區(qū)已經(jīng)創(chuàng)建猫缭,有興趣者可以通過客服加群。接下來壹店,我們會定期組織一些線下技術(shù)交流分享會,以饗大家芝加。