利用 Docker 構(gòu)建簡單的 java 開發(fā)編譯環(huán)境的方法詳解
目前 Java 語言的版本很多,除了常用的 Java 8,有一些遺留項(xiàng)目可能使用了 Java 7,也可能有一些比較新的的項(xiàng)目使用了 Java 10 以上的版本。如果想切換自己本地的 Java 開發(fā)環(huán)境,折騰起來還是需要花費(fèi)一些時(shí)間的,并且日后在不同版本間切換每次都要折騰一次。
Docker 的出現(xiàn)讓我們維護(hù)不同版本的開發(fā)編譯環(huán)境變得簡單,如果你還不知道什么是 Docker 可以看看 Docker 入門介紹。我們可以采用兩種方式來構(gòu)建 java 的開發(fā)環(huán)境,一種是在容器內(nèi)編譯運(yùn)行,一種是在容器外編譯運(yùn)行,下面分別來看看具體如何操作。
準(zhǔn)備工作:首先確保已經(jīng)安裝了 Docker ,如果方便可以提前把 openjdk:8
的鏡像拉取下來,到時(shí)可以節(jié)省大家的時(shí)間。本文在 macOs 10.15.7 、Docker 19.03.8 的環(huán)境下驗(yàn)證通過。
容器內(nèi)編譯與運(yùn)行
本文以一個(gè)簡單的 Helloworld 程序?yàn)槔こ痰奈募夸浗Y(jié)構(gòu)及代碼如下。
$ ls -lh total 24 -rw-r--r-- 1 shiqiang staff 60B 11 11 19:02 Dockerfile -rw-r--r-- 1 shiqiang staff 123B 11 11 19:02 Helloworld.java
代碼的內(nèi)容。
public class Helloworld { public static void main(String args[]){ System.out.println("Hello world.\n"); } }
做好以上準(zhǔn)備后,就可以編輯 Dockerfile 的內(nèi)容。
FROM openjdk:8 #基于 openjdk:8 構(gòu)建鏡像 COPY . /usr/src/myapp #將目錄內(nèi)的代碼拷貝到鏡像中 /usr/src/myapp 的位置 WORKDIR /usr/src/myapp #將 /usr/src/myapp 設(shè)為工作目錄 RUN javac Helloworld.java #運(yùn)行編譯命令,編譯 Helloworld.java 程序 CMD ["java", "Helloworld"] #執(zhí)行編譯出來的 Helloworld
構(gòu)建鏡像文件。
$ docker build -t java_in_docker_env_8 . $ docker images # 使用 docker images 命令可以看到構(gòu)建出來的 java_in_docker_env_8 鏡像
運(yùn)行容器。
$ docker run -it --rm java_in_docker_env_8 Hello world. $ ls -lh total 24 -rw-r--r-- 1 shiqiang staff 112B 11 12 10:53 Dockerfile -rw-r--r-- 1 shiqiang staff 123B 11 12 10:49 Helloworld.java
可以看到程序的輸出,并且看到當(dāng)前目錄下并有沒編譯出來的結(jié)果。但是這種方式每次啟動(dòng)容器的時(shí)候都要進(jìn)行編譯,并且沒有辦法把編譯結(jié)果進(jìn)行分享,下一節(jié)的內(nèi)容介紹如何在容器外保存編譯結(jié)果。
容器外編譯與運(yùn)行
工作目錄和代碼準(zhǔn)備與上一節(jié)相同,Dockerfile 文件與上一節(jié)略有不同。
FROM openjdk:8 COPY . /usr/src/myapp WORKDIR /usr/src/myapp
構(gòu)建鏡像文件。
$ docker build -t java_env_8 $ docker images # 使用 docker images 命令可以看到構(gòu)建出來的 java_env_8 鏡像
編譯文件。
$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java_env_8 javac Helloworld.java $ ls -lh # 可以看到編譯出來的結(jié)果 total 32 -rw-r--r-- 1 shiqiang staff 112B 11 12 10:53 Dockerfile -rw-r--r-- 1 shiqiang staff 427B 11 12 11:09 Helloworld.class -rw-r--r-- 1 shiqiang staff 123B 11 12 10:49 Helloworld.java
運(yùn)行程序。
$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java_env_8 java Helloworld Hello world.
寫在最后
本文僅僅構(gòu)建了一個(gè)簡單的 java 開發(fā)環(huán)境,使用這種方式編譯運(yùn)行 java 程序的好處是無需在本地安裝 jdk ,在需要為多個(gè) jdk 版本編譯程序的時(shí)候更加方便。但是對于復(fù)雜的工程常常使用 maven 或者 graddle 進(jìn)行構(gòu)建,這種項(xiàng)目能否使用本文提到的方式來構(gòu)建呢,敬請期待本系列的下一篇文章,也歡迎大家關(guān)注公眾號獲得最新的文章推送。
參考資料Docker - Create a Java development environment
到此這篇關(guān)于利用 Docker 構(gòu)建簡單的 java 開發(fā)編譯環(huán)境的文章就介紹到這了,更多相關(guān)docker構(gòu)建java開發(fā)編譯環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker?制作tomcat鏡像并部署項(xiàng)目的步驟
這篇文章主要介紹了Docker?制作tomcat鏡像并部署項(xiàng)目?,講解如何制作自己的tomcat鏡像,并使用tomcat部署項(xiàng)目,需要的朋友可以參考下2022-10-105分鐘教你實(shí)現(xiàn)用docker搭建Redis集群模式和哨兵模式
本文主要介紹了5分鐘實(shí)現(xiàn)用docker搭建Redis集群模式和哨兵模式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09docker環(huán)境搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺(tái)的教程
這篇文章主要介紹了docker下搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺(tái),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07給docker創(chuàng)建的elasticsearch容器添加密碼簡單步驟
在使用Elasticsearch(ES)Docker容器時(shí),有時(shí)需要設(shè)置密碼來保護(hù)數(shù)據(jù)的安全性,這篇文章主要給大家介紹了關(guān)于給docker創(chuàng)建的elasticsearch容器添加密碼的簡單步驟,需要的朋友可以參考下2024-02-02修改Docker鏡像默認(rèn)存儲(chǔ)位置的方法(解決方法)
這篇文章主要介紹了修改Docker鏡像默認(rèn)存儲(chǔ)位置的方法,如果上面運(yùn)行 Docker 服務(wù),經(jīng)過長時(shí)間的使用,會(huì)使原本就比較大的分區(qū)越來越不夠用。如何更好地的處理這個(gè)問題呢,本文給出解決方案,需要的朋友一起看看吧2021-04-04docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令
這篇文章主要為大家介紹了docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Docker創(chuàng)建一個(gè)Nginx服務(wù)器的方法步驟
使用Dokcer可以很好的對鏡像進(jìn)行管理,創(chuàng)建和使用容器。這篇文章主要介紹了Docker創(chuàng)建一個(gè)Nginx服務(wù)器的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01