docker最全教程——从理论到实战(十五)(代码片段)

zdalongren zdalongren     2023-04-25     108

关键词:

前言

 

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最全教程——从理论到实战

往期内容链接https://www.cnblogs.com/codelove/p/10030439.htmlhttps://www.cnblogs.com/codelove/p/10036608.htmlhttps://www.cnblogs.com/codelove/p/10056866.html 在笔者参加腾讯容器服务技术交流会时,我们了解到了藏区牧民的目前的生活艰辛状况,因此除了在 查看详情

docker最全教程——从理论到实战

原文:Docker最全教程——从理论到实战(七)在本系列教程中,笔者希望将必要的知识点围绕理论、流程(工作流程)、方法、实践来进行讲解,而不是单纯的为讲解知识点而进行讲解。也就是说,笔者希望能够让大家将理论、... 查看详情

docker最全教程——从理论到实战(十七)(代码片段)

...ore推送钉钉消息获取参数设置消息数据格式发送请求设置Dockerfile运行并设置环境变量推送消息 使用.NETCore推送钉钉消息这里我们使用.NETCore来完成相关需求,注意,这里是.NETCore,而不是ASP.NETCore。需求和上面类似,工程相关... 查看详情

docker最全教程——从理论到实战

原文:Docker最全教程——从理论到实战(八)在本系列教程中,笔者希望将必要的知识点围绕理论、流程(工作流程)、方法、实践来进行讲解,而不是单纯的为讲解知识点而进行讲解。也就是说,笔者希望能够让大家将理论、... 查看详情

docker最全教程——从理论到实战

原文:Docker最全教程——从理论到实战(二)上篇内容链接:https://www.cnblogs.com/codelove/p/10030439.htmlDocker和ASP.NETCoreDocker正在逐渐成为容器行业的事实标准,受到Windows和Linux生态系统领域最重要供应商的支持。(Microsoft是支持Docker的... 查看详情

docker最全教程——从理论到实战

原文:Docker最全教程——从理论到实战(三)往期链接:https://www.cnblogs.com/codelove/p/10030439.htmlhttps://www.cnblogs.com/codelove/p/10036608.html  写在前面容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这... 查看详情

docker最全教程——从理论到实战

原文:Docker最全教程——从理论到实战(六)托管到腾讯云容器服务托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅。 自建还是托管?在开始之前,我们... 查看详情

docker最全教程——从理论到实战

原文:Docker最全教程——从理论到实战(四)往期内容链接https://www.cnblogs.com/codelove/p/10030439.htmlhttps://www.cnblogs.com/codelove/p/10036608.htmlhttps://www.cnblogs.com/codelove/p/10056866.html 在笔者参加腾讯容器服务技术交流会时,我们了解到了... 查看详情

docker最全教程——从理论到实战

...出品的DevOps服务。主要提供多存储格式的版本管理,支持DockerImage、Binary、HelmCharts 等多种类型文件。同时提供 DevOps 工作流的编排引擎,并且支持编排 DevOps 工作流,以打造更强的持续集成与持续交付力,加快... 查看详情

docker最全教程——从理论到实战

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

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

...是确实是非常犀利。通过本篇,老司机带你使用VSCode玩转Docker——相信阅读本篇之后,无论是初学者还是老手,都可以非常方便的玩转Docker了!所谓是“工欲善其事必先利其器”,VSCode,你值得拥有!目录⊙使用Visua... 查看详情

docker最全教程——从理论到实战

Docker和持续集成(CI) 什么是持续集成?我们先得了解持续集成的相关概念,才能更好地指导开发和使用Docker来改进我们的工作流。和其他教程不一样,笔者更喜欢将必要的知识点围绕理论、流程(工作流程)、方法、实践... 查看详情

docker最全教程——从理论到实战

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

docker最全教程——从理论到实战

...,应用很广。本篇主要讲述Ubuntu下使用SSH远程登录并安装Docker,并且提供了Docker安装的两种方式,希望对大家有所帮助。拥抱Linux,大家可以从Ubuntu开始!  Ubuntu下安装Docker首先我们需要准备一个Ubuntu的环境。这里笔者推... 查看详情

docker最全教程——从理论到实战

使用Azure DevOps来完成CIAzureDevOps,以前叫VSTS,现在被微软改名部正式更名为Azure DevOps,说明微软云为先之心仍然蠢蠢欲动。不过和VSTS一样,微软都提供了免费的使用额度,对于小团队和个人开发者来说,完全是足够了。&n... 查看详情

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

本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置。教程中也分享了一个简单的CI、CD流程,仅作探讨。不过由于篇幅有限,完整的DevOps,我们后续独立探讨。  为了降低容器的使用门槛以及... 查看详情

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

...,支持Linux的IoT设备越来越多,比如本文中的树莓派。而Docker,在物联网这块,也提供了一个优秀的解决方案。一方面,真正做到了一次编译,到处运行(包括各种loT设备),而且还很轻量,另一方面,镜像的差异化更新可以减... 查看详情

docker最全教程——从理论到实战

前言容器教程的路还很长,笔者尽量根据实践来不断地完善。由于在编写的过程中还会有完善和补充,后续可能会以番外来补充。接下来会分享TeamCity、树莓派等内容,节奏可能会有点跳脱。另外,长沙.NET社区已经初步成立,有... 查看详情