docker compose dns 缓存_「实战」docker-compose 编排 多个docker 组成一个集群并做负载

本文目标

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

架构

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

主要配置文件说明

application-compose.yml
672ca8d50206f2410c9e563fe3beb904.png
docker-compose.yml
cbd88a308ae340d0d24f47b176819b0c.png

启动springboot项目看看接口情况

655a6e87f78f43e652b05550c689c49b.png
c90683d97d3e49b343b47e7ef00cef29.png

生成jar包

9ef14e0a4fc6364b52c0d023ce4d957b.png

复制jar包

f644667c0eae827f36c53865bc03b836.png

生成docker镜像

64b1566eeabd756e5423d08899ed3d60.png

或者

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

启动docker compose

docker-compose up -dd 是不显示运行时的日志输出使用  docker-compose logs 查看
c3422c39505b7df9347a3f74979d9f87.png
ef32d152558119a6c84f02096a59c605.png
  可以看到,redis, mysql, spring boot 2个,nginx 的容器都启动了

初始化mysql数据库

  • 查看mysql的docker id
docker ps
03fbaa2c8991bcdfaf7246b959ccd20a.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
10663f0d7d33957cacdb1597986574e9.png

异常处理

  • Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
访问 curl 127.0.0.1/redis 报上面的异常解决方法 不配置redis访问密码
edfe099e5cc97b5ca3933359605b942d.png
  • Failed to obtain JDBC Connection
访问 http://127.0.0.1/commands 报上面的错解决方法 mysql docker端口映射
1e5490b28437bb57cb1026cc8c96d808.png

流程梳理

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

接口测试

fe6e30ebdb5464bf7b82603480b7c882.png
eb310b9acc5e9eb0a769722a0c3031cf.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
537a36c2a3eafd4f9cc7405fe32488f0.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://www.cnblogs.com/bear129/p/12523573.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值