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

news2024/10/2 1:25:07

上一篇文章我们介绍了如何将一个简单的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=true

mybatis.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
                        - mysql
        redis:
        		# 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 123456
        mysql:
		        # 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.coloradmin.cn/o/1979415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux的自动检测的脚本:用于检测应用程序状态的linux脚本

目录 一、要求 1、需求内容 2、分析 二、脚本介绍 1、脚本代码 2、脚本解释 (1)脚本结构 (2)应用程序和服务列表 (3)日志文件路径 (4)测试 URL 列表 (5&#…

智能小程序 Ray 开发面板 SDK —— 无线开关一键执行模板教程(一)

1. 准备工作 前提条件 已阅读 Ray 新手村任务,了解 Ray 框架的基础知识已阅读 使用 Ray 开发万能面板,了解 Ray 面板开发的基础知识 构建内容 在此 Codelab 中,您将利用面板小程序开发构建出一个支持一键执行及自动化的无线开关面板&…

HCIP----BGP综合实验

一、实验拓扑 二、实验要求 三、实验思路 1.基于172.16.0.0/16根据实验拓扑图进行IP地址规划,规划过程如下: 2.根据上述的IP地址的规划进行配置,配置完后在AS2中配置OSPF使其内部实现全网通(互相建邻的条件)。 3.在A…

keil编程中#pragma NOAREGS的作用和优点

参考 功能 不直接操作内存地址 #pragma NOAREGS在Keil中的使用含义是禁用自动分配寄存器,开发人员指定控制的寄存器。‌例如中断的执行使用的寄存器需要人为的指定,避免分配同样的寄存器导致数据错误。对寄存器R0到R7不直接操作寄存器地址&#xff0c…

C# 设计模式六大原则之依赖倒置原则

总目录 前言 1 基本介绍 1. 定义 依赖倒置原则 Dependence Inversion Principle,简称:DIP。 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。 2…

GO之基本语法

一、Golang变量 一)变量的声明:使用var关键字 Go语言是静态类型语言 Go语言的基本类型有: boolstringint、int8、int16、int32、int64uint、uint8、uint16、uint32、uint64、uintptrbyte // uint8 的别名rune // int32 的别名 代表一个 Unic…

CTF-web 基础 网络协议

网络协议 OSI七层参考模型:一个标准的参考模型 物理层 网线,网线接口等。 数据链路层 可以处理物理层传入的信息。 网络层 比如IP地址 传输层 控制传输的内容的传输,在传输的过程中将要传输的信息分块传输完成之后再进行合并。 应用…

sql语句精讲

目录 一、MySql的细节知识 SQL语句的结束 SQL语句的大小写 SQL语句中的空格 SQL查询结果并排序 WHERE和ORDER BY的位置 常用数据类型 MYSQL比较运算符 MYSQL算术运算符​编辑 MYSQL逻辑运算符 运算符的优先级 二、MySql数据库的基本操作 1.创建数据库 2.选择数据…

kubenetes证书续签

转载:k8s证书续签 1 检查证书年限 kubeadm certs check-expiration 2 对现有证书进行备份 # 备份kubeadm cp -ra /usr/bin/kubeadm /usr/bin/kubeadm.bak # 备份证书 cp -ra /etc/kubernetes /etc/kubernetes.bak 3 重新编译kubeadm 拉取k8s仓库代码 git clone…

【数据分析--Pandas实战指南在真实世界数据中的应用】

前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索数据分析—基础介绍,本篇文章主要讲述了:数据分析的介绍,Python开源库,配置Jupyter,Pandas读取数据…

echarts 漏斗图 渐变金字塔

使用echarts实现金字塔效果,颜色渐变,左右显示其对应的值 效果: 如果要实现一个正三角的形状,需要在data数组中,将value赋值成有序递增,bl代表他的分值,显示在左侧。 var data [{name: "…

NSS [SWPUCTF 2022 新生赛]file_master

NSS [SWPUCTF 2022 新生赛]file_master 开题,一眼文件上传。 network看看返回包。后端语言是PHP。 除了文件上传还有个查看文件功能。 起手式查询/etc/passwd,发现查询方法是GET提交参数,后端使用file_get_contents()函数包含文件。同时有op…

MySQL基础练习题21-按日期分组销售产品

目录 题目 准备数据 分析数据 总结 题目 找出每个日期、销售的不同产品的数量及其名称。每个日期的销售产品名称应按词典序排列。 返回按 sell_date 排序的结果表。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Activities (s…

初阶数据结构4 二叉树

1. 树 1.1 树的概念与结构 树是⼀种⾮线性的数据结构,它是由 n(n>0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。 有⼀个特殊的结点&#…

Flink实时数仓(六)【DWD 层搭建(四)交易域、互动域、用户域实现】

前言 今天的任务是完成 DWD 层剩余的事实表;今年的秋招开得比往年早,所以要抓紧时间了,据了解,今年的 hc 还是不多,要是晚点投铁定寄中寄了; 今天还是个周末,不过记忆里我好像整个大学都没有好好…

如何实现ElementUI表单项label的文字提示?

在Vue和ElementUI的丰富组件库中,定制化表单是常见的需求之一。那么如何在表单项label后添加文字提示,以提升用户体验呢? 首先我们来看一下效果图: 这里我们鼠标移动到❓图标上就会出现提示 在 ElementUI 中,el-form-item 组件允许使用 slot 自定义 label。通过在 el-fo…

Boost:asio网络编程从同步到异步

文章目录 同步服务器客户端服务端 异步服务器(有问题)异步服务器优化 在学TCP的时候&#xff0c;写的第一个服务器就是一个echo服务器&#xff0c;那在Boost网络编程中&#xff0c;自然也先写一个echo服务器练练手 同步服务器 客户端 #include <iostream> #include &l…

<数据集>BDD100K人车识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;15807张 标注数量(xml文件个数)&#xff1a;15807 标注数量(txt文件个数)&#xff1a;15807 标注类别数&#xff1a;7 标注类别名称&#xff1a; [pedestrian, car, bus, rider, motorcycle, truck, bicycle] 序号…

Java-变量,运算符,输入与输出

目录 一&#xff0c;语法基础 1.基本Java程序 2.语法基础 2.1 变量 2.2 常量限制(fiinal)类比C中的const 2.3 类型转化 2.4 运算符 2.5 表达式 2.5 输入与输出 2.5.1 输入 2.5.2 输出 一&#xff0c;语法基础 1.基本Java程序 public class Main{public static void…

差分放大电路

目录 引出 复合管 直接耦合放大电路 问题: 怎么抑制 初代电路(已引入负反馈之后) 分析 怎么解决 镜像电路 两个概念 分析直流通路: 分析交流电路: 差分放大电路的分析 交流通路 简化 H参数等效 可以得到 其他接法 引出 复合管 目的:获得更大的放大倍数 多只…