如何使用Docker 進(jìn)行Java 開發(fā)
這周,我和Anna、Stephan、Timo在慕尼黑的W-Jax開了一個(gè)關(guān)于企業(yè)技術(shù)(特別針對Java)的會(huì)議。沒想到居然有這么多的人對Docker感興趣,但問題是怎么在Docker上進(jìn)行Java開發(fā)呢?我個(gè)人比較喜歡短小的示例,它可以通過包含幾個(gè)小文件的框架幫助你了解某個(gè)技術(shù)。不幸的是,這在Java的世界很難實(shí)現(xiàn),因?yàn)榇蠖鄶?shù)的示例都需要某個(gè)IDE以及適當(dāng)?shù)膶eb框架有所了解。在這篇文章中,我將嘗試使用短小的示例,以幫助你快速學(xué)習(xí)如何在Docker中進(jìn)行Java開發(fā)。
準(zhǔn)備工作
現(xiàn)在有非常多的Java Web框架,但我這里并不打算使用它們。我只想要的是一個(gè)小的框架所以我選擇了Spark,它是一個(gè)基于Java 8的極小的框架。Spark使用Maven作為構(gòu)建工具。
源代碼和配置文件
在這個(gè)例子中你要增加三個(gè)文件:
- Maven的配置文件: pom.xml
- 一個(gè)Java類:Hello.java
- 一個(gè)Dockerfile
如果有讀者等不及了,可以克隆這個(gè)repo:
https://github.com/giantswarm/sparkexample
下面我們會(huì)詳細(xì)解釋這三個(gè)文件的結(jié)構(gòu),你可以此視頻來快速了解。
pom.xml
pom.xml包含一些基本的Maven配置,比如配置Spark所依賴的Java 8。它會(huì)把所有的依賴封裝成一個(gè)大的jar包。我不是 Maven專家,所以我沒法把例子寫得更簡單、更流暢以便讓他們更受歡迎。這是pom文件地址,你可以看看我的配置:https://gist.github.com/luebke … m-xml
Hello.java
pom.xml文件定義mainClass為sparkexample.Hello,我們需要在src/main/java/sparkexample/目錄下創(chuàng)建Hello.java文件。
Dockerfile
***我們來編寫Dockerfile文件,這個(gè)Dockerfile使用到了Java鏡像(java:oracle-java8),并從安裝Maven開始做起。下一步它會(huì)安裝項(xiàng)目依賴。我們通過pom.xml來解析這些依賴,正如你所看到的,它允許Docker緩存這些依賴。下一步,我們要編譯打包我們的應(yīng)用,并啟動(dòng)應(yīng)用。如果我們重建應(yīng)用時(shí),pom.xml文件沒有任何修改,之前的步驟都被緩存下來了,直接到***一步啟動(dòng)應(yīng)用。這可以加快應(yīng)用的重新構(gòu)建速度。
創(chuàng)建和運(yùn)行
一旦這三個(gè)文件已經(jīng)完成,那創(chuàng)建Docker鏡像就變得輕而易舉了。
- $ docker build -t giantswarm/sparkexample .
注意:***啟動(dòng)時(shí)會(huì)花費(fèi)一些時(shí)間,因?yàn)樗惭bMaven并下載所有的依賴。之后再啟動(dòng)就需要幾秒鐘,因?yàn)樗械臇|西都已經(jīng)緩存了。
鏡像創(chuàng)建之后,用下面的命令創(chuàng)建容器:
- docker run -d -p 4567:4567 giantswarm/sparkexample
用下面的命令訪問:
- curl localhost:4567 hello from sparkjava.com
現(xiàn)在可以去修改源碼(返回你想返回的東西)并重新構(gòu)建,這看起來是不是很棒?