专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

【实战】docker-compose 编排 多个docker 组成一个集群并做负载

本文目标

   docker-compose,对spring boot应用进行一个集群(2个docker,多个类似,只要在docker-compose.yml再加boot应用的服务即可)发布的过程

架构

spring boot使用nginx作为反向代理,redis作为缓存,mysql作为数据库,全部docker化

70_1.png

主要配置文件说明

application-compose.yml

70_2.png

docker-compose.yml

70_3.png

启动springboot项目看看接口情况

70_4.png70_5.png

生成jar包

70_6.png

复制jar包

70_7.png

生成docker镜像

70_8.png

或者


1⃣️ 进入到项目所在的目录下 2⃣️ cd /Users/mengfanxiao/Documents/project/person/springboot/docker-compose/compose-demo 3⃣️ docker build . -t compose-demo:1.0

70_9.png

启动docker compose

docker-compose up -d
 d 是不显示运行时的日志输出 
 使用  docker-compose logs 查看 

70_10.png

  可以看到,redis, mysql, spring boot 2个,nginx 的容器都启动了

初始化mysql数据库

  • 查看mysql的docker id
docker ps

70_11.png

  • 把 compose.sql文件copy到docker容器里 /opt目录下
docker cp compose.sql 01bd894f9ebd:/opt        

  • 进入mysql的docker容器
docker exec -it 01bd894f9ebd /bin/bash

  • 使用 docker容器里 /opt/compose.sql 初始化数据库

    1⃣️ mysql -u root -p

    输入docker-compose.yml里设置的root用户的密码

2⃣️ source /opt/compose.sql

70_12.png

异常处理

  • Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
访问 curl 127.0.0.1/redis 报上面的异常 
 解决方法 不配置redis访问密码 

70_13.png

  • Failed to obtain JDBC Connection

访问 http://127.0.0.1/commands 报上面的错 解决方法 mysql docker端口映射

70_14.png

流程梳理

1、打jar包
 2、将jar包生成dokcer镜像 
 3、docker compose   : mysql、redis、2个springboot、nginx 都启动好 
 4、访问nginx接口路由转发到springboot 然后访问redis和mysql 

接口测试

70_15.png70_16.png

对测试结果分析

  • 因为nginx的端口是80, 所以不用端口号访问
  • 两次 /redis的访问,返回的ip 不一样, 一个是172.18.0.4, 一个172.18.0.5,看来两个boot应用都可以访问了。

扩展

  • 重新开始 执行 docker-compose down
  • 查看 docker-compose.yml里的 db_data 映射到哪里
docker volume ls

70_17.png

  1⃣️  图中红框是实际db_data的位置。
 2⃣️  这里实际保存mysql的数据,即使删除mysql的容器(docker-compose down,  或 docker rm xxx), 
 3⃣️  下次再建立容器时,数据还在,root密码不会变。 
 4⃣️ 如果docker-compose里密码改变的话,就要删除db_data这个volume,让docker-compose重建volume, 再重新初始化数据库。 

(当然进入 docker容器里改root密码也行,不过这要用mysql客户端,相对麻烦)

docker volume rm compose-demo_db_data



代码资源

https://gitee.com/pingfanrenbiji/compose-demo.git

参考文献

https://tech.souyunku.com/bear129/p/12523573.html

本文使用 tech.souyunku.com 排版

文章永久链接:https://tech.souyunku.com/32001

未经允许不得转载:搜云库技术团队 » 【实战】docker-compose 编排 多个docker 组成一个集群并做负载

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们