专栏首页雪雁的专栏Docker最全教程之使用Docker搭建Java开发环境(十八)

Docker最全教程之使用Docker搭建Java开发环境(十八)

前言 Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿。 本篇仅作探索,希望对大家有所帮助。

Java

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

目前最新的版本为Java 9,以下为官方文档地址:

https://docs.oracle.com/javase/9/

注意

值得注意的是,Oracle (甲骨文)公司宣布,“2019年1月之后”,如果没有获得Oracel公司的商业许可证,Java SE 8(注:Java SE为Java平台标准版的简称)将不会再收到公开更新,也将无法用于“商业或生产用途”。目前收费标准为,对于 PC,每用户每月是 2.5 美元,对于服务器/云部署,每个处理器每月是 25 美元。

官方镜像

Java官网镜像地址为:

https://hub.docker.com/_/java

官方介绍无。在Java社区,对Docker的拥抱粒度相对其他语言不是很大,不仅教程相对缺失,而且官方支持力度不大。这一点,大家可以通过搜索引擎进一步了解。不过,还是有许多Java开发者也在拥抱Docker。

各语言镜像比较

写到这里,笔者突发奇想,相对主流的镜像做一个体积比较。

我们可以通过docker images命令来列出本地镜像,同时可以使用参数来进行筛选。

l Java

我们可以使用以下命令来查看Java相关镜像的大小:

600M左右的体积,相对来说,还是臃肿。我们可以和其他镜像做一些对比:

l .NET Core

docker images microsoft/dotnet

运行时镜像200M左右,而且高版本镜像越来越轻量。

l Python

docker images python

l Php

docker images php

使用Docker搭建Java开发环境

本篇仅做探索,主要解决以下问题:

l 无需搭建Java开发环境

l 开发环境变化只需更新镜像即可(比如从Java8改为Java9)

l 无需安装IDE(比如eclipse)

l 提供一个极简Demo

编写Hello world!

按照码农协会行业定律,初学必写Hello World,以表达对编程世界的敬仰之情。如下面代码所示:

//引入命名空间
import java.util.*;
//类
public class Hello{
 //程序入口
 public static void main(String[] args){
 //打印字符串(控制台)
        System.out.println("Hello World!");
 //打印当前时间
        System.out.println(new Date());
    }
}

这里顺便说下,我们使用万能编辑器VisualStudio Code来编辑上述代码,支持代码高亮,同时还会自动推荐相关扩展,如下所示:

并且还提供完善的文档教程:

编写Dockerfile

如下所示,示例Dockerfile文件如下:

# 基于Java 9

FROM java:9

# 设置工作目录

WORKDIR /app

# 复制文件到工作目录

COPY . /app

# 设置Java环境变量

ENV PATH=$PATH:$JAVA_HOME/bin

ENV JRE_HOME=${JAVA_HOME}/jre

ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

# 编译

RUN ["/usr/lib/jvm/java-9-openjdk-amd64/bin/javac","Hello.java"]

# 运行

ENTRYPOINT ["/usr/lib/jvm/java-9-openjdk-amd64/bin/java", "Hello"]

构建镜像并执行

接下来,我们可以执行以下命令以构建Docker镜像:

docker build --rm -f "Dockerfile" -t java-hello:latest .

构建成功后,我们跑起来看效果:

docker run java-hello:latest

本文分享自微信公众号 - magiccodes(magicodes-)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 花5分钟时间来了解一下高性能网关Kong会有意外收获

    前几天开源发布了 Kong.Net 项目,收到了大量园友的反馈,开源当天就突破了 100 个star ,可喜可贺,但是从侧面也说明,我们 .NetCore 阵营...

    心莱科技雪雁
  • %99的人都不知道的Docker技巧:优雅的终止容器

    如上的各种场景中,都要求打包在容器中的应用程序能够被优雅的终止(也即gracefully shutdown),这种gracefully shutdown的方式,...

    心莱科技雪雁
  • docker stack,docker-compose前世今生

      《docker-compose真香》详细讲述docker-compose容器编排工具的用法,实际上容器编排yml文件在进化到版本3的时候,docker-co...

    心莱科技雪雁
  • Docker最全教程之使用Docker搭建Java开发环境(十七)

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。J...

    雪雁-心莱科技
  • Java基础学习笔记一Java介绍

    Java是sun公司开发的一门编程语言,目前被Oracle公司收购,编程语言就是用来编写软件的。

    緣來
  • 真疯了!Java 9 还没会用,Java 10 就要来了!

    2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,随后,Oracle发言人Donald Smith在他的博客中确认了这一消息。该决定将在...

    IT派
  • 还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢。经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,很多程...

    程序员书单
  • Java技术大牛成就之路

    打个比方吧,这位牛人23岁毕业,做了两年嵌入式C编程,25岁时,突然对Java的优雅设计情有独钟,而正好这时,公司有个Java项目,Java技术之旅开始了。

    java架构师
  • 如何成为一名Java冠军程序员?

    软件工程师的职业生涯里,知识有一个三年的半衰期。这意味着三 年后,你所拥有的一半知识是毫无价值的。举这样一个例子,年纪越大,就越难看到有谁能够了解 TSR(内存...

    java架构师
  • 淘汰?不存在的!Java程序员如何避免职业危机

    Java行业在当下人才是供不应求,但是作为Java程序员的你也得居安思危,你要知道你身处的是一个高速变化的行业,稍不留意你的位置还是存在被取代的风险,那么对于一...

    美的让人心动

扫码关注云+社区

领取腾讯云代金券