基于Openjdk容器打包运行jar程序
文章目录
- 应用场景
- 基于Openjdk容器打包运行jar程序
- 1.编译项目成jar包
- 2.构建Dockerfile文件
- 精简版-含jar包
- 精简版-不含jar包
- 带注释版-含jar包
- 3.编译Dockerfile成镜像。
- 4.运行镜像:
应用场景
部署多版本jdk的应用程序。
基于Openjdk容器打包运行jar程序
1.编译项目成jar包
编译后的jar包拷贝到有docker环境的机器,比如是jar包文件名为ruoyi-admin.jar
2.构建Dockerfile文件
在jar包所在目录新建Dockerfile文件,填入下面的脚本
- 拷贝jar包文件进去,
- 指定jdk版本和暴露的端口。
- 运行jar包
精简版-含jar包
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER wubingfeng
RUN mkdir -p /ruoyi/server/logs \/ruoyi/server/temp \/ruoyi/skywalking/agent
WORKDIR /ruoyi/server
ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
EXPOSE ${SERVER_PORT}
COPY ./ruoyi-admin.jar ./app.jar
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \# 应用名称 如果想区分集群节点监控 改成不同的名称即可#-Dskywalking.agent.service_name=ruoyi-server \#-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \-jar app.jar \-XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC ${JAVA_OPTS}
精简版-不含jar包
- 比较适用于调试状态需要不断更新jar包,后续把jar包扔到容器映射的宿主机目录,重命名为jar,重启容器即可。
- 基于下面的Dockerfile文件,jar包需要重命名为app.jar
- 该版本运行容器时需要把宿主机的jar包所在目录映射到/ruoyi/server目录
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER wubingfeng
RUN mkdir -p /ruoyi/server/logs \/ruoyi/server/temp \/ruoyi/skywalking/agent
WORKDIR /ruoyi/server
ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
EXPOSE ${SERVER_PORT}
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \# 应用名称 如果想区分集群节点监控 改成不同的名称即可#-Dskywalking.agent.service_name=ruoyi-server \#-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \-jar app.jar \-XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC ${JAVA_OPTS}
带注释版-含jar包
# FROM参数指定基础镜像
FROM openjdk:17.0.2-oraclelinux8# MAINTAINER设置镜像作者信息。
# 可使用更灵活的LABEL参数代替,LABEL可设置任何需要设置的元数据
# LABEL MAINTAINER="wubingfeng"
MAINTAINER wubingfeng# RUN创建工作文件夹
# 尽量使用一个RUN指令来运行多个命令,这样可以减少镜像中的层数。例如,可以使用&&符号连接多个命令,以减少镜像层的数量。
# 多个RUN会导致多个分层,分层多导致镜像体积过大、构建时间增加以及镜像维护困难等问题
RUN mkdir -p /ruoyi/server/logs \/ruoyi/server/temp \/ruoyi/skywalking/agent# WORKDIR设置工作目录
WORKDIR /ruoyi/server# ENV参数定义变量,供后续脚本调用。变量可写在一行ENV里,也可写在多行ENV里。
ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""# 暴露应用端口
EXPOSE ${SERVER_PORT}# 拷贝jar包到容器
# 使用COPY而非ADD除非确实需要自动解压功能
# 如下COPY表示复制当前目录所有文件到容器的/usr/src/myapp目录下
# COPY . /usr/src/myapp
# ADD应用示例:gz扩展名的文件拷贝到容器里并解压
# ADD nginx-1.21.0.tar.gz /usr/local/
# ADD还可以复制远程文件到镜像中
# ADD https://example.com/nginx-1.21.0.tar.gz /usr/local/
# 把我的本地jar包拷贝到容器工作目录
COPY ./target/ruoyi-admin.jar ./app.jar# ENTRYPOINT设置容器启动时执行的命令,最简单的如:
# ENTRYPOINT ["java","-jar","/app/app.jar"]
# 也可复杂一些控制更多的虚拟机参数,如下
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \# 应用名称 如果想区分集群节点监控 改成不同的名称即可#-Dskywalking.agent.service_name=ruoyi-server \#-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \-jar app.jar \-XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC ${JAVA_OPTS}# ENTRYPOINT参数可以在运行容器时传参,但会覆盖dockfile脚本里的ENTRYPOINT参数。
# docker run --name demo3D --rm -it --entrypoint ping demo3:test bing.com.cn# ENTRYPOINT命令基本等同CMD命令,这两个命令都支持支持shell、exec两种形式的语法
# https://zhuanlan.zhihu.com/p/548188679?utm_id=0
# 1.shell格式
# ENTRYPOINT command param1 param2
# 2.exec格式
# ENTRYPOINT ["command", "param1", "param1"]
#通常Docker中推荐使用exec格式语法,原因有二。一方面,shell格式语法下会通过/bin/sh -c来执行命令;另一方面,某些镜像甚至不包含Shell,致使shell格式下的命令无法被正常执行。但使用exec格式时,会无法获取环境变量的值。此时则可以考虑使用shell格式语法
3.编译Dockerfile成镜像。
sudo docker build -t your_image_name:your_tag -f ./your_Dockerfile .
4.运行镜像:
- 含jar包
# 单行命令启动,--add-host是为了容器里的jar包能够访问外部的域名资源,我的数据库用了域名进行连接,与开发环境协同。
docker run -d --name container_name -p 8080:8080 --restart=always --add-host www.bingfengspring.com:172.17.0.1 my-java-image
# 多行脚本启动
#!/bin/bash
docker run -d \--name container_name\-p 8080:8080\--restart=always\--add-host www.bingfengspring.com:172.17.0.1my-java-image
- 不含jar包:适合调试阶段不断更新jar包,重启容器即可。
# 单行命令启动,--add-host是为了容器能够访问外部的域名资源,与开发环境协同。
docker run -d --name container_name -p 8080:8080 -v 宿主机jar包目录:/ruoyi/server --restart=always --add-host www.bingfengspring.com:172.17.0.1 my-java-image
# 多行脚本启动
#!/bin/bash
docker run -d \--name ruoyi_admin_nojar\-p 8080:8080\-v 宿主机jar包目录:/ruoyi/server\--restart=always\--add-host www.bingfengspring.com:172.17.0.1\my-java-image
相关文章:
基于Openjdk容器打包运行jar程序
文章目录 应用场景基于Openjdk容器打包运行jar程序1.编译项目成jar包2.构建Dockerfile文件精简版-含jar包精简版-不含jar包带注释版-含jar包 3.编译Dockerfile成镜像。4.运行镜像: 应用场景 部署多版本jdk的应用程序。 基于Openjdk容器打包运行jar程序 1.编译项目…...
DNN学习平台(GoogleNet、SSD、FastRCNN、Yolov3)
DNN学习平台(GoogleNet、SSD、FastRCNN、Yolov3) 前言相关介绍1,登录界面:2,主界面:3,部分功能演示如下(1)识别网络图片(2)GoogleNet分类…...
HTTP协议(超文本传输协议)
HTTP请求消息 http请求消息组成: 请求行 :包含请求的方法 操作资源的地址 协议的版本号 http请求方法: GET:从服务器获取资源 POST:添加资源信息 PUT:请求服务器更新资源信息 DELETE:请…...
FFmpeg的日志系统(ubuntu 环境)
1. 新建.c文件 vim ffmpeg_log.c2. 输入文本 #include<stdio.h> #include<libavutil/log.h> int main() {av_log_set_level(AV_LOG_DEBUG);av_log(NULL,AV_LOG_INFO,"hello world");return 0; }当log level < AV_LOG_DEBUG 都可以印出来 #define A…...
浅析VO、DTO、DO、PO
一、概念介绍 POJO(plain ordinary java object) : 简单java对象,个人感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。一个POJO持久化以后就是PO,直接用它传递、传递…...
android kotlin基础复习 enum
1、kotlin中,关键字enum来定义枚举类型。枚举类型可以包含多个枚举常量,并且每个枚举常量可以有自己的属性和方法。 2、测试代码: enum class Color{RED,YELLOW,BLACK,GOLD,BLUE,GREEN,WHITE }inline fun <reified T : Enum<T>>…...
个股场外期权怎么交易?场外期权交易流程是怎样的?
今天带你了解个股场外期权怎么交易?场外期权交易流程是怎样的?个股场外期权是一种非标准化的期权合约,通常在场外市场(OTC市场)由金融机构和投资者之间进行交易。 场外个股期权主要功能 风险管理: 帮助投…...
企业选ETL还是ELT架构?
作为数据处理的重要工具,ETL工具被广泛使用,同时ETL也是数据仓库中的重要环节。本文将从解释ETL工具是怎么处理数据,同时介绍ELT和ETL工具在企业搭建数据仓库的重要优势。 一、什么是ETL? ETL是Extract-Transform-Load的缩写,将…...
【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS 背景介绍开发环境开发步骤及源码工程目录结构背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是…...
【Android】最好用的网络库:Retrofit
最好用的网络库:Retrofit 文章目录 最好用的网络库:RetrofitRetrofit的基本用法Retrofit的使用逻辑Retrofit的基本操作处理复杂的接口地址类型进阶删除提交header中指定参数 Retrofit构建器的最佳写法Retrofit的使用封装 用户网络请求的接口配置繁琐&…...
SpringBoot自动化配置原理
SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 目的:通过依赖能了解SpringBoot管理了哪些starter 讲解: 通过依赖 spring-boot-dependencies 搜索 starter- 发现非常多的官方starter,并且已经帮助我们管理好了版本。 …...
2024级新生数组字符串专题题解
一、题解: 1.A-[NOIP2005]校门外的树_24级新生数组字符串训练题 (nowcoder.com) 这题常见的解法有两种: 第一种是这道题我们可以直接按照题目意思枚举 #include<bits/stdc.h> #define int long long using namespace std;int road[10010];sig…...
C++学习 虚函数,容器
一、虚函数 虚函数是C中的一种函数,允许子类重写父类中的函数,以便在运行时通过基类指针或引用调用子类的函数实现。虚函数的主要作用是实现多态性,这使得基类指针或引用可以根据实际指向的对象类型调用不同的函数实现。具体用法 虚函数的声…...
MacTalk 测评通义灵码,如何实现“微信表情”小功能?
作者:池建强,墨问西东创始人 前段时间,我写了篇墨问研发团队放弃 GitHub Copilot 的文章,没想到留言区一些读者推荐我们试试通义灵码,说它效果很不错。我呢,一直没腾出时间折腾。 直到月中时,…...
Canvas Confetti - 免费开源的五彩纸屑飞舞特效的 JS 库,多用于在网页上实现欢乐庆祝的场景
今天看科技周刊看到的一个酷炫的动效库,使用简单,视觉效果很好,推荐给大家。 Canvas Confetti 是一个基于 JavaScript 的特效动画库,可以在网页界面上轻松地实现五彩纸屑飞舞的庆祝场景特效。这个特效库封装了几种酷炫的特效&…...
[数据集][目标检测]智慧牧场猪只检测数据集VOC+YOLO格式16245张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):16245 标注数量(xml文件个数):16245 标注数量(txt文件个数):16245 标…...
GS-SLAM论文阅读笔记--LoopSplat
介绍 这篇文章看标题是解决GS-SLAM回环检测的,GS-SLAM回环检测之前文章很少,但他对于SLAM又很重要,确实值得阅读一番。而且这些作者的学校又是很厉害的。 文章目录 介绍1.背景介绍2.关键内容2.1 Gaussian Splatting SLAM2.2 Gaussian Splat…...
Mysql数据库表结构迁移PostgreSQL
1、背景: 公司本来用的数据库都是mysql,为了国产化适配兼容pg和dm。dm提供了数据迁移工具,可以直接做数据迁移,生成脚本之后在其他环境执行。但是pg貌似没有工具能直接用。navicat由于版权问题公司也用不了。pgloader使用总是有问…...
店匠科技携手Stripe共谋电商支付新篇章
在全球电商行业蓬勃发展的背景下,支付环节作为交易闭环的核心,其重要性日益凸显。随着消费者对支付体验要求的不断提高,以及跨境电商的迅猛发展,支付市场正经历着前所未有的变革与挑战。在这一充满机遇与竞争的领域,店匠科技(Shoplazza)凭借其创新的嵌入式支付解决方案—— Sho…...
大众(奥迪)汽车继电器编号对照表
数字功能放大器零件编号1化油器进气歧管加热器40a1719063832燃油泵(CE1 MK1 Golf 和 Early Rocco/cabrio K-Jet,无转速限制器)-443906059A 321906059D/E3燃油泵(CE1 MK1 Golf 和 Early Rocco/cabrio K-Jet,无转速限制器)-4439060594安全带警告继电器5早期 MFA 时钟的换档…...
DownKyi:解锁B站视频收藏与管理的智能工具箱
DownKyi:解锁B站视频收藏与管理的智能工具箱 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。 …...
终极指南:如何用WeChatExporter完整备份你的微信聊天记录
终极指南:如何用WeChatExporter完整备份你的微信聊天记录 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 微信聊天记录里藏着太多珍贵回忆:家人的…...
Omni-Vision Sanctuary赋能Claude等对话Agent:实现文本对话到视觉创作的延伸
Omni-Vision Sanctuary赋能Claude等对话Agent:实现文本对话到视觉创作的延伸 1. 引言:当语言模型遇上视觉创作 想象一下这样的场景:你正在和Claude讨论一个创意方案,描述着脑海中的画面——"我想要一个未来感十足的城市夜景…...
基于Qwen3.5-2B的数据库课程设计智能指导系统
基于Qwen3.5-2B的数据库课程设计智能指导系统 1. 课程设计的痛点与解决方案 每到学期末,计算机专业的学生们都会面临一个共同的挑战——数据库课程设计。从选题到ER图设计,再到SQL编写和报告撰写,整个过程往往让学生们感到无从下手。传统的…...
Phi-4-mini-reasoning效果展示:离散数学关系性质判定与反例构造生成
Phi-4-mini-reasoning效果展示:离散数学关系性质判定与反例构造生成 1. 模型能力概览 Phi-4-mini-reasoning是一个专注于数学推理的轻量级开源模型,基于高质量合成数据训练而成。这个模型特别擅长处理需要逻辑推理的数学问题,尤其是离散数学…...
零基础入门大模型开发:三周实战速成指南
看到同事靠大模型开发拿到高薪offer,你还在犹豫自己不是AI专业?作为一名普通后端开发,我曾经也认为大模型开发高不可攀——直到亲眼目睹同组Java同事仅用一个月就成功转型大模型应用开发,薪资涨幅40%。那一刻我才恍然大悟…...
颠覆式闲鱼智能客服系统:家居卖家7×24小时值守零门槛解决方案
颠覆式闲鱼智能客服系统:家居卖家724小时值守零门槛解决方案 【免费下载链接】XianyuAutoAgent 智能闲鱼客服机器人系统:专为闲鱼平台打造的AI值守解决方案,实现闲鱼平台724小时自动化值守,支持多专家协同决策、智能议价和上下文感…...
企业级C项目必看:clib包管理器的10个最佳实践指南
企业级C项目必看:clib包管理器的10个最佳实践指南 【免费下载链接】clib Package manager for the C programming language. 项目地址: https://gitcode.com/gh_mirrors/cl/clib clib作为C语言的包管理器,能帮助开发者高效管理项目依赖࿰…...
Kettle日志组件实战指南:从基础配置到高级调试
1. Kettle日志组件基础入门 第一次接触Kettle的日志功能时,我完全被各种配置选项搞晕了。后来才发现,这个看似简单的组件其实是调试ETL流程的利器。日志组件位于Kettle的核心对象面板中,你可以直接拖拽到右侧工作区,或者双击它自动…...
树莓派实战:Nextcloud私有云搭建与性能调优全指南
1. 树莓派与Nextcloud的完美组合 如果你手头有一台闲置的树莓派,又想要一个完全由自己掌控的私有云存储,那么Nextcloud绝对是最佳选择。我用了整整三个月时间,在树莓派4B上搭建并优化了Nextcloud系统,实测下来这套方案不仅稳定可靠…...
