当前位置: 首页 > news >正文

Docker部署springboot包并联通MySQL

Docker部署jar

实现功能

  1. 部署springboot下发布的jar包
  2. 不同docker容器之间通信(如MySQL访问、Redis访问)
  3. 多个jar包部署

参考文献

Just a moment…
Just a moment…
https://www.jb51.net/article/279449.htm

springboot配置

这里使用多yaml配置文件,这样子我们在服务端就可以使用java -jar时附带参数来选择性的使用对应的配置文件
注意,下面三个文件所有内容都必须是完整的!也就是说我们后续是直接选择其中的一个配置文件进行启动,不会用到其他剩下的几个配置文件!!!

  1. application:默认配置文件,我们进行本地调试的时候使用,MySQL地址直接写localhost
  2. application-dev:这个不要管,我随便写的
  3. application-pro:生产环境配置文件,MySQL地址写桥接对象容器的地址,我这里使用的是我开启的MySQL容器名mysql8(这里后续会讲解为什么这么做)

application.yaml

server:port: 10085spring:datasource:url: jdbc:mysql://172.18.0.2:3306/esp?characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 100minimum-idle: 10
# swagger基本配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'default'paths-to-match: '/**'packages-to-scan: io.zhiller.zercardpacket.controller
# knife4j的增强配置,不需要增强可以不配
knife4j:enable: truesetting:language: zh_cn

application-pro.yaml

server:port: 10085spring:datasource:url: jdbc:mysql://mysql8:3306/esp?characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 100minimum-idle: 10
# swagger基本配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'default'paths-to-match: '/**'packages-to-scan: io.zhiller.zercardpacket.controller
# knife4j的增强配置,不需要增强可以不配
knife4j:enable: truesetting:language: zh_cn

之后按照顺序依次点击maven对应生命周期指令,在我们每次修改代码后要上传到服务器时,都必须完整的再走一遍这个步骤!!!
image.png
之后你就会在项目根目录下的target文件夹内找到编译好的jar包;
我这里把jar包命名为 zer-backend.jar

特别注意,这里还需要我们删去一些内容
打开pom.xml
在mainClass标签下有一个skip标签,必须把它删掉,不然我们切换不同配置文件的时候会直接拒绝并报错;
下图展示的是删除过后的pom.xml文件

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>io.zhiller.zercardpacket.ZerCardPacketApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>

创建MySQL容器

我的springboot上使用的mysql-connect-j版本是8的,所以我这边也直接使用mysql:latest镜像,也就是最新的MySQL8镜像;
拉取镜像:docker pull mysql:latest
构建MySQL容器:docker run -d -p 10085:10085 --name mysql8 -e MYSQL_ROOT_PASSWORD mysql:latest

此时注意要在服务器的安全组策略内允许3306端口访问;
之后你可以通过navicat连接到MySQL,然后添加对应数据库和表啥的(这里不演示)

配置桥接网络

由于我们使用docker同时部署了springboot的jar包以及MySQL,那么两个容器之间实际上是相互隔离的,我们只能通过docker给出的桥接方式把两个容器通过桥接网络连接起来,这样子springboot才可以连接到对应容器内的MySQL;
举例:对于连接到同一个docker桥接网络下的两个容器d1d2

  1. 可以直接通过各自在桥接网下的IP联通,如ping 172.18.0.2
  2. 或者直接使用对应容器名联通,如ping d1

首先看一下当前有哪些桥接网络:docker network ls
image.png
我这里之前创建了一个桥接网络esp-network,我们可以执行以下指令创建对应桥接网络 docker network create [网络名字]

把对应容器添加到桥接网络的方式有两种,我们使用第二种方式关联桥接网络

  1. 在容器创建时添加(不推荐)
  2. 容器创建后通过指令关联(推荐,自由度更高)

把创建好的MySQL容器添加到桥接网络内:
docker network connect esp-network mysql8

构建docker镜像

这里我使用mobaxterm链接到云服务器,建议大家也下载一个这个软件,他比啥xshell好使多了,而且还免费!!!

随便选择一个空文件夹,我这里有三个文件

  1. dockerfile用于构建对应jar包的镜像文件
  2. espbk-shell.sh偷懒专用,全自动镜像创建、运行、桥接网络所有步骤,便于后续快速更新镜像
  3. zer-backend.jar我们刚刚打包好的jar包

dockerfile

# 我的springboot编译时使用JDK1.8,所以这里搭设openjdk:8环境
FROM openjdk:8# 设置容器所有者
MAINTAINER zhiller# 把当前文件夹下的jar包添加到容器内
ADD ./zer-backend.jar backend.jar# 这是正常的,不带参数的启动方式
# CMD ["java","-jar","backend.jar"]# 因为我们需要使用生产环境,所以使用参数spring.profiles.active开启
# spring.profiles.active是全量覆盖,也就是说只会启用这一个配置文件,不会管其他的配置文件
CMD ["java","-jar","backend.jar","--spring.profiles.active=pro"]

espbk-shell.sh

#!/bin/bashcontainer_name="espbk" 				# 容器名
container_port="10085"				# 容器运行端口
image_name="espbk"						# 镜像名
image_tag="1.0"								# 镜像tag(一般我们使用latest,这里我用1.0)
dockerfile_name="dockerfile"	# dockerfile的文件名
network="esp-network"					# 桥接网络的名称echo "正在停止并删除docker镜像"docker rm -f ${container_name}docker image rm ${image_name}:${image_tag}echo "正则重新更新当前镜像"docker build -f ./${dockerfile_name} -t ${image_name}:${image_tag} .docker run -d -p ${container_port}:${container_port} --name ${container_name} ${image_name}:${image_tag}docker network connect ${network} ${container_name}echo "大功告成!您可以查看已经更新的镜像了!!!"

这样子,我们可以直接运行脚本实现部署:bash espbk-shell.sh
最后,把我们构建好的jar包容器添加到桥接网络:docker network connect esp-network espbk

最后监视一下我们的桥接网络,确认MySQL和jar包容器都在同一个桥接网络下
docker network inspect esp-network
找到container字段,里面就包含了该桥接网络下存在的容器
不难发现,MySQL使用172.18.0.2,而我们的jar包使用172.18.0.3
image.png

网络调试

由于我们使用dockerfile构建jar包镜像是,使用的底层镜像是openjdk,他不带基本的linux指令(也就是说没有ping、netstat这些关键指令)
我们可以曲线救国,使用主机自带的指令直接操控容器
具体可参考文献:docker容器内缺少命令的简单解决办法_docker_脚本之家

首先安装依赖(我使用ubuntu):apt-get install -y util-linux

之后使用管道函数,过滤出我们正在运行的jar包容器:docker ps | grep espbk
复制容器的长ID(划红线处)
image.png
根据容器ID获取容器的PID:docker inspect --format "{{ .State.Pid }}" 2877e2947850
image.png

之后就可以愉快的使用nsenter指令来操控容器了:nsenter -t 3873441 -n ifconfig
image.png

相关文章:

Docker部署springboot包并联通MySQL

Docker部署jar 实现功能 部署springboot下发布的jar包不同docker容器之间通信&#xff08;如MySQL访问、Redis访问&#xff09;多个jar包部署 参考文献 Just a moment… Just a moment… https://www.jb51.net/article/279449.htm springboot配置 这里使用多yaml配置文件&…...

多帧激光点云基于标定参数进行融合拼接

1、前言 在三维视觉技术蓬勃发展的今天&#xff0c;点云作为捕获和表示三维环境的基础数据形式&#xff0c;扮演着至关重要的角色。点云融合拼接技术&#xff0c;作为连接孤立点云片段、构建连续、全面三维场景的核心过程&#xff0c;对于自动驾驶、机器人导航、三维建模以及地…...

python数据类型之字符串

目录 1.字符串概念和注意事项 2.字符串内置函数 3.字符串的索引、切片和遍历 4.字符串运算符 5.字符串常用方法 性质判断 开头结尾判断 是否存在某个子串 大小写等格式转化 子串替换 删除两端空白字符 格式化字符串 分割与合并 6.字符串模板 7.exec 函数 8.字符…...

Vue3实战笔记(38)—粒子特效终章

文章目录 前言一、怎样使用官方提供的特效二、海葵特效总结 前言 官方还有很多漂亮的特效&#xff0c;但是vue3只有一个demo&#xff0c;例如我前面实现的两个页面就耗费了一些时间&#xff0c;今天记录一下tsparticles官方内置的几个特效的使用方法&#xff0c;一般这几个就足…...

晶体振荡器

一、晶振与晶体区别 晶振是有源晶振的简称&#xff0c;又叫振荡器&#xff0c;英文名称是oscillator&#xff0c;内部有时钟电路&#xff0c;只需供电便可产生振荡信号&#xff1b;晶体是无源晶振的简称&#xff0c;也叫谐振器&#xff0c;英文名称是crystal&#xff0c;是无极…...

单词可交互的弧形文本

在一个项目中&#xff0c;要求把少儿读本做成电子教材呈现出来&#xff0c;电子书的排版要求跟纸质书一致。其中&#xff0c;英语书有个需求&#xff1a;书中有些不规则排版的文本&#xff08;如下图所示&#xff09;&#xff0c;当随书音频播放时&#xff0c;被读到的文本要求…...

Linux——进程信号(一)

1.信号入门 1.1生活中的信号 什么是信号? 结合实际红绿灯、闹钟、游戏中的"&#xff01;"等等这些都是信号。 以红绿灯为例子&#xff1a; 一看到红绿灯我们就知道&#xff1a;红灯停、绿灯行&#xff1b;我们不仅知道它是一个红绿灯而且知道当其出现不同的状况…...

centos9 stream在线安装NVIDIA驱动(rockylinux9.4也成功安装nvidia驱动)

Install NVIDIA Drivers on CentOS Stream 9&#xff08;rockylinux9.4成功&#xff09; 主板为技嘉mz72-hb2 显卡为4090 一.Disable Secure Boot From the BIOS 二.Enabling the EPEL Repository on CentOS Stream 9 1.update the DNF package repository cache sudo dnf …...

springmvc不同格式的参数解析

参数解析 application/x-www-form-urlencoded格式 这种格式就是传统的表单提交格式&#xff0c;就是一个个的键值对&#xff0c;会进行url编码&#xff0c;使用springmvc接收时使用RequestParam来进行接收&#xff0c;与传入的字段一一对应&#xff0c;此时使用的参数处理器是R…...

Unity3D让BoxCollider根据子物体生成自适应大小

系列文章目录 unity工具 文章目录 系列文章目录unity工具 &#x1f449;前言&#x1f449;一、编辑器添加&#x1f449;二、代码动态添加的方法(第一种)&#x1f449;三、代码动态添加的方法(第二种)&#x1f449;四、重新设置模型的中心点&#x1f449;壁纸分享&#x1f449;…...

WSL 2 installation is incomplete.

使用的wsl2版本很旧&#xff0c;因此需要手动更新。 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi...

Servlet的request对象

request对象的继承关系 1.HttpServletRequest接口继承了ServletRequest接口&#xff0c;对其父接口进行了扩展&#xff0c;可以处理满足所有http协议的请求 2.HttpServletRequest和ServletRequest都是接口&#xff0c;不能创建对象&#xff0c;因此在tomcat底层定义实现类并创…...

蓝桥杯-合并数列

小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案&#xff0c;分别将它们列为两个数组 {a1, a2, …, an} 和 {b1, b2, …, bm}。两个数组的和相同。 定义一次合并操作可以将某数组内相邻的两个数合并为一个新数&#xff0c;新数的值是原来两…...

《web应用技术》第9次课后作业

一、将前面的代码继续完善功能 1、采用XML映射文件的形式来映射sql语句&#xff1b; 2、采用动态sql语句的方式&#xff0c;实现条件查询的分页。 二、学习git的使用。 1、每个小组将自己的项目上传到gitee&#xff0c;学会协作开发&#xff1b; 2、学会从gitee上拉取项目…...

FRAUDARCatchSync算法简介

参考&#xff1a;https://blog.51cto.com/u_15127663/2778705 1. 背景 Fraudar 要解决的问题是&#xff1a;找出社交网络中最善于伪装的虚假用户簇。虚假用户会通过增加和正常用户的联系来进行伪装&#xff0c;而这些伪装(边)会形成一个很密集的子网络&#xff0c;可以通过定义…...

刷题之将有序数组转换成二叉搜索树(leetcode)

将有序数组转换成二叉搜索树 正常递归&#xff0c;中序遍历 递归经常会把自己绕晕&#xff0c;还是得画图分析 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(null…...

K-means聚类模型教程(个人总结版)

K-means聚类是一种广泛应用于数据挖掘和数据分析的无监督学习算法。它通过将数据点分成K个簇&#xff08;cluster&#xff09;&#xff0c;使得同一簇内的数据点之间的相似度最大&#xff0c;不同簇之间的相似度最小。本文将详细介绍K-means聚类算法的背景、基本原理、具体实现…...

android怎么告诉系统不要回收

在Android中&#xff0c;如果你想告诉系统不要回收你的应用程序&#xff0c;可以通过设置Activity的属性来实现。你可以设置android:configChanges属性&#xff0c;指定在哪些配置更改时不重新创建Activity。 例如&#xff0c;如果你想指示系统在屏幕方向更改时不要重新创建Ac…...

【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(2)

1.问题描述&#xff1a; 应用内支付IAP Kit和Payment Kit的区别以及适用场景&#xff1f; 解决方案&#xff1a; IAP Kit是四方支付&#xff0c;仅支持在线虚拟商品&#xff0c;如会员&#xff0c;游戏钻石等&#xff0c;双框架支持全球&#xff0c;目前单框架暂时只支持国内…...

ubuntu设置root开机登录,允许root用户ssh远程登录

ubuntu与centos系统不同&#xff0c;默认root开机不能登录。 1、输入一下命令创建root密码&#xff0c;根据提示输入新密码 sudo passwd root 2、打开gdm-autologin文件&#xff0c;将auth required pam_succeed_if.so user ! root quiet_success这行注释掉&#xff0c;这行就…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...