Java工程師如何在Docker上進行開發?本文能讓你以最小的平常開支和預備知識就能夠把Docker和Java結合使用。java
安裝git
如今有不少的Java Web框架,挑選一個很是小的框架,選擇Spark吧!它是一款基於Java-8的微型Sinatra框架。若是你去閱讀Spark的說明文檔,會了解它是用Maven做爲其構建工具。github
在本示例裏,會利用Maven和Docker的分層文件系統(UnionFS),從零開始安裝一切。與此同時,當從新編譯變更的內容時,也須要一些時間。docker
所以,你須要的預備知識是:無需Java,無需Maven,只需Docker。緩存
源代碼和配置文件
app
本例中,你必須得添加如下3個文件:框架
* Maven配置:`pom.xml`
* Java文件:`Hello.java`
* `Dockerfile`curl
若是以爲篇幅過長,能夠直接[克隆以下repo]:jvm
```
git clone https://github.com/giantswarm/sparkexample
```maven
pom.xml
`pom.xml`文件包含一個基本的Maven配置。這個你們都很熟悉的了!它用Java1.8編譯器配置Spark的依賴項,並用全部依賴項建立一個大的jar包。有多大啊?不過確定要比希雲的微鏡像大!若是你還不知道希雲的微鏡像,那你就快OUT了。微鏡像地址:http://csphere.cn/hub
Hello.java
`pom.xml`文件定義了一個類名叫:`sparkexample.Hello`的 main class(主類)。在子路徑`src/main/java/sparkexample/`下建立Hello.java文件。
正如你看到的,這是最新的Java代碼:靜態導入和lambda表達式,使該例子很是緊湊。類包含一個main method(主要方法),響應root請求("/")。像HelloWorld同樣普通,響應只是簡單的字符串。
Dockerfile
最後一個也是,最重要的一個文件:`Dockerfile`
```
FROM java:8
# Install maven
RUN apt-get update
RUN apt-get install -y maven
WORKDIR /code
# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]
# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]
EXPOSE 4567
CMD ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "target/sparkexample-jar-with-dependencies.jar"]
```
基於`java8`,安裝Maven,和構建jar包。(如想構建jdk,jre的docker鏡像請查看http://csphere.cn/hub/jdk)。經過添加pom.xml文件解析依賴項實現構建。
實際操做過程當中會發現,若是咱們不改變pom.xml而想從新編譯app,以前的步驟已被緩存,只運行最後的步驟,這將使重編譯速度更快。這點docker的優點很是明顯!
建立和運行
有以上3個文件後,建立Docker鏡像就變得很是簡單:
$ docker build -t csphere/sparkexample .
注意:第一次構建時,須要等一會。須要先下載安裝Maven,還會下載全部項目依賴項。之後每次編譯啓動只須要幾秒鐘就能夠了,不要問我爲何爲何只需幾秒,由於有緩存。
鏡像建立好後,啓動容器:
$ docker run -d -p 4567:4567 csphere/sparkexample
測試:
$ curl localhost:4567
hello from sparkjava.com
建立鏡像就這麼簡單!如今,能夠去修改源代碼,再從新編譯,是否是很簡單,很棒呢?!
結論
雖然這只是個基礎的例子,可是咱們仍然但願,你勇於嘗試而且熱衷於在Docker上進行Java開發。瞭解更多docker相關知識,請訪問希雲官方網站:https://csphere.cn