前言

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 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

作者:雪雁
出处:http://www.cnblogs.com/codelove/

Docker最全教程——从理论到实战(十五)的更多相关文章

  1. Docker最全教程——从理论到实战(五)

    往期内容链接 Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) 本篇教程持 ...

  2. Docker最全教程——从理论到实战(八)

    在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...

  3. Docker最全教程——从理论到实战(七)

    在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...

  4. Docker最全教程——从理论到实战(六)

    托管到腾讯云容器服务 托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅.   自建还是托管? 在开始之前,我们先来讨论一个问题——是自建 ...

  5. Docker最全教程——从理论到实战

    Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) Docker最全教程—— ...

  6. Docker最全教程——从理论到实战(一)

    容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这段时间对容器的理解.心得和实践. 本篇教程持续编写了2个星期左右,只是为了大家更好地了解.理解和消化这个技术,能够搭上这波车. 你 ...

  7. Docker最全教程---从理论到实战

    目录 前言 随着生产力的发展尤其是弹性架构的广泛应用(比如微服务),许多一流开发者都将应用托管到了应用容器上,比如Google.微软.亚马逊.腾讯.阿里.京东和新浪. 从未来的发展方向来看,容器引擎将 ...

  8. Docker最全教程——从理论到实战(二十二)

    前言 最近正在抽时间编写k8s的相关教程,很是费时,等相关内容初步完成后,再和大家分享.对于k8s,还是上云更为简单.稳定并且节省成本,因此我们需要对主流云服务的容器服务进行了解,以便更好地应用于生产 ...

  9. Docker最全教程——从理论到实战(四)

    往期内容链接 https://www.cnblogs.com/codelove/p/10030439.html https://www.cnblogs.com/codelove/p/10036608. ...

随机推荐

  1. 不重启 清空tomcat日志

    1.重定向方法清空文件 [root@localhost logs]# du -h catalina.out  查看文件大小17M catalina.out[root@localhost logs]# ...

  2. ubuntu16.04 自建源

    来自于https://www.cnblogs.com/liangqihui/p/7150066.html APT本地源的搭建(可用于局域网apt-get源搭建或者本地源) 本文档介绍使用apt-mir ...

  3. 编写windows服务程序

    2012-11-02 08:54 (分类:计算机程序) windows服务是一个运行在后台并实现勿需用户交互的任务的控制台程序,对于隐藏程序有很大帮助. 用了几天时间概括了编写windows服务程序的 ...

  4. HTTPS原理及流程

    HTTPS为什么更安全:数据对称加密传出,对称密钥使用非对称加密协商. HTTPS就一定安全吗:不一定,如果用户在浏览器端执意访问证书可疑或过期的站点,就存在安全隐患. --- HTTPS实现原理:h ...

  5. cookie的设置与取值

    设置cookie function cookie(key, value, options) { let days let time let result // A key and value were ...

  6. 如何避免FOUC,是如何产生的

    FOUC(Flash Of Unstyled Content)即浏览器样式闪烁或者叫做无样式内存闪烁(用户定义样式表加载之前浏览器使用默认样式显示文档,用户样式加载渲染之后再从新显示文档,造成页面闪烁 ...

  7. centos配置网络yum源 和本地yum源

    一,网络yum源 1.备份 yum文件 cd /etc/ cp -r  yum.repos.d  yum.repos.d.bak 2.在系统联网的情况下执行下面命令下载 wget -O /etc/yu ...

  8. Django 表关系的创建

    Django 表关系的创建 我们知道,表关系分为一对多,多对多,一对一 我们以一个图书管理系统为背景,设计了下述四张表,让我们来找一找它们之间的关系 Book与Publish表 找关系:一对多 左表( ...

  9. Android实战项目——家庭记账本(七)

    今天主要实现了登录注册功能的客户端和服务端,但由于短信接口调用出现问题,导致注册功能还不完整. 截止到今天,APP的功能已经基本完成,后续还会陆陆续续的完善各功能模块与服务端的交互,因为需要和云端关联 ...

  10. HDU-1754 I Hate It (树状数组模板题——单点更新,区间查询最大值)

    题目链接 ac代码(注意字符读入前需要注意回车的影响) #include<iostream> #include<cstdio> #include<cstring> ...