美文网首页
【实战】docker-compose 编排 多个docker 组

【实战】docker-compose 编排 多个docker 组

作者: 平凡人笔记 | 来源:发表于2020-05-20 15:07 被阅读0次

    本文目标

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

    架构

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

    主要配置文件说明

    application-compose.yml

    docker-compose.yml

    启动springboot项目看看接口情况

    生成jar包

    复制jar包

    生成docker镜像

    或者



    1⃣️ 进入到项目所在的目录下

    2⃣️ cd /Users/mengfanxiao/Documents/project/person/springboot/docker-compose/compose-demo

    3⃣️ docker build . -t compose-demo:1.0

    启动docker compose

    docker-compose up -d

    d 是不显示运行时的日志输出

    使用 docker-compose logs 查看

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

    初始化mysql数据库

    • 查看mysql的docker id
    docker ps
    • 把 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

    异常处理

    • Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
    访问 curl 127.0.0.1/redis 报上面的异常

    解决方法 不配置redis访问密码
    • Failed to obtain JDBC Connection

    访问 http://127.0.0.1/commands 报上面的错

    解决方法 mysql docker端口映射

    流程梳理

    1、打jar包

    2、将jar包生成dokcer镜像

    3、docker compose :mysql、redis、2个springboot、nginx 都启动好

    4、访问nginx接口路由转发到springboot 然后访问redis和mysql

    接口测试

    对测试结果分析

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

    扩展

    • 重新开始 执行 docker-compose down

    • 查看 docker-compose.yml里的 db_data 映射到哪里

    docker volume ls
      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

    相关文章

      网友评论

          本文标题:【实战】docker-compose 编排 多个docker 组

          本文链接:https://www.haomeiwen.com/subject/gwqnohtx.html