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

前言


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相关镜像的大小:

640?wx_fmt=png

 

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

.NET Core

docker images microsoft/dotnet

640?wx_fmt=png


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

Python

docker images python

640?wx_fmt=png

 

Php

docker images php 

640?wx_fmt=png


使用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来编辑上述代码,支持代码高亮,同时还会自动推荐相关扩展,如下所示:

 

640?wx_fmt=png

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

 

640?wx_fmt=png


编写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 .

 

640?wx_fmt=png

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

docker run java-hello:latest

 

640?wx_fmt=png


640?wx_fmt=png转载是一种动力 分享是一种美德640?wx_fmt=gif

如果喜欢作者的文章,请关注“magiccodes”订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


QQ群:

编程交流群<85318032> 

产品交流群<897857351>


长沙线下技术社区已经创建,有兴趣者可以通过客服加群。接下来,我们会定期组织一些线下技术交流分享会,以飨大家。


640?wx_fmt=png640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AT2705 [AGC019F] Yes or No(组合数学)

解析 Atcoder的题超小的码量总让人做不出来的时候感到很不甘心… 但这题确实挺难的&#xff0c;主要还是魔术一样的奇淫技巧。 大力推式子那个阴间方法我直接选择弃疗。 一个很显然的结论是&#xff1a;肯定回答当前剩的比较多的选项。 pia一张洛谷的图&#xff1a; &#…

Coding Contest HDU - 5988

Coding Contest HDU - 5988 题意&#xff1a; 有n个点&#xff0c;m个边&#xff0c;每个点有人数和食物数&#xff0c;每个人都要吃一份食物&#xff0c;如果该点的食物不够&#xff0c;他们就要去其他点&#xff0c;每个边最多只能走c次&#xff0c;每次有人走一条路&#…

ASP.NET Core 项目简单实现身份验证及鉴权

环境VS 2017ASP.NET Core 2.2目标以相对简单优雅的方式实现用户身份验证和鉴权&#xff0c;解决以下两个问题&#xff1a;无状态的身份验证服务&#xff0c;使用请求头附加访问令牌&#xff0c;几乎适用于手机、网页、桌面应用等所有客户端基于功能点的权限访问控制&#xff0c…

AT4352 [ARC101C] Ribbons on Tree

解析 其实想到了断边按连通块容斥的做法。 但不知道为啥觉得没前途弃了… 悲。 考虑容斥&#xff0c;设 f[x][i] 表示 x 子树内与 x 所连的联通块有 i 个节点的方案数&#xff0c;第三维朴素是记录连通块个数&#xff0c;但其实只需要记一个 0/1 表示奇偶性即可。 然后题解奥…

【无码专区7】括号序列(思维)

因为只有std&#xff0c;没有自我实现&#xff0c;所以是无码专区 主要是为了训练思维能力 solution才是dls正解&#xff0c;但是因为只有潦草几句&#xff0c;所以大部分会有我自己基于正解上面的算法实现过程&#xff0c;可能选择的算法跟std中dls的实现不太一样。 std可能…

2016ICPC青岛

2016ICPC青岛 题号题目难度知识点ARelic Discovery签到贪心BPocket Cube快铜大模拟CPocky签到数论&#xff0c;推公式DLucky CoinsEFibonacciFLambda CalculusGCoding Contest银牌题网络流HPatternITravel BrochureJCliquesKFinding HotelsLTower AttackMGenerator and Monito…

ML.NET 发布0.11版本:.NET中的机器学习,为TensorFlow和ONNX添加了新功能

微软发布了其最新版本的机器学习框架&#xff1a;ML.NET 0.11带来了新功能和突破性变化。新版本的机器学习开源框架为TensorFlow和ONNX添加了新功能&#xff0c;但也包括一些重大变化, 这也是发布RC版本之前的最后一个预览版&#xff0c;这个月底将发布0.12版本&#xff0c;也就…

CF1267G Game Relics(期望、背包)

解析 有些遗憾的一个题。 几乎已经做出来了&#xff0c;但最后把买的代价看成平均数确实没有想到。 还有那个背包我觉得直接做会炸精度&#xff0c;就开始各种玩泥巴。 悲。 比较显然的结论是最优解必然是先抽抽抽然后再买买买。 剩 i 个宝物的时候抽出一个新宝物的期望代价比…

铺地毯(矩形的交+前后缀矩形交)

铺地毯problemsolutioncodeproblem 给定矩阵的长宽 P,QP,QP,Q&#xff0c;矩阵从下往上从左往后编号增加&#xff0c;(0,0)∼(P,Q)(0,0)\sim (P,Q)(0,0)∼(P,Q)。 给定 nnn 张长宽平行于坐标轴的矩形地毯&#xff0c;左下角和右上角的坐标。 求被至少 n−1n-1n−1 张地毯覆盖…

AT2366 [AGC012F] Prefix Median(dp)

解析 确实精妙的一道题。 卡在最后一步dp转化上了&#xff0c;这个转化也确实是本题的难点。 当一个计数难以下手的时候&#xff0c;先想想如何判合法&#xff1f; 不难想到一个较为显然的贪心&#xff1a;假如和上一个一样&#xff0c;就填一个当前的最大值和最小值&#xf…

2020CCPC长春

2020CCPC长春 题号题目难度知识点AKrypton签到01背包BThe Tortoise and the HareCQuantum GeometryDMeaningless Sequence签到推公式EDefense of Valor LeagueFStrange Memory树上启发式合并GMonkey’s KeyboardHCombination LockIKawaii CourierJAbstract PaintingKRagdollLC…

如何使用AWS和Azure的配置存储服务保存读取配置

原文&#xff1a;Want to yank configuration values from your .NET Core apps? 作者&#xff1a;pauljwheeler译文&#xff1a;https://www.cnblogs.com/lwqlun/p/10508748.html译者&#xff1a;Lamond Lu示例源代码&#xff1a;https://github.com/lamondlu/LoadConfigurat…

基站建设(三元环计数+根号分治 / bitset)

基站建设problemsolutioncodeproblem 给定 nnn 个地点&#xff0c;以及每个地点的可靠度 RiR_iRi​。 有 mmm 条光纤架&#xff0c;每一条连接两个不同的地点&#xff0c;且是双向的。 测试基站由 444 个信号塔&#xff0c;有 222 个主信号塔和 222 个副信号塔。 要求主信号…

CF1060F Shrinking Tree(期望、树形dp)

解析 神题。 把每个节点提到根 rt 单独考虑。 设 dpi,jdp_{i,j}dpi,j​ 表示当 rt 进入 i 时子树内还有 j 条边未合并的方案的期望之和&#xff0c;gi,jg_{i,j}gi,j​ 表示当 rt 进入 i 的父亲时 i 的子树内&#xff08;包括连向父亲的边&#xff09;还有 j 条边未合并的方案…

Meaningless Sequence Gym - 102832D

Meaningless Sequence Gym - 102832D 题意&#xff1a; 给你n和c&#xff0c;an的公式如下图 让你求a0…an的和&#xff0c;mod 1e97 题解&#xff1a; 训练时推了好一阵子才和队友推出 我看网上正解为&#xff1a; 一个数的大小与它的二进制表示中的1的个数有关 ac(二进制…

【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务

一、什么是RPCRPC是“远程调用&#xff08;Remote Procedure Call&#xff09;”的一个名称的缩写&#xff0c;并不是任何规范化的协议&#xff0c;也不是大众都认知的协议标准&#xff0c;我们更多时候使用时都是创建的自定义化&#xff08;例如Socket&#xff0c;Netty&#…

【学习笔记】无向图、有向图的三元环、四元环计数问题(根号分支+bitset)

三元环计数和四元环计数问题无向图三元环计数问题根号分治bitset无向图四元环计数问题有向图三四元环计数问题无向图三元环计数问题 根号分治 记 di:id_i:idi​:i 在原图中的度数。 按照以下规则改写无向图为有向图&#xff1a; 对于一条边 u,vu,vu,v。 如果两点度数不同&a…

.net Core2.2 WebApi通过OAuth2.0实现微信登录

前言微信相关配置请参考 微信公众平台 的这篇文章。注意授权回调域名一定要修改正确。微信网页授权是通过OAuth2.0机制实现的&#xff0c;所以我们可以使用 https://github.com/china-live/QQConnect 这个开源项目提供的中间件来实现微信第三方登录的流程。开发流程1、新建一个…

Nginx优化(重点)与防盗链(新版)

Nginx优化(重点)与防盗链 Nginx优化(重点)与防盗链一、隐藏Nginx版本号1、修改配置文件2、修改源代码 二、修改Nginx用户与组1、编译安装时指定用户与组2、修改配置文件指定用户与组 三、配置Nginx网页的缓存时间四、实现Nginx的日志切割1、data的用法2、编写脚本进行日志切割的…

Almost Sorted Array HDU - 5532

Almost Sorted Array HDU - 5532 题意&#xff1a; 如果一个数组的元素“按非递减或非递增顺序排列”&#xff0c;那么称这个数组有序。现在&#xff0c;LYD给了你一个数组a&#xff0c;他让你从中选择并移除仅仅1个元素&#xff0c;请问剩下的元素构成的数组有可能是有序的吗…