Docker部署springboot包并联通MySQL
Docker部署jar
实现功能
- 部署springboot下发布的jar包
- 不同docker容器之间通信(如MySQL访问、Redis访问)
- 多个jar包部署
参考文献
Just a moment…
Just a moment…
https://www.jb51.net/article/279449.htm
springboot配置
这里使用多yaml配置文件,这样子我们在服务端就可以使用java -jar时附带参数来选择性的使用对应的配置文件
注意,下面三个文件所有内容都必须是完整的!也就是说我们后续是直接选择其中的一个配置文件进行启动,不会用到其他剩下的几个配置文件!!!
- application:默认配置文件,我们进行本地调试的时候使用,MySQL地址直接写localhost
- application-dev:这个不要管,我随便写的
- 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对应生命周期指令,在我们每次修改代码后要上传到服务器时,都必须完整的再走一遍这个步骤!!!

之后你就会在项目根目录下的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桥接网络下的两个容器d1和d2
- 可以直接通过各自在桥接网下的IP联通,如
ping 172.18.0.2 - 或者直接使用对应容器名联通,如
ping d1
首先看一下当前有哪些桥接网络:docker network ls

我这里之前创建了一个桥接网络esp-network,我们可以执行以下指令创建对应桥接网络 docker network create [网络名字]
把对应容器添加到桥接网络的方式有两种,我们使用第二种方式关联桥接网络
- 在容器创建时添加(不推荐)
- 容器创建后通过指令关联(推荐,自由度更高)
把创建好的MySQL容器添加到桥接网络内:
docker network connect esp-network mysql8
构建docker镜像
这里我使用mobaxterm链接到云服务器,建议大家也下载一个这个软件,他比啥xshell好使多了,而且还免费!!!
随便选择一个空文件夹,我这里有三个文件
dockerfile用于构建对应jar包的镜像文件espbk-shell.sh偷懒专用,全自动镜像创建、运行、桥接网络所有步骤,便于后续快速更新镜像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

网络调试
由于我们使用dockerfile构建jar包镜像是,使用的底层镜像是openjdk,他不带基本的linux指令(也就是说没有ping、netstat这些关键指令)
我们可以曲线救国,使用主机自带的指令直接操控容器
具体可参考文献:docker容器内缺少命令的简单解决办法_docker_脚本之家
首先安装依赖(我使用ubuntu):apt-get install -y util-linux
之后使用管道函数,过滤出我们正在运行的jar包容器:docker ps | grep espbk
复制容器的长ID(划红线处)

根据容器ID获取容器的PID:docker inspect --format "{{ .State.Pid }}" 2877e2947850

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

相关文章:
Docker部署springboot包并联通MySQL
Docker部署jar 实现功能 部署springboot下发布的jar包不同docker容器之间通信(如MySQL访问、Redis访问)多个jar包部署 参考文献 Just a moment… Just a moment… https://www.jb51.net/article/279449.htm springboot配置 这里使用多yaml配置文件&…...
多帧激光点云基于标定参数进行融合拼接
1、前言 在三维视觉技术蓬勃发展的今天,点云作为捕获和表示三维环境的基础数据形式,扮演着至关重要的角色。点云融合拼接技术,作为连接孤立点云片段、构建连续、全面三维场景的核心过程,对于自动驾驶、机器人导航、三维建模以及地…...
python数据类型之字符串
目录 1.字符串概念和注意事项 2.字符串内置函数 3.字符串的索引、切片和遍历 4.字符串运算符 5.字符串常用方法 性质判断 开头结尾判断 是否存在某个子串 大小写等格式转化 子串替换 删除两端空白字符 格式化字符串 分割与合并 6.字符串模板 7.exec 函数 8.字符…...
Vue3实战笔记(38)—粒子特效终章
文章目录 前言一、怎样使用官方提供的特效二、海葵特效总结 前言 官方还有很多漂亮的特效,但是vue3只有一个demo,例如我前面实现的两个页面就耗费了一些时间,今天记录一下tsparticles官方内置的几个特效的使用方法,一般这几个就足…...
晶体振荡器
一、晶振与晶体区别 晶振是有源晶振的简称,又叫振荡器,英文名称是oscillator,内部有时钟电路,只需供电便可产生振荡信号;晶体是无源晶振的简称,也叫谐振器,英文名称是crystal,是无极…...
单词可交互的弧形文本
在一个项目中,要求把少儿读本做成电子教材呈现出来,电子书的排版要求跟纸质书一致。其中,英语书有个需求:书中有些不规则排版的文本(如下图所示),当随书音频播放时,被读到的文本要求…...
Linux——进程信号(一)
1.信号入门 1.1生活中的信号 什么是信号? 结合实际红绿灯、闹钟、游戏中的"!"等等这些都是信号。 以红绿灯为例子: 一看到红绿灯我们就知道:红灯停、绿灯行;我们不仅知道它是一个红绿灯而且知道当其出现不同的状况…...
centos9 stream在线安装NVIDIA驱动(rockylinux9.4也成功安装nvidia驱动)
Install NVIDIA Drivers on CentOS Stream 9(rockylinux9.4成功) 主板为技嘉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格式 这种格式就是传统的表单提交格式,就是一个个的键值对,会进行url编码,使用springmvc接收时使用RequestParam来进行接收,与传入的字段一一对应,此时使用的参数处理器是R…...
Unity3D让BoxCollider根据子物体生成自适应大小
系列文章目录 unity工具 文章目录 系列文章目录unity工具 👉前言👉一、编辑器添加👉二、代码动态添加的方法(第一种)👉三、代码动态添加的方法(第二种)👉四、重新设置模型的中心点👉壁纸分享👉…...
WSL 2 installation is incomplete.
使用的wsl2版本很旧,因此需要手动更新。 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi...
Servlet的request对象
request对象的继承关系 1.HttpServletRequest接口继承了ServletRequest接口,对其父接口进行了扩展,可以处理满足所有http协议的请求 2.HttpServletRequest和ServletRequest都是接口,不能创建对象,因此在tomcat底层定义实现类并创…...
蓝桥杯-合并数列
小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将它们列为两个数组 {a1, a2, …, an} 和 {b1, b2, …, bm}。两个数组的和相同。 定义一次合并操作可以将某数组内相邻的两个数合并为一个新数,新数的值是原来两…...
《web应用技术》第9次课后作业
一、将前面的代码继续完善功能 1、采用XML映射文件的形式来映射sql语句; 2、采用动态sql语句的方式,实现条件查询的分页。 二、学习git的使用。 1、每个小组将自己的项目上传到gitee,学会协作开发; 2、学会从gitee上拉取项目…...
FRAUDARCatchSync算法简介
参考:https://blog.51cto.com/u_15127663/2778705 1. 背景 Fraudar 要解决的问题是:找出社交网络中最善于伪装的虚假用户簇。虚假用户会通过增加和正常用户的联系来进行伪装,而这些伪装(边)会形成一个很密集的子网络,可以通过定义…...
刷题之将有序数组转换成二叉搜索树(leetcode)
将有序数组转换成二叉搜索树 正常递归,中序遍历 递归经常会把自己绕晕,还是得画图分析 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(null…...
K-means聚类模型教程(个人总结版)
K-means聚类是一种广泛应用于数据挖掘和数据分析的无监督学习算法。它通过将数据点分成K个簇(cluster),使得同一簇内的数据点之间的相似度最大,不同簇之间的相似度最小。本文将详细介绍K-means聚类算法的背景、基本原理、具体实现…...
android怎么告诉系统不要回收
在Android中,如果你想告诉系统不要回收你的应用程序,可以通过设置Activity的属性来实现。你可以设置android:configChanges属性,指定在哪些配置更改时不重新创建Activity。 例如,如果你想指示系统在屏幕方向更改时不要重新创建Ac…...
【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(2)
1.问题描述: 应用内支付IAP Kit和Payment Kit的区别以及适用场景? 解决方案: IAP Kit是四方支付,仅支持在线虚拟商品,如会员,游戏钻石等,双框架支持全球,目前单框架暂时只支持国内…...
ubuntu设置root开机登录,允许root用户ssh远程登录
ubuntu与centos系统不同,默认root开机不能登录。 1、输入一下命令创建root密码,根据提示输入新密码 sudo passwd root 2、打开gdm-autologin文件,将auth required pam_succeed_if.so user ! root quiet_success这行注释掉,这行就…...
基于Claude的AI招聘系统:从简历解析到智能评估全流程实践
1. 项目概述:当Claude成为你的招聘官最近在GitHub上看到一个挺有意思的项目,叫“hire-from-claude”。光看名字,你可能会觉得有点玄乎,难道是要让AI来面试和招聘人类?其实,这个项目的核心思路,是…...
桌面CNC木质游戏手柄外壳制作:从Fusion 360设计到实战加工全流程
1. 项目概述:从数字模型到木质手柄的旅程如果你和我一样,既痴迷于复古游戏的怀旧情怀,又享受亲手将数字设计变为实体物件的成就感,那么这个项目绝对能点燃你的热情。我们这次要做的,不是一个简单的3D打印外壳ÿ…...
DIY智能电机推子:从闭环控制到MIDI交互的硬件实战
1. 项目概述与核心价值如果你玩过专业的音频混音台,或者在一些高端的灯光控制台上见过那种会自己“嗖”一下滑到指定位置的推子,那你一定对电机推子(Motorized Fader)不陌生。这东西的魅力在于,它既是精准的模拟输入设…...
量子优化基准测试库QOBLIB:原理与应用解析
1. 量子优化基准测试库QOBLIB概述量子计算在组合优化领域展现出突破经典计算极限的潜力,但如何系统评估量子算法的实际性能一直是研究难点。2025年发布的QOBLIB(Quantum Optimization Benchmarking Library)填补了这一空白,成为首…...
WCH CH348L USB转多串口芯片实战:6路UART+2路RS485工业网关设计与电平兼容方案
1. CH348L芯片深度解析:为什么它是工业网关的理想选择 第一次拿到CH348L这颗芯片的时候,我正被一个工业现场的数据采集项目折磨得焦头烂额。现场有6台不同品牌的PLC需要通过串口通信,还有2个RS485总线的温控器需要接入,传统的解决…...
Sunshine游戏串流实战:从零搭建你的专属云游戏平台
Sunshine游戏串流实战:从零搭建你的专属云游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾经梦想过在客厅电视上畅玩PC游戏,或者想在出差时…...
qt中自定义槽函数 内部继承逻辑、GUI+CLI协同1.0
bit::Shadow✧(≖ ◡ ≖✿ 目录 qt配置环境 QWidget父类 子类构造函数内显示调用父类构造函数 QT内核分析 自定义槽函数 GUI(图形化实现) Ⅰ按钮 Ⅱ右键按钮转到槽函数实现 CLI(命令行界面) Ⅲ功能槽(slot&a…...
RK3588 NPU部署YOLOv8全流程:从ONNX转换到板端C++/Python推理优化
1. 项目概述:为什么要在RK3588上部署YOLOv8?最近在边缘计算项目里,我遇到了一个典型的需求:客户需要在本地设备上实时分析摄像头画面,识别特定物体并分割出它们的轮廓,同时要求设备功耗低、体积小、成本可控…...
NRF52832串口DFU保姆级教程:不用nRFgo Studio,手把手教你用nrfutil命令行搞定固件合并与升级
NRF52832串口DFU全流程实战:从密钥管理到自动化升级脚本 在嵌入式开发中,固件升级能力已成为现代IoT设备的核心需求。NRF52832作为Nordic Semiconductor的明星BLE SoC,其串口DFU功能为设备维护提供了可靠的有线升级方案。与依赖nRFgo Studio等…...
Office RibbonX Editor:打造个性化Office界面的终极工具
Office RibbonX Editor:打造个性化Office界面的终极工具 【免费下载链接】office-ribbonx-editor An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF 项目地址: https://gitcode.com/gh_mirrors/of/office-ribbonx-edit…...
