使用Docker+Jar方式部署微服务工程(前后端分离)看着一篇就够了
本篇教程的使用到的技术有springboot、springcloud、Nacos、Docker、Nginx部署前后端分离访问的微服务。
部署一下Nacos
首先我们需要在服务器中(或者本地部署启动一下Nacos),这里我采用服务器的方式进行部署,这里有一点不一样的是数据源采用MySQL5+的方式进行,替换了原先Nacos中默认的Java数据库方式。
大神总结的Docker安装Naocs文章一
大神总结的Docker安装Nacos文章二
这里简单的做一下说明就是需要在文章一中的数据库配置中格外注意需要将Nacos的数据源显示的指明为MySQL5+,如下图所示。

打包一下Docker镜像并上传到指定的位置
这里可以直接使用IDEA自带的工具进行打包,打包完成之后直接上传得到的jar包


在文件所在的目录,使用后台启动的方式执行jar包
这里仔细分享一下大家如何后台启动的方式执行Fat jar
在Spring Boot应用中,一个常见的方式是将应用打包为一个fat jar(或uber jar),这样可以方便地在不同环境下部署和运行。下面是如何在后台启动这样的jar包以及查看其日志的步骤:
如何后台启动Spring Boot的fat jar
-
使用nohup命令启动:
- 在Linux或Unix系统中,你可以使用
nohup命令来启动jar包,以确保即使你关闭了终端或断开了SSH连接,程序仍然可以在后台运行。 - 命令格式如下:
nohup java -jar yourapp.jar > app.log 2>&1 & - 这条命令做了几件事:
nohup:确保命令在用户登出后继续运行。java -jar yourapp.jar:使用Java运行你的jar包。> app.log:将标准输出重定向到app.log文件。2>&1:将标准错误也重定向到标准输出(即app.log文件)。&:将进程放到后台执行。
- 在Linux或Unix系统中,你可以使用
-
使用screen或tmux:
- 这些工具可以创建一个虚拟会话,你可以在其中运行应用程序,然后断开连接,应用仍然在后台运行。
- 使用
screen或tmux,你可以随时重新连接到这个会话来查看应用的输出。
如何查看日志
-
直接查看日志文件:
- 如果你按照上面的命令启动应用,日志将被写入到
app.log文件中。 - 你可以使用
tail命令查看日志文件的内容:tail -f app.log - 这个命令会持续输出新增到
app.log中的日志,非常适合实时监控日志。
- 如果你按照上面的命令启动应用,日志将被写入到
-
配置Spring Boot的日志设置:
- 你可以在应用的
application.properties或application.yml文件中配置日志文件的路径和级别,例如:logging.file.name=application.log logging.level.root=WARN - 这样,Spring Boot会自动将日志写入到指定的文件,你也可以用类似
tail -f的方式查看这个文件。
- 你可以在应用的
这里我采用的是上面nohup命令启动方式。下面简单演示一下启动的命令
启动其中的一个服务
nohup java -jar km-module-base-biz-1.1.1.jar > km-module-base-biz-1.1.1.log 2>&1 &
使用上述命令保证服务可以被重定向到各自的日志中查看。
如何优雅的关闭掉启动的服务
1. 找到运行服务的进程ID(PID)
每个在后台运行的进程都有一个唯一的进程标识号(PID)。你可以使用ps命令结合grep来查找与你的服务相关的PID。假设你的服务名为km-module-base-biz-1.1.1.jar,可以使用如下命令:
ps aux | grep km-module-base-biz-1.1.1.jar
这将列出所有包含服务名的进程。输出通常看起来像这样:
username 1234 0.5 1.2 143036 24508 ? Ssl 10:31 0:01 java -jar km-module-base-biz-1.1.1.jar
在这里,1234是进程ID。
2. 使用kill命令终止进程
一旦你找到了进程ID,你可以使用kill命令来终止它。如果进程不响应普通的kill命令,你可能需要使用更强力的信号,如SIGKILL(信号编号9):
kill 1234
或者,如果进程不响应,你可以使用:
kill -9 1234
3. 验证进程是否已关闭
执行kill命令后,你可以再次运行ps aux | grep km-module-base-biz-1.1.1.jar来确认进程是否已经被成功终止。
注意事项
- 平稳关闭:如果你的应用支持平稳关闭(graceful shutdown),尝试首先只用
kill(发送SIGTERM)来允许应用完成当前任务并释放资源。 - 强制关闭:使用
kill -9(SIGKILL)强制关闭进程,应该是最后的手段,因为它不允许进程进行任何清理操作。
下面展示一下服务启动之后的效果,启动之后会有日志的输出。

在Naocs上会出现服务启动的实例。

前端服务演示如何通过Docker+Nginx打包的方式进行执行
前端服务配置地址信息

打包完成之后会得到对应的dist文件夹。

将dist文件夹上传到服务器中的对应位置

编写一下Docker打包文件信息
# 使用官方Nginx镜像作为基础镜像
FROM nginx:alpine# 将dist目录下的文件复制到容器中的/usr/share/nginx/html目录下
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/conf.d/default.conf# 暴露80端口
# 这里需要注意的是暴露的端口需要和nginx配置的监听端口一致
EXPOSE 8541# 使用Nginx运行Vue应用
CMD ["nginx", "-g", "daemon off;"]
配置一下nginx中的配置文件信息
server {listen 8541;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers X-Requested-With;add_header Access-Control-Allow-Methods GET,POST,OPTIONS;#这里需要注意的是文件的路径需要是真实有效正确的容器中的目录不然会出现500或者404报错root /usr/share/nginx/html/;index index.html index.htm;try_files $uri &uri/ /index.html;}location /api/{rewrite ^/api/(.*) /$1 break;proxy_pass http://192.168.0.170:9000;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}
执行打包命令
docker build -t front-project .

执行运行命令
docker run -d -p 8541:8541 front-project

最后就可以执行访问查看最终的页面效果了

注意点总结
- 首先在执行jar之后需要注意服务器中的Java版本需要和本地开发环境的版本保持一致。
- 配置Nacos的时候,如果需要切换不用默认的数据源一定需要在配置文件中指明。
- 在配置Nginx监听的时候需要注意将监听的root地址一定要配置和dockerfile打包地址一致不然会出现报错,如果采用微服务的方式访问需要在配置文件中明确正确配置断言的网关地址。
最后说一句(求关注,别白嫖我)
如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。
求一键三连:点赞、转发、在看。
关注公众号:【舒一笑的架构笔记】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。
相关文章:
使用Docker+Jar方式部署微服务工程(前后端分离)看着一篇就够了
本篇教程的使用到的技术有springboot、springcloud、Nacos、Docker、Nginx部署前后端分离访问的微服务。 部署一下Nacos 首先我们需要在服务器中(或者本地部署启动一下Nacos),这里我采用服务器的方式进行部署,这里有一点不一样的…...
红外遥控和LCD1602
26.1.1 红外线简介 人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为 0.62~0.76μm;紫光的波长范围为 0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的…...
房屋出租管理系统需求分析及功能介绍
房屋租赁管理系统适用于写字楼、办公楼、厂区、园区、商城、公寓等商办商业不动产的租赁管理及租赁营销;提供资产管理,合同管理,租赁管理, 物业管理,门禁管理等一体化的运营管理平台,提高项目方管理运营效率…...
高精度模拟算法
高精度模拟算法 高精度加法 extern string m,n; extern int a[MAX],b[MAX],ans[MAX]; void addition(){int _mmax(m.size(),n.size());reverse(m.begin(),m.end()),reverse(n.begin(),n.end());//转置原字符串for(int i0;i<m.size();i) a[i]m[i]-0;//字符型以ASCII码存储&…...
Ansible简介版
目录 架构 环境部署 一、Ansible安装部署 1.yum安装Ansible 2.修改主机清单文件 3.配置密钥对验证 4.ansible-doc 5.看被控主机 二、常用模块 1.Command模块 2.Shell模块 3.Cron模块 1.添加 2.删除 4.User模块 5.Group模块 1.创建组 编辑 编辑 编辑…...
卷积通用模型的剪枝、蒸馏---蒸馏篇--RKD关系蒸馏(以deeplabv3+为例)
本文使用RKD实现对deeplabv3+模型的蒸馏;与上一篇KD蒸馏的方法有所不同,RKD是对展平层的特征做蒸馏,蒸馏的loss分为二阶的距离损失Distance-wise Loss和三阶的角度损失Angle-wise Loss。 完整代码放在文末。 一、RKD简介 RKD算法的核心是以教师模型的多个输出为结构单元,取…...
AVL树的完全指南:平衡与性能
文章目录 AVL树简介AVL的操作建立一个AVL树插入操作删除操作 书写代码1.构造函数和析构函数2.获取最大值和最小值3.树的高度和节点个数3.前序中序和后序遍历4.判断树是否为空树5.四个旋转操作6.获取平衡因子7.插入操作8.删除操作9.搜索节点.h文件中的定义 总结 AVL树简介 AVL树…...
itext7 PDF添加水印,获取页面高度,添加到页面右上角
ps: pdf添加水印,内容多的时候会往下跑,修改为获取当前页面高度,进行固定在顶部,其他需要可以自己进行调整,直接贴代码。 public static void main(String[] args) throws IOException {String localFilePath "…...
docker端口映射成功,docker端口不生效的问题解决,外界无法访问docker映射端口
docker端口映射不生效的问题解决 问题 使用docker run -p 88848:8848后,显示容器启动正常,并且使用docker logs –f xxx能够看到容器可以正常启用,docker ps 可以看到容器启动成功,并且端口已经映射,但是在浏览器访问相关地址&am…...
RSA非对称加密解密,前端公钥加密后端私钥解密
RSA非对称加密解密,前端公钥加密后端私钥解密,可以防止陌生人直接通过后端接口篡改数据。有数据泄露的风险。 前端:Vue框架 后端:sprintboot(Java) 工具类:hutool 前端Vue获取公钥:…...
Nginx-01-Nginx 是什么? 能做什么?
nginx 系列 Nginx-01-聊一聊 nginx Nginx-01-Nginx 是什么 Nginx-02-为什么使用 Nginx Nginx-02-Nginx Ubuntu 安装 windows10 WSL ubuntu 安装 nginx 实战笔记 Nginx-02-基本使用 Nginx-03-Nginx 项目架构 Nginx-04-Docker Nginx Nginx-05-nginx 反向代理是什么&…...
最大数字——蓝桥杯十三届2022国赛大学B组真题
问题分析 这道题属于贪心加回溯。所有操作如果能使得高位的数字变大必定优先用在高位,因为对高位的影响永远大于对低位的影响。然后我们再来分析一下,如何使用这两种操作?对于加操作,如果能使这一位的数字加到9则变成9࿰…...
查看微信小程序主包大小
前言 略 查看微信小程序主包大小 在微信开发者工具右上角找到“详情->基本信息” 查看微信小程序主包构成 通过微信开发者工具中的“代码依赖分析”工具查看...
B树与B+树的奥秘:原理解析与性能
引言 B树和B树是计算机科学中两个重要的数据结构,它们在数据库和文件系统中扮演着至关重要的角色。在处理大量数据时,高效的数据组织和检索方式是至关重要的,而B树和B树正是为此而设计的。 B树和B树都是多路查找树的变体,它们通…...
Unity组件入门篇目录
Audio AudioChorusFilter......................................点击导航AudioDistortionFilter..................................点击导航AudioEchoFilter.........................................点击导航AudioHighPassFilter..................................点击导…...
【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析
作为一个程序员宝爸,每天的时间很宝贵,工作之余除了辅导孩子作业,就是补充睡眠。 怎么快速高效的进行当天A股涨停板的复盘,便于第二天的跟踪。这里简单写个示例, 获取当天连涨数排序,以及所属行业排序。 …...
kubeflow文档-介绍与架构
1. kubeflow介绍 Kubeflow项目致力于使机器学习(ML)工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是重新创建其他服务,而是提供一种直接的方法,将ML的开源系统部署到不同的基础设施中。无论在哪里运行Kubernetes&a…...
传输层的TCP流量控制比数据链路层作用范围更广
数据链路层的流量控制主要在相邻节点之间进行,它确保在单个链路或网络段上不会发生数据过载。例如,在以太网中,数据链路层使用停止-等待协议或滑动窗口机制来限制发送方发送的数据量,以避免接收方无法处理数据。 而传输层的 TCP 流…...
CSS表格
标准的表格结构 table标签:定义表格 caption标签:定义表格标题,这个标题会居中显示在表格上,一个表格只能定义一个标题 th标签:定义表格的表头,通常成粗体居中表示 tr标签:定义表格的一行 td标…...
东芝移动硬盘数据恢复方法有哪些
谁能懂我此刻的心情啊!移动硬盘用起来真的超级方便,如今我的工作几乎都离不开它,用来存放各种重要文件。可是,让人头疼的事情发生了,昨天我发现移动硬盘里的部分数据竟然莫名其妙地消失了!这可咋整啊&#…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...
中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点
中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...
window 显示驱动开发-如何查询视频处理功能(三)
D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针,该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...
