将本地微服务发布到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

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

接口验证

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/391265.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis未授权访问漏洞 *

#安装redis apt-get install redis #redis链接 redis-cli -h 192.168.4.176 -p 6379 #redis常见命令 (1)查看信息:info (2)删除所有数据库内容:flushall (3)刷新数据库:f…

平衡二叉树 - 力扣(LeetCode) C语言

110. 平衡二叉树 - 力扣(LeetCode)(点击前面链接即可查看题目) 一、题目 给定一个二叉树,判断它是否是 平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。 示例 1: 输入:root […

unity拖拽物品遇到的bug及解决思路

记录一下拖拽实现过程中遇到的bug RectTransform 专门用在UI中transform 判断点击是否在UI中 使用这个函数就可以判断点击的是否是UI面板,返回true表明在UI面板中 EventSystem.current.IsPointerOverGameObject()值得一提的是,如果发现了有UI穿透效…

【Material-UI】多选模式(Multiple values)与Autocomplete的高级用法解析

文章目录 一、多选模式的基本用法二、高级用法1. 固定选项(Fixed options)2. 复选框(Checkboxes)3. 限制标签显示数量(Limit tags) 三、性能优化与最佳实践1. 筛选已选项(filterSelectedOptions…

乡村振兴建设顶层规划建设方案

数字乡村振兴平台顶层规划方案摘要 1. 政策背景与总体要求 政策背景:党的十九大明确提出实施乡村振兴战略,总体要求包括产业兴旺、生态宜居、乡风文明、治理有效和生活富裕。随后,中央一号文件、乡村振兴战略规划以及十四五规划和2035年远景…

C# 设计模式之装饰器模式

总目录 前言 装饰器模式的主要作用就是扩展一个类的功能,或给一个类添加多个变化的情况。学习面向对象的都知道,如果想单纯的给某个类增加一些功能,可以直接继承该类生成一个子类就可以。应对一些简单的业务场景继承也就够了,但是…

共享`pexlinux`数据文件的网络服务

实验环境准备: 1.红帽7主机 2.要全图形安装 3.配置网络为手动,配置网络可用 4.关闭vmware DHCP功能 一、kickstart自动安装脚本制作 1.安装图形化生成kickstart自动脚本安装工具 2.启动图形制作工具 3.图形配置脚本 这里使用的共享方式是http&#xff0…

2024靠这份软件测试面试题宝典已成功上岸,跳槽成功

上月很多朋友靠这份面试宝典拿到大厂的office,跳槽成功,面试找工作的小白和要跳槽进阶都很适合,没有一点准备怎么能上岸成功呢? 这份面试题宝库,包含了很多部分:测试理论,Linux基础&#xff0c…

每日OJ_牛客WY15 幸运的袋子

目录 牛客HJ62 查找输入整数二进制中1的个数 解析代码 牛客HJ62 查找输入整数二进制中1的个数 查找输入整数二进制中1的个数_牛客题霸_牛客网 解析代码 本题是计算一个数二进制表示中1的个数,通过(n >> i) & 1可以获取第i位的二进制值&…

Linux中安装C#的.net,创建运行后端或控制台项目

安装脚本命令: 创建一个sh文件并将该文件更改权限运行 sudo apt update wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get upd…

【文件系统】抽象磁盘的存储结构 CHS寻址法 | sector数组 | LAB数组

目录 1.为什么要抽象 2.逻辑抽象_版本1 2.1sector数组 ​2.2index转化CHS 3.逻辑抽象_版本2 3.1LBA数组 3.2LAB下标转化sector下标 文件其实就是在磁盘中占有几个扇区的问题❗文件是很多个sector的数组下标❗文件是有很多块构成的❗❗文件由很多扇区构成------>文件…

PXE+Kickstart自动化安装RHEL7.9

准备环境 1. 一台RHEL7.9主机 2. 开启主机图形 如果是7.9的主机是图形化界面了 就输入命令init 5 开启图形 如果主机一开始没装图形化界面,可以使用以下命令安装 # yum group install "Server with GUI" -y 3. 配置网络可用 4. 关闭VMware dhcp功…

音视频入门基础:WAV专题(5)——FFmpeg源码中解码WAV Header的实现

音视频入门基础:WAV专题系列文章: 音视频入门基础:WAV专题(1)——使用FFmpeg命令生成WAV音频文件 音视频入门基础:WAV专题(2)——WAV格式简介 音视频入门基础:WAV专题…

IJCAI 2024 | 时空数据(Spatial-Temporal)论文总结

2024 IJCAI(International Joint Conference on Artificial Intelligence, 国际人工智能联合会议)在2024年8月3日-9日在韩国济州岛举行。 本文总结了IJCAI2024有关时空数据(Spatial-temporal) 的相关论文,如有疏漏,欢迎大家补充。…

给水排水杂志

一、基本信息 《给水排水》创刊于1964年,是国内创刊早、发行量大、内容涵盖广的水行业权威期刊,在业内享有盛誉。期刊现由中国建设集团股份有限公司主管,亚太建设科技信息研究院有限公司、中国土木工程学会主办。现任名誉主编&#xff1a…

SDXL总结

SDXL base部分的权重:https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main diffusers库中的SDXL代码pipelines: https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines/stable_diffusion_xl 参考&…

目标跟踪那些事

目标跟踪那些事 跟踪与检测的区别 目标跟踪和目标检测是计算机视觉中的两个重要概念,但它们的目的和方法是不同的。 目标检测(object Detection):是指在图像或视频帧中识别并定位一个或多个感兴趣的目标对象的过程 。 目标跟踪(object Tracking)&…

力扣爆刷第169天之TOP200五连刷111-115(课程表、单词搜索、归并)

力扣爆刷第169天之TOP200五连刷111-115(课程表、单词搜索、归并) 文章目录 力扣爆刷第169天之TOP200五连刷111-115(课程表、单词搜索、归并)一、207. 课程表二、LCR 125. 图书整理 II三、402. 移掉 K 位数字四、79. 单词搜索五、9…

设计模式:详细拆解策略模式

策略模式 既然是详解,就不以案例开头了,直奔主题,先来看看什么是策略模式。 模式定义 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式 使得算法可独立于使用它的客户而变化。 结构 Strategy&a…

C++ | Leetcode C++题解之第318题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxProduct(vector<string>& words) {unordered_map<int,int> map;int length words.size();for (int i 0; i < length; i) {int mask 0;string word words[i];int wordLength word.s…