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

将本地微服务发布到docker镜像二:

上一篇文章我们介绍了如何将一个简单的springboot服务发布到docker镜像中,这一篇我们将介绍如何将一个复杂的微服务(关联mysql、redis)发布到docker镜像。

我们将使用以下两种不同的方式来实现此功能。

  1. redis、mysql、springboot微服务分开部署
  2. 使用docker-compose 将所有服务合入到同一个镜像中

1、redis、mysql、springboot微服务分开部署

  • 创建docker网络配置
docker network create van_network
  • 启动mysql服务
    下面脚本语句中,除了配置挂载之外,还配置了root用户的密码为root、使用van_network网络配置、映射的3307端口
docker run -p 3307:3306 --name=mysql-master --privileged=true -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -v /mydata/mysql-master/mysql-files:/var/lib/mysql-files --network=van_network -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0 --secure-file-priv=/var/lib/mysql-files
  • 启动redis服务
    下面脚本语句中,除了配置挂载之外,还配置了redis的端口映射,使用van_network网络配置、访问密码为123456
docker run --name redis --network=van_network -v /mydata/redis:/usr/local/etc/redis -v /mydata/redis/data:/data -d -p 6379:6379 redis --requirepass 123456
  • 手动创建mysql业务表
    某些情况下,数据库脚本放在微服务中,由微服务控制脚本执行,此处我们不做更复杂操作。
    以下语句请在上面创建的mysql服务中执行
# 创建数据库 设置字符集
CREATE DATABASE docker
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
use docker;
CREATE TABLE `person` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
  • 微服务模块
    完整代码请查看https://github.com/fanz1/springboot-demo

接口地址1:ip:port/add/person/test
功能:随机生成三个人员信息,插入到mysql中,并更新到redis缓存中,接口返回生成的人员信息
接口地址2:ip:port/info/get/{id}
功能:从redis中查询指定的人员信息

配置信息如下:
其中redis和mysql的ip地址使用docker容器的服务名代替ip地址

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql-master:3306/docker?useUnicode=true&characterEncoding=utf-8&useSSL=truemybatis.mapper-locations=classpath:mybatis/**/mapping/*.xml
mybatis.config-location=classpath:mybatis-config.xml##============== redis ===================
spring.redis.host=redis
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=123456
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=200
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=30000
#连接池大小
spring.redis.max-total=300
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=
  • 将微服务发布到本地镜像
    操作方式请参考上一篇介绍
    我们将本次镜像文件命名成complex-demo-jar,和上一篇的simple-demo-jar区分开
    在这里插入图片描述
  • 启动容器
    设置docker容器网络为van_network,宿主机的端口映射为8081。
    注意:如果上一篇文章中介绍的docker-simple-jar容器已经启动,需要将容器停止服务才能启动本文使用的complex-demo-jar镜像,因为他们使用了同一个网络端口
docker run -d --name complex-demo --network=van_network -p 8081:8081 complex-demo-jar:1.0

在这里插入图片描述

功能测试

  • 测试数据添加接口
    在这里插入图片描述
  • 测试数据查询
    在这里插入图片描述

2、使用docker-compose 一次性启动多个容器

  • 安装Docker compose
    安装教程请参考菜鸟教程

  • 编写compose文件

#新建文件夹 complex-springboot-jar-docker-compose
mkdir complex-springboot-jar-docker-compose && cd complex-springboot-jar-docker-compose
#新建docker-compose.yml文件
vim docker-compose.yml

文件内容如下所示:
version: '2.2.3'services: # 服务名称complex-springboot-service:# 微服务镜像,此处使用的是上一步(redis、mysql、springboot微服务分开部署)生成的镜像image: complex-demo-jar:1.0# 容器名称container_name: complex-demo# 端口映射ports:- "8081:8081"# 容器网络networks:- van_network# 容器启动依赖项,配置之后会先启动依赖容器depends_on:- redis- mysqlredis:# redis镜像image: redis# redis镜像容器名称container_name: redis# redis容器的端口映射ports:- "6379:6379"# redis容器的网络配置networks:- van_network#挂载volumes:- /mydata/redis:/usr/local/etc/redis- /mydata/redis/data:/data# redis的启动命令,设置默认密码command: redis-server --requirepass 123456mysql:# mysql镜像image: mysql:8.0# mysql容器的端口映射ports:- "3307:3306"#mysql容器的挂载volumes:- /mydata/mysql-master/log:/var/log/mysql- /mydata/mysql-master/data:/var/lib/mysql- /mydata/mysql-master/conf:/etc/mysql- /mydata/mysql-master/mysql-files:/var/lib/mysql-files#mysql容器的网络设置networks:- van_network#mysql容器的名称container_name: mysql-master#mysql容器的环境变量environment:- MYSQL_ROOT_PASSWORD='root'# mysql容器的启动命令command: --secure-file-priv=/var/lib/mysql-files
#network设置
networks:van_network:
  • 后台启动

启动命令:docker-compose up -d

在这里插入图片描述

  • 查看网络

docker network ls

在compose.yml文件中设置的network,会自动在NAME前面加上当前文件夹名称。
在这里插入图片描述

  • 查看各服务是否启动

docker ps

可以发现我们的服务已经正常启动
在这里插入图片描述

接口验证

  • 测试数据添加接口
    在这里插入图片描述
  • 测试数据查询
    在这里插入图片描述

相关文章:

将本地微服务发布到docker镜像二:

上一篇文章我们介绍了如何将一个简单的springboot服务发布到docker镜像中,这一篇我们将介绍如何将一个复杂的微服务(关联mysql、redis)发布到docker镜像。 我们将使用以下两种不同的方式来实现此功能。 redis、mysql、springboot微服务分开…...

前端构建工具|vite快速入门

认识vite vite组成部分 Vite是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成: 一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。一…...

拯救PyCharm:击退IDE内存泄漏的策略

拯救PyCharm:击退IDE内存泄漏的策略 PyCharm,作为一款功能强大的集成开发环境(IDE),在处理大型项目或长时间开发过程中,可能会遇到内存泄漏的问题,导致IDE运行缓慢甚至崩溃。本文将提供一系列解…...

在vue3的开发环境中为什么使用vite而不是用webpack

1、vite在开发阶段没有打包过程,直接启动一个服务器 2、请求一个模块到开发服务器 3、开发服务器编译模块,根据页面用所需要的依赖去加载文件 4、加载完成后,开发服务器把编译的结果返回给页面 这使得提高了我们在开发阶段运行的效率 vite是…...

mybatis结合generator进行分页插件PluginAdapter开发

mybatis结合generator生成的代码没有分页的功能,可以尝试自己继承分页插件PluginAdapter,进行开发,实现自己的分页插件这样generator生产的代码 带分页功能了。 MyBatis MySQL自动生成带分页插件 继承PluginAdapter类,实现相关方…...

面试:ArrayList和LinkedList

ArrayList和LinkedList是什么? ArrayList: ArrayList是Java集合框架中的一个类,它实现了List接口,底层基于数组实现。ArrayList的特点是支持动态数组,可以自动扩容,适合顺序访问和随机访问。LinkedList&am…...

【uniapp】uniapp+vue2微信小程序实现分享功能

uniappvue2做的微信小程序实现分享功能 问题描述 uniappvue2做的微信小程序,发布以后点击右上角三个点,分享小程序的时候,转发和分享按钮都是灰色 解决方案 转发、分享、复制链接这几个功能需要自己来手动写方法,考虑到每个页…...

WEB渗透Web突破篇-目录爆破

开源 工具名称下载地址工具描述cansinahttps://github.com/deibit/cansina网站的敏感目录发掘工具Cewlcewl | Kali Linux Tools你可以给它的爬虫指定URL地址和爬取深度,接下来Cewl会给你返回一个字典文件dirsearchhttps://github.com/maurosoria/dirsearch目录扫描…...

Windows设备文件同步平台

使用咨询: 扫码添加QQ 永久免费: Gitee下载最新版本 使用说明: CSDN查看使用说明 功能: 定时(全量采集or增量采集) SCADA,MES等系统采集工控机,办公电脑文件. 优势1: 开箱即用. 解压直接运行.插件集成下载. 优势2: 批管理设备. 配置均在后台配置管理. 优势3: 无人值守 采集端…...

用九方智投学习机,学会应对回撤风险

(九方智投属于九方智投控股有限公司(9636.HK)旗下品牌)      近期国内海风项目密集落地,行业景气度提升。2023年下半年以来,各省加快建设“十四五”规划,我国海风建设重新迈入快车道&#x…...

maven打包加入本地jar包

在使用maven打包的过程中&#xff0c;有时候我们需要添加一些本地的jar包&#xff0c;并将其打到jar包的lib中。 首先将需要本地的jar包&#xff0c;放到项目的的src/resources/lib下面。 然后在对应的项目的pom中加入一下依赖&#xff1a; <dependency><groupId>…...

从TiDB迁移到OceanBase的实践分享

本文来自OceanBase热心用户的分享 近期&#xff0c;我们计划将业务数据库从TiDB迁移到OceanBase&#xff0c;但面临的一个主要挑战是如何更平滑的完成这一迁移过程。经过研究&#xff0c;了解到OceanBase提供的OMS数据迁移工具能够支持从TiDB到OceanBase的迁移&#xff0c;并且…...

DL00765-光伏故障检测高分辨率无人机热红外图像细粒度含数据集4000+张

光伏发电作为清洁能源的重要组成部分&#xff0c;近年来得到了广泛应用。然而&#xff0c;随着光伏电站规模的扩大&#xff0c;光伏组件在运行过程中可能会出现各种故障&#xff0c;如热斑、遮挡、接线盒故障等。这些故障不仅会影响光伏电站的发电效率&#xff0c;还可能导致更…...

CICD流水线

一、CICD流水线简介 CICD概念 CI/CD流水线是现代软件开发的一个核心概念&#xff0c;它涉及自动化和管理软件从开发到部署的整个生命周期 概念定义 具体有三点&#xff1a;持续集成、持续交付、持续部署 流水线组成为&#xff1a;代码提交、测试、构建、部署、结果通知 二…...

Sass/Scss基础

安装sass npm install -g sass Sass/Scss释义 ASS版本3.0之前的后缀名为.sass&#xff0c;而版本3.0之后的后缀名.scss。 Sass (Syntactically Awesome Stylesheets) 是一个最初由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言。 Sass 是一个由buby语言编…...

【sx sb sz】Centos/Linux sx、sb、sz命令详细介绍

简介 系统版本&#xff1a;Centos7.6 软件版本&#xff1a;lrzsz 0.12.20 sx、sb、sz命令属于lrzsz程序的内容&#xff0c;是使用纠错协议&#xff08;ZMODEM、YMODEM、XMODEM&#xff09;通过拨号串行端口将一个或多个文件发送到在 PC-DOS、CP/M、Unix、VMS 及其他操作系统下运…...

【网络层】IP报文解析和网段划分

文章目录 网络层的作用IP协议协议报头格式网段划分DHCPCIDR划分方案 IP地址的数量限制私有IP地址和公网IP地址LAN和WAN 路由 网络层的作用 前面学习了应用层和传输层&#xff0c;应用层的作用是为用户和应用程序提供网络服务&#xff0c;传输层的作用是提供端口到端口的通信服…...

[GXYCTF2019]禁止套娃1

打开题目 进行常规的检测漏洞&#xff0c;扫描目录发现存在.git文件夹下的文件存在 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])) { if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\…...

人工智能时代,数字化工厂如何改革?提升竞争力?

在人工智能时代&#xff0c;数字化工厂通过数据驱动的决策、智能制造、柔性生产、物联网整合以及人机协作&#xff0c;实现生产效率和产品质量的全面提升&#xff0c;并不断创新以保持竞争力。 --题记 在人工智能时代&#xff0c;数字化工厂的改革…...

气膜建筑的抗风与防火性能:保障仓储的安全—轻空间

气膜建筑以其独特的结构和材料优势&#xff0c;为仓储设施提供了可靠的安全保障。在应对自然灾害特别是强风和火灾时&#xff0c;气膜建筑展示了优异的抗风和防火性能。轻空间将详细探讨这些性能及其在实际应用中的表现。 气膜建筑的抗风能力源于其特殊的结构设计和高性能材料。…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

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

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

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...