• 利用 Docker 构建一个简单的 java 开发编译环境


    目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本。如果想切换自己本地的 Java 开发环境,折腾起来还是需要花费一些时间的,并且日后在不同版本间切换每次都要折腾一次。

    Docker 的出现让我们维护不同版本的开发编译环境变得简单,如果你还不知道什么是 Docker 可以看看 Docker 入门介绍。我们可以采用两种方式来构建 java 的开发环境,一种是在容器内编译运行,一种是在容器外编译运行,下面分别来看看具体如何操作。

    准备工作:首先确保已经安装了 Docker ,如果方便可以提前把 openjdk:8 的镜像拉取下来,到时可以节省大家的时间。本文在 macOs 10.15.7 、Docker 19.03.8 的环境下验证通过。

    容器内编译与运行

    本文以一个简单的 Helloworld 程序为例,工程的文件目录结构及代码如下。

    $ 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
    

    代码的内容。

    public class Helloworld {
        public static void main(String args[]){
            System.out.println("Hello world.
    ");
        }
    }
    

    做好以上准备后,就可以编辑 Dockerfile 的内容。

    FROM openjdk:8  							#基于 openjdk:8 构建镜像
    COPY . /usr/src/myapp  			  #将目录内的代码拷贝到镜像中 /usr/src/myapp 的位置
    WORKDIR /usr/src/myapp  			#将 /usr/src/myapp 设为工作目录
    RUN javac Helloworld.java  	  #运行编译命令,编译 Helloworld.java 程序
    CMD ["java", "Helloworld"]    #执行编译出来的 Helloworld
    

    构建镜像文件。

    $ docker build -t java_in_docker_env_8 . 
    $ docker images # 使用 docker images 命令可以看到构建出来的 java_in_docker_env_8 镜像
    

    运行容器。

    $ 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
    

    可以看到程序的输出,并且看到当前目录下并有没编译出来的结果。但是这种方式每次启动容器的时候都要进行编译,并且没有办法把编译结果进行分享,下一节的内容介绍如何在容器外保存编译结果。

    容器外编译与运行

    工作目录和代码准备与上一节相同,Dockerfile 文件与上一节略有不同。

    FROM openjdk:8
    COPY . /usr/src/myapp
    WORKDIR /usr/src/myapp
    

    构建镜像文件。

    $ docker build -t java_env_8
    $ docker images # 使用 docker images 命令可以看到构建出来的 java_env_8 镜像
    

    编译文件。

    $ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java_env_8 javac Helloworld.java
    $ ls -lh	# 可以看到编译出来的结果
    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
    

    运行程序。

    $ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java_env_8 java Helloworld      
    Hello world.
    
    
    

    写在最后

    本文仅仅构建了一个简单的 java 开发环境,使用这种方式编译运行 java 程序的好处是无需在本地安装 jdk ,在需要为多个 jdk 版本编译程序的时候更加方便。但是对于复杂的工程常常使用 maven 或者 graddle 进行构建,这种项目能否使用本文提到的方式来构建呢,敬请期待本系列的下一篇文章,也欢迎大家关注公众号获得最新的文章推送。如果想要进一步了解 Docker 的相关知识,可以参考我之前的文章。

    参考资料

    1. Docker - Create a Java development environment
  • 相关阅读:
    asp.net textbox控件readonly为true时,后台取值的问题
    未能加载文件或程序集“ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73”或它的某一个依赖项
    DataSet与DataReader的比较
    EntityFramwork所有 SSDL 项目都必须以同一提供程序为目标。ProviderManifestToken“2008”不同于以前遇到的“2005”
    路由器wan口连接不上的问题
    Git学习(四)----版本号跳转
    jquery记分牌的插件
    ORACLE 第4节 多表查询
    基于消息机制的异步架构之回调函数注冊
    干货!手把手教你怎样高速了解一个行业--游戏产业概况
  • 原文地址:https://www.cnblogs.com/cocowool/p/build_java_dev_with_docker.html
Copyright © 2020-2023  润新知