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