首先确保已经安装了 Docker ,并且把
openjdk:8
的镜像拉取下来
目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本。如果想切换自己本地的 Java 开发环境,折腾起来还是需要花费一些时间的,并且日后在不同版本间切换每次都要折腾一次。
Docker 的出现让我们维护不同版本的开发编译环境变得简单,如果你还不知道什么是 Docker 可以看看 Docker 入门介绍。我们可以采用两种方式来构建 java 的开发环境,一种是在容器内编译运行,一种是在容器外编译运行,下面分别来看看具体如何操作。
容器内编译与运行
本文以一个简单的 Helloworld 程序为例,工程的文件目录结构及代码如下。
1 | ls -lh |
代码的内容。
1 | public class Helloworld { |
做好以上准备后,就可以编辑 Dockerfile 的内容。
1 | FROM openjdk:8 #基于 openjdk:8 构建镜像 |
构建镜像文件。
1 | docker build -t java_in_docker_env_8 . |
运行容器。
1 | docker run -it --rm java_in_docker_env_8 |
可以看到程序的输出,并且看到当前目录下并有没编译出来的结果。但是这种方式每次启动容器的时候都要进行编译,并且没有办法把编译结果进行分享,下一节的内容介绍如何在容器外保存编译结果。
容器外编译与运行
工作目录和代码准备与上一节相同,Dockerfile 文件与上一节略有不同。
1 | FROM openjdk:8 |
构建镜像文件。
1 | docker build -t java_env_8 |
编译文件。
1 | docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java_env_8 javac Helloworld.java |
运行程序。
1 | docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java_env_8 java Helloworld |
写在最后
本文仅仅构建了一个简单的 java 开发环境,使用这种方式编译运行 java 程序的好处是无需在本地安装 jdk ,在需要为多个 jdk 版本编译程序的时候更加方便。但是对于复杂的工程常常使用 maven 或者 graddle 进行构建。