docker容器里面有java运行环境吗(利用 Docker 构建简单的 java 开发编译环境的方法详解)
docker容器里面有java运行环境吗
利用 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开发编译环境内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- net coredocker基础镜像(Docker 部署net5程序实现跨平台功能)
- idea 启动docker容器不重新打包(Docker遇到Intellij IDEA,Java开发提升了十倍生产力)
- docker中运行项目的配置(Docker中搭建配置Git环境的过程)
- docker镜像配置的挂载路径(解决docker挂载的目录无法读写问题)
- docker容器缺少很多命令怎么办(解决docker 容器设置中文语言包出现的问题)
- docker进入redis容器(Docker配置redis哨兵模式的方法多服务器上)
- docker-compose怎么编写(docker-compose部署php项目实例详解)
- zabbix启动教程(docker部署zabbix_agent的方法步骤)
- docker管理工具选择(Docker可视化管理工具DockerUI的使用)
- docker容器里的容器之间通信(Docker容器连接相互通信的实现)
- docker配置redis集群(基于Docker搭建Redis主从集群的实现)
- docker容器状态显示(Docker consul的容器服务更新与发现的问题小结)
- docker分配容器资源(Mac为docker和kubectl添加自动补全命令的方法)
- docker 部署netcore(关于Jenkins + Docker + ASP.NET Core自动化部署的问题避免踩坑)
- docker怎么设置参数(浅谈docker --privileged=true参数作用)
- dockermysql实例(docker 连接宿主Mysql操作)
- 这部动漫中的女孩子,可比101女孩更加励志(这部动漫中的女孩子)
- 《白狐的人生》热拍 贾征宇偶像包袱难自弃 图(白狐的人生热拍)
- 七夕取消了,牛郎织女没做核酸七夕已经取消(牛郎织女没做核酸七夕已经取消)
- 网友抵制 多地取消 夏日祭 为何惹众怒(网友抵制多地取消)
- 兄弟萌,今年的七夕又取消了 思考 思考(今年的七夕又取消了)
- 七夕取消是什么梗(七夕取消是什么梗)
热门推荐
- ubuntu如何卸载clion(Ubuntu16.04安装clion全过程及步骤详解)
- dedecms有哪些功能(织梦DedeCMS v5.7全文检索使用说明sphinx)
- try...catch... finally 的用法
- mysql根据子节点查询父节点(mysql 递归查找菜单节点的所有子节点的方法)
- 读取浏览器历史的行为(解析浏览器的一些“滚动”行为鉴赏)
- html5按钮点击跳转(HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题)
- html5+css样式代码(详解HTML5中CSS外观属性)
- dedecms代码在哪里(dedecms 解决rss相对路径问题)
- sql server使用手册(SQL Server连接查询的实用教程)
- nginx配置文件位置(查看nginx配置文件路径和资源文件路径的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9