CentOS7中使用Dockerfile部署后台jar包

场景

使用Dockerfile定制镜像来部署Tomcat项目:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99105626

在上面使用Tomcat部署项目之外,还可以使用Dockfile基于openjdk部署jar包项目。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、新建SpringBoot项目,使用基本的web项目模板,然后添加一个get接口.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/badao")
public class DemoController {

    @GetMapping("/list")
    public String list()
    {
        System.out.println("公众号:霸道的程序猿");
        return "公众号:霸道的程序猿";
    }
}

2、将此服务打成一个jar包,命名为badao.jar,并将次jar包上传到CentOS服务器上

在根目录下新建目录

cd /
mkdir dockerfiledemo

然后将上面的badao.jar上传到该目录下,在此目录下新建Dockerfile文件

vi Dockerfile

然后将此文件的内容修改为:

FROM openjdk:8-jdk-alpine
MAINTAINER "badaodechengxvyuan"
LABEL description="公众号-霸道的程序猿"
WORKDIR app
ADD badao.jar /app/badao.jar
EXPOSE 9090
CMD java -jar /app/badao.jar

3、Dockerfile命令说明

FROM:指定基础镜像,必须为第一个命令

MAINTAINER: 维护者信息

LABEL:用于为镜像添加元数据

ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

WORKDIR:工作目录,类似于cd命令

RUN:构建镜像时执行的命令

CMD:构建容器后调用,也就是在容器启动时才进行调用。

ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

ENV:设置环境变量

EXPOSE:指定于外界交互的端口

VOLUME:用于指定持久化目录

ARG:用于指定传递给构建运行时的变量

USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

ONBUILD:用于设置镜像触发器

4、上面的Dockerfile文件的意思

以openjdk为基础镜像

设置工作目录为app目录

将当前本地目录下badao.jar添加到容器add目录下

暴露9090端口

cmd运行命令启动jar包。

5、编译Dockerfile文件生成Docker镜像

docker build -t badaoimage .

注意这里的镜像名 不能有大写,后面还有一个点

注意:

-t代表目标镜像名

.代表Dockerfile文件路径

如果需要删除旧的镜像

docker rmi 镜像名

构建成功后可以通过

docker images

看到自己构建的镜像

6、运行构建的badaoimage镜像

docker run -d -p 9090:9090 badaoimage

然后查看运行中的容器

docker ps

并且在浏览器中访问get接口成功。

 

并且查看容器运行的输出日志

docker logs -f 容器ID

 

<think>嗯,用户问的是如何在CentOS运行Spring Boot的jar。我得先理清楚步骤,确保每个环节都准确。首先,用户可能已经有一个打好的jar文件,所以需要确认他们是否已经完成打。如果没打的话,可能需要先指导他们用Maven或Gradle构建项目。 然后,运行jar的基本命令是java -jar,但需要Java环境。CentOS默认可能没有安装Java,或者版本太旧。所以第一步应该是检查Java是否安装,以及版本是否符合要求。Spring Boot通常需要Java 8或更高版本,所以需要提醒用户确认版本,如果没安装的话,指导他们安装OpenJDK或者Oracle JDK。 接下来,用户可能需要让jar后台运行,特别是服务器环境下。这时候应该介绍nohup和&的用法,或者使用systemd来创建服务,这样更可靠,还能设置开机启动。systemd的服务文件配置需要详细说明,比如WorkingDirectory、ExecStart这些参数,还有可能需要的环境变量。 另外,日志管理也是一个重要部分。使用nohup的话,输出可能会被重定向到文件,但用systemd的话,可以通过journalctl来查看日志。这里需要提醒用户正确配置日志路径,方便后续排查问题。 安全问题也不能忽视,比如是否应该以root用户运行应用,或者创建一个专门的用户来运行,以降低权限。还有防火墙设置,确保应用的端口是开放的,可能需要用到firewall-cmd命令。 还有可能用户需要考虑如何优雅地停止应用,比如用kill命令发送SIGTERM信号,或者通过systemd来管理。这部分需要简单说明,避免直接使用kill -9导致数据不一致。 最后,可能需要一些优化建议,比如JVM内存参数的调整,或者结合Nginx做反向代理和负载均衡。这些都是提升应用稳定性和性能的常见做法。 得确保每个步骤都清晰,避免遗漏关键点,同时用用户容易理解的语言,结构分明,逐步引导他们完成整个过程。可能还需要提醒常见的坑,比如文件权限问题,或者端口冲突之类的。总之,目标是让用户按照步骤操作后,能够顺利在CentOS运行他们的Spring Boot应用。</think>在CentOS系统中运行Spring Boot的JAR需要以下步骤,分为环境准备、运行配置和优化管理三个阶段: --- ### 一、环境准备 1. **安装Java环境** ```bash # 查看是否已安装Java java -version # 安装OpenJDK 11(推荐) sudo yum install -y java-11-openjdk-devel # 验证安装 which java ``` 2. **上传JAR** ```bash # 使用scp或sftp上传文件到服务器 scp your-app.jar user@centos-server:/opt/app/ ``` --- ### 二、基础运行方式 1. **直接运行** ```bash # 前台运行(退出终端会终止进程) java -jar your-app.jar # 后台运行(退出终端仍保持运行) nohup java -jar your-app.jar > app.log 2>&1 & ``` 2. **查看进程** ```bash ps -ef | grep java ``` --- ### 三、生产环境优化方案 #### 方案1:Systemd服务管理(推荐) 1. **创建服务文件** ```bash sudo vi /etc/systemd/system/springboot-app.service ``` 2. **服务配置模板** ```ini [Unit] Description=Spring Boot Application After=syslog.target [Service] User=appuser WorkingDirectory=/opt/app ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar your-app.jar SuccessExitStatus=143 Restart=always [Install] WantedBy=multi-user.target ``` 3. **操作命令** ```bash # 重载服务配置 sudo systemctl daemon-reload # 启动服务 sudo systemctl start springboot-app # 设置开机启动 sudo systemctl enable springboot-app # 查看日志 journalctl -u springboot-app -f ``` #### 方案2:Docker容器化部署 1. **创建Dockerfile** ```dockerfile FROM openjdk:11-jre VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 2. **构建并运行** ```bash docker build -t springboot-app . docker run -d -p 8080:8080 --name myapp springboot-app ``` --- ### 四、关键注意事项 1. **防火墙配置** ```bash sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --reload ``` 2. **日志管理** - 推荐使用`logrotate`进行日志切割 - Spring Boot默认日志路径:`/var/log/springboot-app/` 3. **内存调优** ```bash # 根据服务器配置调整JVM参数 java -Xms1g -Xmx2g -XX:MaxMetaspaceSize=512m -jar your-app.jar ``` 4. **健康检查** ```bash curl http://localhost:8080/actuator/health ``` --- ### 五、故障排查技巧 1. **查看启动错误** ```bash journalctl -u springboot-app --since "5 minutes ago" ``` 2. **强制终止进程** ```bash # 查找进程ID ps -ef | grep java # 优雅关闭 kill -15 <PID> # 强制终止(慎用) kill -9 <PID> ``` 建议优先使用Systemd方案,它能提供完整的服务生命周期管理、自动重启、日志集成等功能,更适合生产环境使用。对于需要快速迭代的场景,Docker方案可以简化环境依赖管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值