利用 Docker 构建简单的 java 开发编译环境的方法详解
目前Java语言的版本很多,除了常用的Java8,有一些遗留项目可能使用了Java7,也可能有一些比较新的的项目使用了Java10以上的版本。如果想切换自己本地的Java开发环境,折腾起来还是需要花费一些时间的,并且日后在不同版本间切换每次都要折腾一次。
Docker的出现让我们维护不同版本的开发编译环境变得简单,如果你还不知道什么是Docker可以看看Docker入门介绍。我们可以采用两种方式来构建java的开发环境,一种是在容器内编译运行,一种是在容器外编译运行,下面分别来看看具体如何操作。
准备工作:首先确保已经安装了Docker,如果方便可以提前把openjdk:8的镜像拉取下来,到时可以节省大家的时间。本文在macOs10.15.7、Docker19.03.8的环境下验证通过。
容器内编译与运行
本文以一个简单的Helloworld程序为例,工程的文件目录结构及代码如下。
$ls-lh total24 -rw-r--r--1shiqiangstaff60B111119:02Dockerfile -rw-r--r--1shiqiangstaff123B111119:02Helloworld.java
代码的内容。
publicclassHelloworld{ publicstaticvoidmain(Stringargs[]){ System.out.println("Helloworld.\n"); } }
做好以上准备后,就可以编辑Dockerfile的内容。
FROMopenjdk:8 #基于openjdk:8构建镜像 COPY./usr/src/myapp #将目录内的代码拷贝到镜像中/usr/src/myapp的位置 WORKDIR/usr/src/myapp #将/usr/src/myapp设为工作目录 RUNjavacHelloworld.java #运行编译命令,编译Helloworld.java程序 CMD["java","Helloworld"]#执行编译出来的Helloworld
构建镜像文件。
$dockerbuild-tjava_in_docker_env_8. $dockerimages#使用dockerimages命令可以看到构建出来的java_in_docker_env_8镜像
运行容器。
$dockerrun-it--rmjava_in_docker_env_8 Helloworld. $ls-lh total24 -rw-r--r--1shiqiangstaff112B111210:53Dockerfile -rw-r--r--1shiqiangstaff123B111210:49Helloworld.java
可以看到程序的输出,并且看到当前目录下并有没编译出来的结果。但是这种方式每次启动容器的时候都要进行编译,并且没有办法把编译结果进行分享,下一节的内容介绍如何在容器外保存编译结果。
容器外编译与运行
工作目录和代码准备与上一节相同,Dockerfile文件与上一节略有不同。
FROMopenjdk:8 COPY./usr/src/myapp WORKDIR/usr/src/myapp
构建镜像文件。
$dockerbuild-tjava_env_8 $dockerimages#使用dockerimages命令可以看到构建出来的java_env_8镜像
编译文件。
$dockerrun--rm-v"$PWD":/usr/src/myapp-w/usr/src/myappjava_env_8javacHelloworld.java $ls-lh #可以看到编译出来的结果 total32 -rw-r--r--1shiqiangstaff112B111210:53Dockerfile -rw-r--r--1shiqiangstaff427B111211:09Helloworld.class -rw-r--r--1shiqiangstaff123B111210:49Helloworld.java
运行程序。
$dockerrun--rm-v"$PWD":/usr/src/myapp-w/usr/src/myappjava_env_8javaHelloworld Helloworld.
写在最后
本文仅仅构建了一个简单的java开发环境,使用这种方式编译运行java程序的好处是无需在本地安装jdk,在需要为多个jdk版本编译程序的时候更加方便。但是对于复杂的工程常常使用maven或者graddle进行构建,这种项目能否使用本文提到的方式来构建呢,敬请期待本系列的下一篇文章,也欢迎大家关注公众号获得最新的文章推送。
参考资料Docker-CreateaJavadevelopmentenvironment
到此这篇关于利用Docker构建简单的java开发编译环境的文章就介绍到这了,更多相关docker构建java开发编译环境内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!