部署运行jar包方法全解docker镜像打包部署等

news2024/11/24 13:38:24

基本方法

java -jar 对应的jar包名字

永久后台方法

有一种叫做“nohup”的命令,该命令可以让您的应用程序在后台运行,即使您已经断开了与终端的连接也能保持运行状态。

nohup 命令的语法为:

nohup command arg1 arg2 ... argN &

 其中,command 是要运行的应用程序的命令,arg1、arg2…argN 则是该命令的参数。& 符号表示在后台运行该命令。当运行 nohup 命令时,所有的输出将写入到 nohup.out 文件中。可以通过检查这个文件来查看应用程序在后台运行的状态和输出。如果您想要停止应用程序,请使用 kill 命令,并指定应用程序的进程 ID。

运行jar包的指令

nohup java -jar XXXXXX.jar &

参数解释:

        这个命令将在后台运行 XXXX.jar 的 Java 应用程序,并将输出写入 nohup.out 文件中。您可以使用命令“tail -f nohup.out”来查看该文件的内容,以检查应用程序正在后台运行的状态和输出。

tail -f nohup.out

如果想指定日志的位置以及日志文件名称

nohup java -jar XXXX.jar >> ./log/XXXX.log 2>&1 &

代码参数说明: 

在这个命令中,输出会被重定向到 ./log/XXXX.log 文件中,使用“>>”操作符以追加的方式写入数据。其中“2>&1”表示将标准错误输出(stderr)合并到标准输出(stdout)中,以便将错误信息也写入同一个日志文件中。

这样操作可以让您更好地跟踪和调试应用程序,并根据需要对日志进行分析和处理。

日志位置:

如果将日志输出重定向到指定的日志文件(如 ./XXXX.log),那么日志文件将会在指定的路径中生成。在本例中,日志文件将生成在当前工作目录下的 log 目录中,文件名为 ad.log。

如果没有指定日志输出到特定的文件中,而是使用默认的行为,则在运行 nohup 命令时生成的 nohup.out 文件中包含了输出信息和错误信息。nohup.out 文件将生成在运行命令时的当前目录下。

请注意,日志路径的实际位置取决于在 nohup 命令中指定的路径。可以更改路径,以便生成日志文件的位置适合需求。

停止jar包运行

如果是在 Linux 操作系统上使用 nohup java -jar XXXX.jar & 运行的 jar 包,您可以使用以下命令来查看该进程:根据jar包名来查找运行的jar包

ps -ef | grep XXXXXX.jar

根据端口号来查找运行的jar包

ps -ef | grep <端口号>

这会显示一个包含进程信息的列表,其中包括进程 ID(PID),您可以使用此 ID 杀死进程:

kill

请注意,使用 kill 命令强制终止一个进程可能会导致数据损坏或其他意外的结果,因此请在确保没有正在进行重要操作的情况下使用此命令。

jar包部署docker容器中

思路:

        1、通过数据卷的方式将docker容器中的指定文件夹挂载到宿主机上,更新jar包只上传到宿主机的指定路径就可以。

        2、利用脚本bash文件来运行构建jar包,并构建该bash的镜像,代替直接运行jar包的镜像。利于镜像与jar包之间的关系健康

准备工作

1、在宿主机中创建存放docker配置文件,jar包的文件夹

在宿主机上,创建文件夹: 可以自己指定路径 ,用于存放bash文件和jar包。然后在该文件夹下面,创建一个bash文件和容器的配置文件。

2、创建bash文件

首先要看清楚自己现在所在的路径是否正确,这是我存放的位置。

 在app的文件路径下创建脚本

vi run.sh

下面的是run.sh文件中的内容 

java -jar /usr/data/XXXX.jar

方法说明:

         /usr/data是docker容器内的路径。
这是docker自己管理的,我们不需要真的到docker容器内创建这个路径。
后面会将此路径挂载到当前文件夹:/usr/local/docker/app。这个脚本就是运行在docker容器中的/usr/data下面的指定jar包。

现在肯定有人疑惑,现在的jar包怎么来。或者说现在还没jar包,别急后面我们要挂载数据卷,数据卷中的jar包会同步到容器中去。现在是准备工作。

3、创建容器配置文件

创建一个dockerfile的配置文件,这个很重要再次强调这个文件一定是要在你的文件路径下的,和你的jar包位置在一起。因为这个文件一会要涉及到镜像的生成。

vi Dockerfile

 这个是dockerfile文件中的内容

FROM openjdk:8-jdk-alpine
EXPOSE 需要映射的端口号
ENTRYPOINT ["sh","/usr/data/run.sh"]

 代码说明:

这段代码是一个 Dockerfile,用于在 Docker 容器中启动一个基于 openjdk:8-jdk-alpine 镜像的 Java 应用。各行代码的解释如下:

  • FROM openjdk:8-jdk-alpine:表示此 Dockerfile 基于 openjdk:8-jdk-alpine 镜像构建。
  • EXPOSE XXXX:指定容器将监听的端口号
  • ENTRYPOINT ["sh","/usr/data/run.sh"]:指定容器启动时的命令,即在容器内运行 /usr/data/run.sh 脚本。sh 是指定命令使用的 shell,因为 /usr/data/run.sh 可能需要 shell 解析才能正确执行。ENTRYPOINT 与 CMD 功能相似,但其中指定的命令会被视为不可替代的执行文件,CMD 会被视为 ENTRYPOINT 的参数。
  • 通过“sh”来说明在启动的时候使用sh脚本文件,后面的第二个参数对脚本的位置进行了补充保证执行的时候可以正确的找到位置。
  • /usr/data/run.sh:是一个脚本文件路径,用于启动 Java 应用。

构建镜像

还是在当前文件夹下面开始构建对象,一定要注意最后一个 ‘ . ’ 表示dockerfile文件在当前目录下面。这很重要

docker build -t 给镜像命名:版本号 .

举例说明
docker build -t app:1.0.0 .

请在命名的时候使用 'name:tag'的格式来给镜像命名。

创建容器并运行

docker run -d -it --name=myapp -p XXXX:XXXX -v /usr/local/docker/app:/usr/data app:1.0.0

参数说明:

        重点:

        --name :是我们的容器的名称

        -p XXXX:XXXX:是要将主机的端口号映射到docker这个容器的端口号上去

        -v 挂载数据卷 前面的路径是我们自己设置的路径 后面的路径是docker容器中的路径

        最后是我们运行的容器的名字以及版本号

如果需要在docker重启后自动运行的话(开机自启动)

docker run --restart=always -d -it --name=myapp -p XXXX:XXXX -v /usr/local/docker/app:/usr/data app:1.0.0

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

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

相关文章

金三银四互联网大厂秋招精选 1160 道 Java 面试题答案整理(2023 最新版)

今年的大环境而言&#xff0c;面试成功的难度比往年高了很多&#xff0c;很明显的感受就是&#xff1a;对于今年的 java 开发朋友面试&#xff0c;无论一面还是二面&#xff0c;都开始考验一个 Java 程序员的技术功底和基础。Java 基础掌握不牢&#xff0c;对于一个开发人员来说…

北斗高精度定位赋能智慧港口,千寻位置解决方案落地应用

港口是交通运输的重要节点&#xff0c;也是国家经济发展的重要支撑&#xff0c;其作业效率直接影响着运营效益。随着全球数字化技术的不断革新&#xff0c;我国港口逐渐从传统模式向智能化、数字化的“智慧模式”转变。在这一转型过程中&#xff0c;高精度技术应用的作用愈发重…

伊朗上下5000年简史

提起伊朗&#xff0c;你脑海中首先浮现的是什么&#xff1f; 混乱、保守、战争&#xff1f;穆斯林&#xff1f;抑或是石油&#xff0c;核武器&#xff1f; 这些附着在伊朗头上的标签&#xff0c;使很多人忽略了&#xff0c;它是一个拥有着5000年历史的文明古国&#xff1b;在…

保护视力的软件:定时提醒你休息的桌面工具EyeLeo

文章目录 保护视力的软件&#xff1a;定时提醒你休息的桌面工具EyeLeo什么是EyeLeo为什么要使用&#xff1f;它为什么如此重要&#xff1f;EyeLeo特征 使用说明 保护视力的软件&#xff1a;定时提醒你休息的桌面工具EyeLeo 什么是EyeLeo 官网&#xff1a;http://www.eyeleo.c…

django新手教程

Django简介 Django是开源的、大而且全的Web应用框架。 它独具特色&#xff0c;采用了MTV设计模式。 它也是一款用来构建服务器的框架。这一概念如何理解呢&#xff1f; 应用程序有两种模式&#xff1a;C/S、B/S。 C/S是客户端与服务器端&#xff0c;这类程序一般能独立运行…

【Python】高级语法:推导式、迭代器、生成器、装饰器

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、推导式1.列表推导式2.集合推导式3.字典推导式 二、迭代器三、生成器1.yield 生成器2.元组生成器3.生成器中重要方法 四、装饰器1.函数装饰…

谈谈电商API!

近年来&#xff0c;随着互联网和移动互联网技术的不断发展&#xff0c;电商行业成为了一种新兴的商业模式。电商平台实现了互联网和商品销售的深度融合&#xff0c;成为经济社会发展的重要组成部分。而电商API&#xff08;Application Programming Interface, 应用程序接口&…

RobotFrameWork Web自动化测试之测试环境搭建

前言 Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性&#xff0c;支持关键字驱动&#xff0c;可以同时测试多种类型的客户端或者接口&#xff0c;可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发&#xff08;ATDD&#xff…

自然语言处理实战项目11-阅读理解项目的数据处理与训练详细讲解,实验结果与分析

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理实战项目11-阅读理解项目的数据处理与训练详细讲解&#xff0c;阅读理解任务目标是让计算机从给定的文章中理解并回答问题。为了完成这个任务&#xff0c;我们需要对给定的数据进行处理和训练。该任务是…

项目调研丨多区块并行处理公链 Transformers 研究报告

目录 一、项目简介 二、项目愿景 三、特色和优势 &#xff08;1&#xff09;速度 &#xff08;2&#xff09;安全 &#xff08;3&#xff09;可扩展性 &#xff08;4&#xff09;高度定制 &#xff08;5&#xff09;不可篡改 &#xff08;6&#xff09;所有数据公开透…

怎么防止数据重放攻击——CBC模式【密码学】(7)

目录 一、什么是CBC模式 二、初始化向量 三、异或运算 四、密钥少一位会有影响吗 一、什么是CBC模式 CBC模式中&#xff0c;明文分组在加密前&#xff0c;要与前一组的密文分组进行异或运算&#xff0c;异或运算的结果参与加密函数的运算。 每一个密文分组&#xff0c;都…

解决谷歌翻译无法使用

谷歌翻译无法使用是谷歌官方关闭了中国地区翻译服务。 废话不多说直接上教程&#xff0c;本质就是通过修改hosts文件让translate.googleapis.com域名的IP解析到国内的谷歌服务器IP&#xff0c;网上大部分的教程也是如此。 但是有个问题就是这个IP不稳定可能用了几天就不用了&am…

leetcode 150. 逆波兰表达式求值

2023.6.20 后缀表达式也是栈的经典应用&#xff0c;注意好细节就行&#xff0c;下面直接上代码&#xff1a; class Solution { public:int evalRPN(vector<string>& tokens) {stack<long long> stk;long long result 0;for(int i0; i<tokens.size(); i){i…

兼容性测试对于软件测试来说重要吗?

该测试是软件测试的一个重要部分&#xff0c;它也获得了越来越多的关注和重视。那么&#xff0c;兼容性测试对于软件测试来说重要吗&#xff1f;我们一起往下了解。 首先&#xff0c;兼容性测试可以确保软件在不同的操作系统、硬件平台和设备上能够正常运行。在产品开发过程中&…

Git进阶系列 | 2. Git中的分支策略

Git是最流行的代码版本控制系统&#xff0c;这一系列文章介绍了一些Git的高阶使用方式&#xff0c;从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章&#xff0c;这是第2篇。原文&#xff1a;Branching Strategies in Git[1] 几乎所有的版本控制系统(VCS)都有某种类型的…

【开发细节】SpringBoot项目将接口从HTTP换为HTTPS

证书准备 首先需要生成一个 SSL 证书&#xff0c;可以使用 OpenSSL 工具或者自己的 CA 颁发机构来生成证书&#xff0c;这里就不赘述了。如果是测试阶段&#xff0c;也可以使用 self-signed certificate。 直接使用jdk的keytool生成&#xff0c;具体操作方法如下&#xff1a; …

一个好看美观的登录注册界面的实现

序言&#xff1a;之前介绍那个博客&#xff0c;然后自己搞了这个界面。最近有人和我要&#xff0c;把代码给大家贴出来&#xff0c;提供参考。 首先是这个界面哈 <!DOCTYPE html> <html lang"en"> <head><script src"../static/lib/jquer…

不走弯路!记一个Appium框架运行的实例

目录 前言&#xff1a; 一、框架环境安装 二、测试流程操作 1、安装APK 2、启动 3、服务参数配置 4、脚本录制操作 5、脚本编写 6、脚本执行 三、测试总结 前言&#xff1a; Appium是一个开源的自动化测试框架&#xff0c;用于移动应用程序的自动化测试。它支持在iOS和Andro…

python:使用Scikit-image库的slic函数分割遥感图像

作者:CSDN @ _养乐多_ 本文记录了使用Scikit-image库的skimage.segmentation模块中的slic函数,进行超像素分割的代码。 文章目录 一、slic函数详解二、代码一、slic函数详解 在Scikit-image库的skimage.segmentation模块中,slic函数用于进行超像素分割。该函数的参数含义如…

62、基于51单片机手机APP蓝牙调试助手控制四个LED灯的开关系统设计(程序+原理图+PCB源文件+Proteus仿真+外文文献翻译+元器件清单等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…