利用 Docker 构建简单的 java 开发编译环境的方法详解

 更新时间:2020年11月12日 11:58:03   作者:Cocowool  
这篇文章主要介绍了利用 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.\n");
 }
}

做好以上准备后,就可以编辑 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 - Create a Java development environment

到此这篇关于利用 Docker 构建简单的 java 开发编译环境的文章就介绍到这了,更多相关docker构建java开发编译环境内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker部署golang环境详解

    Docker部署golang环境详解

    最近想学习一下golang,自己之前一直把环境全部安装在docker上,所以这次也想把golang的环境安装在docker上,先不废话,直接上手
    2022-08-08
  • 解决nacos启动时防火墙开启8848的坑

    解决nacos启动时防火墙开启8848的坑

    最近操作Nacos时遭遇8848端口无法访问的问题,尝试通过安全组和firewall配置仍无法解决,最终发现,firewall对Docker使用专门的作用域,需要在相应作用域下开放端口,务必检查firewall中针对Docker的设置,确保8848端口在正确的作用域内被允许通行
    2022-10-10
  • Docker进入容器运行命令的详细指南

    Docker进入容器运行命令的详细指南

    Docker 是一个开源的容器化平台,广泛应用于开发和生产环境中,它允许开发者打包应用程序及其依赖项到容器中,本文将详细介绍如何通过 Docker 进入容器内部运行命令,探讨不同的场景和工具,并提供相关代码示例,需要的朋友可以参考下
    2024-11-11
  • Docker的基本命令使用笔记

    Docker的基本命令使用笔记

    这篇文章主要介绍了Docker的基本命令使用笔记,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Docker buildx构建多平台镜像并推送到私有仓库的方法

    Docker buildx构建多平台镜像并推送到私有仓库的方法

    这篇文章主要介绍了Docker buildx构建多平台镜像并推送到私有仓库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Docker容器和本机之间的文件传输方法

    Docker容器和本机之间的文件传输方法

    这篇文章主要介绍了Docker容器和本机之间的文件传输方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 详解CentOS 7 : Docker私有仓库搭建和使用

    详解CentOS 7 : Docker私有仓库搭建和使用

    本篇文章主要介绍了详解CentOS 7 : Docker私有仓库搭建和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • linux和docker下mysql安装方式

    linux和docker下mysql安装方式

    本文详细介绍了在Linux系统中通过命令行安装MySQL的步骤,包括编辑yum源、下载并启动MySQL服务、登录和修改密码等操作,同时,文中也提供了在Docker环境下安装MySQL的流程,涵盖了拉取MySQL镜像、查看运行状态及登录MySQL的方法
    2024-09-09
  • Jenkins构建Docker镜像并推送至Harbor仓库的实现

    Jenkins构建Docker镜像并推送至Harbor仓库的实现

    本文主要介绍了Jenkins构建Docker镜像并推送至Harbor仓库,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 解决docker修改mysql配置文件的问题

    解决docker修改mysql配置文件的问题

    今天在用docker启动一个5.7的数据库在建表时候遇到一个问题,但是很快就解决了,下面小编给大家讲解下docker怎么修改mysql内部的配置,感兴趣的朋友跟随小编一起看看吧
    2022-10-10

最新评论