如何在 容器中 优雅的 运行 java 应用

这篇具有很好参考价值的文章主要介绍了如何在 容器中 优雅的 运行 java 应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当需要运行Java应用时,不管在机器上还是容器里,一般的做法是运行 java 命令。
java -jar /opt/app.jar 即可
如果是多多jar 文件的只需用到java -cp lib/* com.example.Main 定类路径(classpath)和入口 Java 类即可。
但 在构建容器镜像时,一般使用 Dockerfile 的 ENTRYPOINT 来指定运行的 java 命令。ENTRYPOINT [ "java", "-jar", "/opt/app.jar" ]

直接使用 java 命令的做法,在容器运行时并不灵活。如果想使用 -D 参数来添加新的系统属性,就必须要修改 Dockerfile 中的ENTRYPOINT 定义。这就意味要创建新的镜像,使用起来非常的不方便。

使用 run-java.sh 在容器中 启动Java

脚本地址 run-java.sh

基本用法 (readme.md)

第一类与Java应用相关。

JAVA_APP_DIR 设置应用文件的根目录,默认为 run-java.sh 所在的目录。

JAVA_APP_NAME 设置应用进程的名称。

JAVA_MAJOR_VERSION 设置 JVM 的版本号。默认从 java -version 命令的输出中解析。

第二类与 Java 应用的 classpath 相关。

JAVA_CLASSPATH 设置完整的 classpath。

JAVA_LIB_DIR 设置作为库的 JAR 文件的目录。默认为 JAVA_APP_DIR 的值。

JAVA_APP_JAR 设置可执行的 JAR 文件的路径。

JAVA_MAIN_CLASS 设置入口类的名称。

第三类与Java运行的参数相关。

JAVA_OPTIONS 设置额外的参数。

第四类与运行的内存和 CPU 相关。

JAVA_INIT_MEM_RATIO 设置起始的 heap 尺寸占全部内存的比例。转换成参数 -Xms。值 20 表示 20%。

JAVA_MAX_MEM_RATIO 设置最大的 heap 尺寸占全部内存的比例。转换成参数 -Xmx。值 50 表示 50%。

JAVA_MAX_CORE 设置最大的 CPU 核数。

第五类与调试相关。

JAVA_DEBUG 启用远程调试。

JAVA_DEBUG_SUSPEND 以暂停模式启用远程调试。

JAVA_DEBUG_PORT 设置远程调试的端口。默认为 5005。

第六类与 HTTP 代理相关。

HTTP_PROXY 设置 HTTP 代理。转换成 Java 的系统属性 http.proxyHost 和 http.proxyPort。

HTTPS_PROXY 设置 HTTPS 代理。转换成 Java 的系统属性 https.proxyHost 和 https.proxyPort。

NO_PROXY 设置不使用代理的主机名。转换成 Java 的系统属性 http.nonProxyHosts。

最后一类与应用诊断相关。

JAVA_DIAGNOSTICS 启用输出额外的诊断信息。

举例

就拿 国内 比较火的 开源BI dataease 举例
Dockerfile

FROM registry.cn-qingdao.aliyuncs.com/dataease/fabric8-java-alpine-openjdk8-jre:edge-chromium-11

ARG IMAGE_TAG

RUN mkdir -p /opt/apps /opt/dataease/data/feature/full /opt/dataease/drivers

ADD mapFiles/* /opt/dataease/data/feature/full/

ADD drivers/* /opt/dataease/drivers/

ADD backend/target/backend-$IMAGE_TAG.jar /opt/apps

ENV JAVA_APP_JAR=/opt/apps/backend-$IMAGE_TAG.jar

ENV AB_OFF=true

ENV JAVA_OPTIONS=-Dfile.encoding=utf-8

HEALTHCHECK --interval=15s --timeout=5s --retries=20 --start-period=30s CMD curl -f 127.0.0.1:8081

CMD ["/deployments/run-java.sh"]

定义环境变量

JAVA_APP_DIR=/deployments
JAVA_MAJOR_VERSION=11
JAVA_OPTIONS=-Dfile.encoding=utf-8 
JAVA_APP_JAR=/opt/apps/backend-1.18.9.jar

容器内启动命令为文章来源地址https://www.toymoban.com/news/detail-616822.html

java -Dfile.encoding=utf-8
-Xmx2048m
-XX:MaxPermSize=1024m
-Xss5m
-XX:+UseParallelGC
-XX:GCTimeRatio=4
-XX:AdaptiveSizePolicyWeight=90
-XX:MinHeapFreeRatio=20
-XX:MaxHeapFreeRatio=40
-XX:+ExitOnOutOfMemoryError
-cp . -jar /opt/apps/backend-1.18.9.jar

到了这里,关于如何在 容器中 优雅的 运行 java 应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云原生环境下JAVA应用容器JVM内存如何配置?—— 筑梦之路

    Docker环境下的JVM参数非定值配置 —— 筑梦之路_docker jvm设置-CSDN博客 之前简单地记录过一篇,这里在之前的基础上更加细化一下。 使用Java开发且设置的JVM堆空间过小时,程序会出现系统内存不足OOM(Out of Memory)的问题。事件中心的OOM事件是指系统内存不足时,触发了Linux的

    2024年02月06日
    浏览(47)
  • Gin 笔记(06)— 设置不同启动模式、优雅启动和关闭、运行多个不同端口的服务进程

    SetMode() 这个函数来设置运行的模式,有三种模式可以设置,分别为 gin.ReleaseMode gin.TestMode gin.DebugMode 正式发布时应该设置为发布模式。 运行结果: 我们可以使用 fvbock/endless 来替换默认的 ListenAndServe. 可以参考 #296 有更多的细节。 其它可选的方案 manners: A polite Go HTTP server th

    2024年02月06日
    浏览(78)
  • docker-java 用Java操作docker创建容器并运行运行容器

    参考上一篇文章:Docker设置开启远程访问 Apache HttpClient 5介绍: This transport is based on Apache HttpClient library version 5, which has a great flexibility and allows us to implement all Docker-specific features and protocols required, without having to use internal APIs or anything. It has everything to become the default transport of

    2023年04月09日
    浏览(81)
  • Redis详解,包括安装命令,应用场景,优缺点,案列分析,各个开发语言如何应用

    Redis 是一个基于内存的开源数据库系统,被广泛应用于 Web 应用、消息队列、缓存、实时统计等领域。下面是 Redis 的详解,包括安装命令、应用场景和优缺点,以及案列分析和各个开发语言如何应用。此外,还提供了一些具体代码示例。 Redis 的安装命令因操作系统而异。以下

    2024年02月15日
    浏览(41)
  • 快速上手Spring Boot整合,开发出优雅可靠的Web应用!

    SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来 简化 Spring 应用的 初始搭建 以及 开发过程 。 使用了 Spring 框架后已经简化了我们的开发。而 SpringBoot 又是对 Spring 开发进行简化的,可想而知 SpringBoot 使用的简单及广泛性。既然 SpringBoot 是用来简化 Spring 开发的,

    2024年02月21日
    浏览(41)
  • 如何使用Java进行桌面应用的开发?

    使用Java进行桌面应用的开发可以借助JavaFX或Swing框架。下面为你提供一些基本的步骤: 安装Java开发工具包(JDK):首先,确保你已经安装了Java开发工具包(JDK),并正确配置了环境变量。 选择GUI框架:Java提供了两个主要的桌面GUI框架:JavaFX和Swing。JavaFX是Oracle推荐的最新的

    2024年02月09日
    浏览(48)
  • docker 容器如何查看正在运行容器的端口映射

    1、查看docker容器的版本 2、查看正在运行的容器 3、查看容器的端口映射 总结:到此就完成了查看正在运行容器的端口映射.

    2024年02月12日
    浏览(45)
  • Java如何优雅的进行判空

    实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。 针对异常的处理我们在上一篇有提及: 先来看一下实际项目中一些判空方式 通常我们判断一个对象是否为Null,可以使用java.util中的Objects.nonNull(obj)、hutool中的ObjectUtil或者直接

    2024年02月09日
    浏览(62)
  • 如何优雅地使用Low Code提高开发效率

    2023年,低代码热度有,但是在企业内部核心场景的落地比例不高,推进进展也没有想象中快。就算是这样,低代码赛道也在“暗流涌动”。 数字化趋势下,很多企业想要以数字化的手段进行降本增效 。很多企业希望以低代码的模式,搭建符合自身业务需求的应用。 现在国内

    2024年02月09日
    浏览(65)
  • Docker(镜像、容器、仓库)工具安装使用命令行选项及构建、共享和运行容器化应用程序

    👧个人主页:@小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 🔑本章内容:Docker工具安装使用、命令行选项及构建、共享和运行容器化应用程序时的主要步骤 记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~ 提示:以下是本篇文章正文内容,下面案例可供参考 以下是在常

    2024年02月05日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包