DockerCompose中使用自定义网络的方式实现部署SpringBoot+Mysql+Redis

news2024/12/24 11:36:16

场景

Docker中Docker网络-理解Docker0与自定义网络的使用示例:

Docker中Docker网络-理解Docker0与自定义网络的使用示例_docker 配置 docker0-CSDN博客

Docker中使用自定义网络方式实现Redis集群部署与测试流程:

Docker中使用自定义网络方式实现Redis集群部署与测试流程-CSDN博客

上面介绍了Docker中自定义网络的相关知识。

如果项目使用Docker Compose编排,比如最近的例子,搭建Springboot项目并使其连接

Mysql和redis,则如何通过自定义网络的方式实现。

如果不考虑自定义网络的实现方式,只需要使用Docker Compose实现编排部署各服务可以参考如下

docker-compose入门以及部署SpringBoot+Vue+Redis+Mysql(前后端分离项目)以若依前后端分离版为例:

docker-compose入门以及部署SpringBoot+Vue+Redis+Mysql(前后端分离项目)以若依前后端分离版为例_docker-compose部署java mysql redis-CSDN博客

注:

博客:
霸道流氓气质-CSDN博客

实现

1、首先按照上面的文章搭建项目目录如下

注意这里redis使用的版本是5.0.9,所以要下载其对应版本的配置文件,redis.conf

下载地址

Index of /releases/

下载对应版本后,解压找到redis.conf,并修改其内容注释掉bind 127.0.0.1,并修改连接密码。

然后还需要授予此文件权限

chmod 777 redis.conf

mysql下新建空的data目录即可。redis目录下data目录也是空目录。

2、新建docker-compose.yml修改其内容为

version: "3.8"

services:

  redis:
    image: redis:5.0.9-alpine3.11
    command: redis-server /etc/redis/redis.conf
    ports:
      - "379:6379"
    volumes:
      - ./redis/redis.conf:/etc/redis/redis.conf
      - ./redis/data:/data
    networks:
     badaonet:
       ipv4_address: 192.168.0.11
               
  mysql:
    image: mysql:8.0
    command: --lower_case_table_names=1
    environment:
      MYSQL_DATABASE: test
      MYSQL_ROOT_PASSWORD: ABC@123!
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
    ports:
      - "306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
    networks:
      badaonet:
        ipv4_address: 192.168.0.12
               
  java:
    image: openjdk:8u342-oracle
    command: [
      'java',
      '-jar',
      '/home/badao.jar'
    ]
    environment:
      TZ: Asia/Shanghai
    ports:
      - "996:996"
    volumes:
      - ./java:/home
    working_dir: /home/
    networks:
      badaonet:
        ipv4_address: 192.168.0.13
    depends_on:
      - redis
      - mysql  
         
networks:
  badaonet:
    ipam:
      config:
        - subnet: 192.168.0.0/24

注意这里的yml配置文件一定要注意空格缩进,不要使用tab,缩进使用2个空格,key后面跟一个空格。

编写完yml配置文件后建议找格式化校验的网站进行校验格式。

上面配置文件中最下面networks部分就是自定义网络的声明

紧跟着的badaonet是自定义的名称,后面的subnet是指定子网。

然后上面每个容器就可以通过networks指定自定义网络的名称以及指定ip

比如这里的mysql指定使用自定义网络的192.168.0.12 ip,并将其容器内部的3306端口映射到306容器外端口。

3、启动并验证是否有报错

执行如下

docker compose up

这里不加-d便于查看日志输出。

无明显报错可再次启动一个窗口通过

docker ps

验证是否都启动成功

可以使用如下命令查看自定义网络的详细情况

docker network inspect badao_badaonet

可以看到网络已经成功配置。

4、那么关键是在SpringBoot中如何进行连接

这里在SpringBoot的配置文件中连接mysql和redis时就可以直接使用docker compose配置文件

中指定的容器的ip,并且端口使用映射前容器内部的ip进行连接。

比如连接mysql

url:jdbc:mysql://192.168.0.12:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8

连接redis

  redis:
    # 地址
    #本地测试用
    host: 192.168.0.11
    port: 6379
    password: ABC@123!

将以上程序打包,并更改为badao.jar,上传至java目录下。

然后上面执行

docker compose up

后,可以连接mysql以及redis分别测试是否启动成功,然后在mysql中新建一个测试表

为了测试jar包连接mysql和redis是否成功,新建一个测试controller

@RequestMapping("student")
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    RedisCache redisCache;

    @RequestMapping("save")
    public String save() {
        User user = new User();
        user.setUserId(new Random().nextInt( 1000 ) + 1);
        user.setName("张三"+user.getUserId());
        user.setAge(new Random().nextInt( 80 ) + 1);
        userService.insert(user);
        redisCache.setCacheObject("badao","222",100, TimeUnit.SECONDS);
        String aaa = redisCache.getCacheObject("badao");
        System.out.println(aaa);
        return user.getName()+"创建成功!";
    }

}

然后调用该接口测试插入mysql和redis数据是否成功

curl 127.0.0.1:996/student/save

连接并插入mysql成功

连接并插入redis成功

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

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

相关文章

【工具测评】腾讯云 AI 代码助手——你的下一位编码“伙伴”

文章目录 引言一、VS Code下安装腾讯云 AI 代码助手插件二、腾讯云AI代码助手使用实例2.1 通过对话生成代码2.2 通过注释生成代码2.3 规范、修复代码错误2.4 人工智能技术对话,有求必应2.5 智能代码分析,快速上手历史代码 三、获得的帮助与提升四、建议五…

nvidia系列教程-AGX-Orin系统启动异常解决(eeprom: Failed to read I2C slave device)

目录 前言 一、问题描述 二、问题解决 总结 前言 在使用 NVIDIA Jetson 系列开发板时,可能会遇到启动时的错误提示,例如 eeprom: Failed to read I2C slave device。这个错误通常出现在设备启动日志中,可能会导致设备无法正常启动或功能受限…

vue3 input加一个回车,直接进行查询的事件,然后提示v-on event ‘@pressEnter‘ must be hyphenated.

1、加个回车的事件,直接就有个提示,没有报错 2、v-on事件“pressEnter”必须连字符这个是中文意思,也就是说不要写成个驼峰的形式,要改为-的形式。 3、稍改下,就可以解决: 4、其实不改也没有事的&#xff…

星际牛仔1998年SUNRISE制作的原创电视动画

《星际牛仔》是日本SUNRISE动画公司制作的原创电视动画。于1998年4月3日-1999年4月23日在东京电视台和WOWOW播出,同年夺得第三回神户动画奖的年度最佳电视动画奖,2000年获得日本科幻大会星云奖。 动画剧场版《星际牛仔:天国之扉》2001年9月1…

Vue快速入门(二)——选项式 API介绍

当前 Vue 的最新稳定版本是 v3.4.35,而Vue 2 已于 2023 年 12 月 31 日停止维护。 Vue2的书写风格是选项式 API ,而Vue3的书写风格同时支持选项式API和组合式 API。那我们选哪一种风格的API来学习呢?我建议先学习选项式API,然后再…

yolov5更换MobileNetV3的主干网络

目录 1.定义网络 2.将test_MobileNetV3.py上面的代码复制粘贴到如下文件里面 2.1复制需要更改的原来的网络如何改结构 3.更改yolo.py注册网络 1.定义网络 1. 宽度为0.5的mobilenetv2网络的结构图 在主干网络上面可以重新定义成三层,编号从0开始 如图是MobileNet…

如何在不同阶段选择合适的项目管理软件?

作为一个资深的产品经理,我有幸在过去的20多年里,接触过很多不同行业,从互联网行业、软件行业,到金融行业、制造行业,所积累的丰富经验让我对项目管理软件的选择有了更深入的了解和认识。 不同行业的项目管理痛点 每个…

如果要做一个重要的决定, 有什么好的方法可以让我做出正确的选择

做出重要决定时,以下方法可以帮助你做出更正确的选择: 文章目录 1. 收集信息和数据2. 制定明确的目标和标准3. 分析和评估选项4. 考虑长远利益5. 制定备选方案和应急计划6. 寻求意见和建议7. 直觉和情感的平衡8. 制定决策计划并执行 分析和评估选项1. 决…

【JavaEE】初步认识多线程

​ 🔥个人主页: 中草药 🔥专栏:【Java】登神长阶 史诗般的Java成神之路 🎷 一.线程 1.概念 线程(Thread)是在计算机科学中,特别是操作系统领域里的一个关键概念。它是操作系统能够进…

极狐GitLab 走进合肥,受邀参与合肥市政府举办的“开源聚力,合创未来”第一期活动

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

惊爆!英伟达那神秘的视频基础模型「Cosmos」竟然浮出水面,然而其数据居然是靠窃取得来!

🐱 个人主页:TechCodeAI启航,公众号:TechCodeAI 🙋‍♂️ 作者简介:2020参加工作,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫 优质专…

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——5Webscoket节点的使用

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——5Webscoket节点的使用 ​ 有了前面几篇文章的铺垫,现在已经可以实现我到手测试那一步的 1.解读usb_websocket_display.launch.py ​ 首先进入这个目录/root/dev_ws/src/origincar/originca…

WPF-MVVM架构

在WPF(Windows Presentation Foundation)开发中,MVVM(Model-View-ViewModel)是一种非常流行的设计模式,它旨在将应用程序的UI逻辑与业务逻辑和数据模型分离,从而提高代码的可维护性、可测试性和…

4.12.束搜索

束搜索 ​ 为了量化解码器的计算代价&#xff0c;用 y y y表示输出词表&#xff0c;其中包含 < e o s > <eos> <eos>&#xff0c;词表大小则为 ∣ y ∣ |y| ∣y∣&#xff0c;指定输出序列的最大词元数为 T ′ T T′&#xff0c;则我们的目标是从所有 O ( ∣…

同态加密和SEAL库的介绍(三)BFV - Batch Encoder

写在前面&#xff1a; 在上一篇中展示了如何使用 BFV 方案执行一个非常简单的计算。该计算在 plain_modulus 参数下进行&#xff0c;并且仅使用了 BFV 明文多项式中的一个系数。这种方法有两个显著的问题&#xff1a; 实际应用通常使用整数或实数运算&#xff0c;而不是模运算…

解决postGis无法打开的问题

问题 无法打开PostGIS PostGIS Bundle 3 for PostgreSQL x64 12 Shapefile and DBF Loader Exporter 弹出窗口 找不到libcrypto-1 postgis libcrypto libssl-1-x64等问题 解决方法 打开PostgreSQL安装目录下的Bin文件夹 查找缺少的文件 将其复制到 postgisgui 下 复制后即可…

网站建设网络公司如何选择

在选择网站建设网络公司时&#xff0c;需要考虑多个因素&#xff0c;以确保您的网站能够满足业务需求并取得成功。以下是一些建议&#xff0c;帮助您在选择网站建设网络公司时做出明智的决策。 首先&#xff0c;您应该考虑公司的经验和专业知识。选择一家有丰富经验的公司&…

实战从零开始实现Raft|得物技术

一、前言 Raft算法是一种分布式一致性算法&#xff0c;由Diego Ongaro和John Ousterhout在2013年提出。它主要用于分布式系统中&#xff0c;保证系统中的数据在多个节点间保持一致性。 Raft算法被广泛应用于众多分布式系统中&#xff0c;尤其是在需要强一致性保证的场景中&am…

【C++】-----多态及原理

目录 前言 一、是什么&#xff1f; 二、怎么样&#xff1f; Ⅰ、构成条件 Ⅱ、虚函数 Ⅲ、虚函数的重写 1.常规情况下 2.虚函数重写的三个例外 ①返回值的类型可以不同 ②析构函数的重写 ③子类虚函数可以不加virtual关键字(不建议) 3.override和final关键字 Ⅳ、重…

极米RS10 Plus VS当贝X5S Pro!最强客厅投影仪选当贝投影才是正解

不知道为什么&#xff0c;2024年的投影仪市场迭代迅猛&#xff0c;尤其是很多头部品牌小升级不断&#xff0c;机型后缀错综复杂让消费者更难下定决心做出抉择。而在今天又有一款新品极米RS10 Plus正式发布&#xff0c;同价位其实早前就有热门人气选手当贝X5S Pro坐镇&#xff0…