前言

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

本篇仅作探索,希望对大家有所帮助。

目录

  • Java

  • 官方镜像

  • 各语言镜像比较

  • 使用Docker搭建Java开发环境

  • 编写Hello world!

  • 编写Dockerfile

  • 构建镜像并执行

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命令来列出本地镜像,同时可以使用参数来进行筛选。

  • Java

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

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

  • NET Core

docker images microsoft/dotnet

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

  • Python

docker images python

  • Php

docker images php

使用Docker搭建Java开发环境

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

  • 无需搭建Java开发环境
  • 开发环境变化只需更新镜像即可(比如从Java8改为Java9)
  • 无需安装IDE(比如eclipse)
  • 提供一个极简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 

FROM java:

# 设置工作目录

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

Docker最全教程之使用Docker搭建Java开发环境(十七)的更多相关文章

  1. 在 Ubuntu 13.10 中搭建Java开发环境 - 懒人版

    本文记录我在Ubuntu 13.10中搭建Java开发环境. 本文环境: Ubuntu 13.10 x64运行在Win7下的VMware Workstation 10中. 1. 安装JDK与JRE s ...

  2. Jdk1.7+eclipse搭建Java开发环境

    Jdk1.7+eclipse搭建Java开发环境 1.    下载jdk1.7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7 ...

  3. 搭建Java开发环境及相关工具

    本文主要记录下在window环境下,搭建Java开发环境,及需要安装的工具软件说明,旨在方便快速完成这些正真开始开发前的准备工作. 1.JDK安装及环境配置 此处安装JDK1.8的版本,官方下载地址: ...

  4. 腾讯云-搭建 JAVA 开发环境

    搭建 JAVA 开发环境 搭建 JAVA 开发环境 任务时间:18min ~ 20min 此实验教大家如何配置 JDK .Tomcat 和 Mysql 00.安装 JDK JDK 是开发Java程序必 ...

  5. 腾讯云,搭建Java开发环境

    搭建 JAVA 开发环境 任务时间:18min ~ 20min 此实验教大家如何配置 JDK .Tomcat 和 Mysql 安装 JDK JDK 是开发Java程序必须安装的软件,我们查看一下 yu ...

  6. 【IntelliJ IDEA新手入门】IDEA如何快速搭建Java开发环境

    作为IntelliJ IDEA mac新手,IDEA如何快速搭建Java开发环境呢? 今天小编就给大家带来了IntelliJ IDEA mac使用教程,想知道IDEA如何快速搭建Java开发环境?那就 ...

  7. IDEA如何快速搭建Java开发环境

    作为IntelliJ IDEA mac新手,IDEA如何快速搭建Java开发环境呢?今天小编就给大家带来了IntelliJ IDEA mac使用教程,想知道IDEA如何快速搭建Java开发环境? 全局 ...

  8. 搭建Java开发环境之配置环境变量

    前言 初学Java不久的二胖在搭建Java开发环境一步就遇到问题,他不由得感叹:万事开头难啊!但感叹之后它还是鼓足了劲去努力解决它,二胖在电脑上Google了一番,最终环境是搭建成功了,但他心中对&q ...

  9. 搭建java开发环境、使用eclipse编写第一个java程序

    搭建java开发环境.使用eclipse编写第一个java程序 一.Java 开发环境的搭建 1.首先安装java SDK(简称JDK). 点击可执行文件 jdk-6u24-windows-i586. ...

随机推荐

  1. Python(2)深入Python函数定义

    Python学习 Part2:深入Python函数定义 在Python中,可以定义包含若干参数的函数,这里有几种可用的形式,也可以混合使用: 1. 默认参数 最常用的一种形式是为一个或多个参数指定默认 ...

  2. .NET开发微信小程序(基础配置)

    1.微信小程序的必备Model public class WxConfig { /// <summary> /// 小程序的appId /// 登录小程序可以直接看到 /// </s ...

  3. 微信小程序开发库grace vs wepy

    grace和wepy都是辅助小程序开发的开源库,本文对两者做个对比. 注:本文是作者本人的一些拙见,纯粹的技术讨论,不想引起技术信仰之争,欢迎积极.正向的讨论及建议. 如果你还不了解Grace, 请参 ...

  4. 数据库连接池dbcp和c3po的区别

    1 DBCP   DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件. 2.C3P0 是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate ...

  5. Java公开课-06.单例

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

  6. JS中清空字符串前后空格

    在JS 操作的时候 长期会有对字符串的操作, 但是在JS 中不像在C#中 有字符串的方法 Trim() 来对字符串进行处理 .  所以自己写一个对字符串前后清楚空格的方法还是有必要的 以免以后忘记了 ...

  7. What is the best way to handle Invalid CSRF token found in the request when session times out in Spring security

    18.5.1 Timeouts One issue is that the expected CSRF token is stored in the HttpSession, so as soon a ...

  8. springboot集成schedule(深度理解)

    背景 在项目开发过程中,我们经常需要执行具有周期性的任务.通过定时任务可以很好的帮助我们实现. 我们拿常用的几种定时任务框架做一个比较: 从以上表格可以看出,Spring Schedule框架功能完善 ...

  9. valueOf函数详解

    在类型转换中,经常用到方法valueOf()和他toString(),所有对象(包括基本包装类型)都拥有这两个方法.这篇文章我们先看看valueOf()方法.valueOf()方法会将对象转换为基本类 ...

  10. 27.app后端搭建聊天服务器的经历

    现在,聊天功能已经成了社交app的标配了.但是,众多web开发出生的程序员对聊天相关的服务的不了解,带来了很多开发上的困扰.在这篇文章中,根据下面3个方面,谈谈聊天服务. 1.      聊天服务的技 ...