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

前言

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/

原文地址:https://www.cnblogs.com/zdalongren/p/12213050.html

时间: 2024-08-29 05:17:14

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

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

原文:Docker最全教程--从理论到实战(五) 往期内容链接 Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) 本篇教程持续编写了3个星期左右并且一直在完善.补充具体的细节和实践,预计全部完成需要1到2个月的时间.由于编写的过程中极其费时,并且还需要配合做一些实践(有些实践存在一些坑,而且极其费时费事).因此目前产出的速度已经跟不上发布的速度了,后续的发布节奏会放慢,请大家多多理解和多多包含. 在这个过程中,我们

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

在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实践之中,而不是拿着字典写文章,抱着宝典写代码.至于很多具体的语法.技术细节,除了常用的知识点,笔者更希望大家阅读官方文档——毕竟看官网比看书靠谱多了,官网会一直更新和改进,而书和教程自出版或发布之后,基本上就“死“了. 本系列教程预计全部完成还需要2到3个月的时间.在这个过程中,您可以加入我们一起讨

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

原文:Docker最全教程--从理论到实战(七) 在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实践之中,而不是拿着字典写文章,抱着宝典写代码.至于很多具体的语法.技术细节,除了常用的知识点,笔者更希望大家阅读官方文档——毕竟看官网比看书靠谱多了,官网会一直更新和改进,而书和教程自出版或发布之后,基本上就“死“了. 本系列教程预计全部完成还需要2

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

原文:Docker最全教程--从理论到实战(六) 托管到腾讯云容器服务 托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅. 自建还是托管? 在开始之前,我们先来讨论一个问题——是自建容器服务还是托管到云容器服务? 这里笔者建议大家托管到云容器服务.对于中小团队来说,很多情况下,团队中的运维人员是缺失的,或者运维人员的水平非常有限——大部分比网吧的网管就好那么一点,从成本.安全(云端产品往往提供了一些解决方案,比如权限控制.灾备.高可

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

原文:Docker最全教程--从理论到实战(二) 上篇内容链接: https://www.cnblogs.com/codelove/p/10030439.html Docker和ASP.NET Core Docker 正在逐渐成为容器行业的事实标准,受到 Windows 和 Linux 生态系统领域最重要供应商的支持. (Microsoft 是支持 Docker 的主要云供应商之一.)现在,Docker 基本上已经在各大云或本地的任何数据中心普及了. 如何将.NET程序托管到Docker之中,相

Docker最全教程——从理论到实战(三)

原文:Docker最全教程--从理论到实战(三) 往期链接: https://www.cnblogs.com/codelove/p/10030439.html https://www.cnblogs.com/codelove/p/10036608.html 写在前面 容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这段时间对容器的理解.心得和实践. 本教程持续编写了2个星期左右并且一直在完善.补充具体的细节和实践,预计全部完成需要1到2个月的时间.由于编写的过程中极其费时,并

Docker最全教程——从理论到实战(九)

使用Tencent Hub来完成CI 关于Tencent Hub Tencent Hub是腾讯出品的DevOps服务.主要提供多存储格式的版本管理,支持Docker Image.Binary.Helm Charts 等多种类型文件.同时提供 DevOps 工作流的编排引擎,并且支持编排 DevOps 工作流,以打造更强的持续集成与持续交付力,加快软件迭代发布速度. 相比Azure DevOps,Tencent Hub主要面对国内开发者,因此在CI这块,更容易水土相符. 使用Tencent Hub

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

本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降低容器的使用门槛以及便于大家将容器技术应用于开发和实践,当前教程大部分线上实践结合TKE(腾讯云容器服务)来进行讲解和实践.当本系列内容讲解完成后,笔者将再单独讲解Kubernetes(k8s). 最后,长沙技术社区第一次线下交流会将在2019年3月10日下午2点开始,有兴趣的朋友可以参与交流.名额

Docker最全教程——从理论到实战(十三)

前言 树莓派(Raspberry Pi)是一台卡片电脑(只有信用卡大小),我们可以使用树莓派做很多事情,比如智能家居的中控.航空器.BT下载器.挖矿机.智能机器人.小型服务器(花生壳+网站)等等. 目前,支持 Linux 的 IoT 设备越来越多,比如本文中的树莓派.而Docker,在物联网这块,也提供了一个优秀的解决方案.一方面,真正做到了一次编译,到处运行(包括各种loT设备),而且还很轻量,另一方面,镜像的差异化更新可以减轻低带宽网络上的压力, 减少连接设备所需的时间量和降低故障概率,使更