当前位置: 首页 > 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;这行就…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...