当前位置: 首页 > 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

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

接口验证

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux下安装Go语言环境的详细指南
  • 给本地设备搭建一个云端语音助手
  • Rider中修改默认文件关联,自定义打开方式
  • opencascade TopoDS_Builder 源码学习
  • Apache Doris + Iceberg 快速搭建指南|Lakehouse 使用手册(三)
  • Openwrt常用说明
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • 【Linux】:环境变量
  • 收银机打印机相关知识 windows7 查看打印机名称--未来之窗智慧经营收银系统百科
  • Linux OS:线程封装 | RAII封装锁 | 随机数运算任务封装
  • 华为校招机试 - 电影知识图谱和查询系统(20240605)
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)
  • 开发框架DevExpress XAF v24.2产品路线图预览——增强跨平台性
  • 医院不良事件监测预警上报系统,PHP不良事件管理系统源码
  • 认识MySQL
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 10个确保微服务与容器安全的最佳实践
  • css布局,左右固定中间自适应实现
  • CSS中外联样式表代表的含义
  • Electron入门介绍
  • Git同步原始仓库到Fork仓库中
  • Java 内存分配及垃圾回收机制初探
  • JavaScript学习总结——原型
  • PHP的Ev教程三(Periodic watcher)
  • React-生命周期杂记
  • Webpack 4x 之路 ( 四 )
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 大主子表关联的性能优化方法
  • 回顾2016
  • 技术发展面试
  • 免费小说阅读小程序
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 网络应用优化——时延与带宽
  • 学习JavaScript数据结构与算法 — 树
  • zabbix3.2监控linux磁盘IO
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • # 计算机视觉入门
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (33)STM32——485实验笔记
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (论文阅读30/100)Convolutional Pose Machines
  • (算法二)滑动窗口
  • (未解决)macOS matplotlib 中文是方框
  • (一)基于IDEA的JAVA基础1
  • (转)Linq学习笔记
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .apk文件,IIS不支持下载解决
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .mysql secret在哪_MySQL如何使用索引
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。