【實(shí)戰(zhàn)】docker-compose 編排 多個(gè)docker 組成一個(gè)集群并做負(fù)載

本文目標(biāo)

   docker-compose,對(duì)spring boot應(yīng)用進(jìn)行一個(gè)集群(2個(gè)docker,多個(gè)類似,只要在docker-compose.yml再加boot應(yīng)用的服務(wù)即可)發(fā)布的過程

架構(gòu)

spring boot使用nginx作為反向代理,redis作為緩存,mysql作為數(shù)據(jù)庫(kù),全部docker化

主要配置文件說明

application-compose.yml

docker-compose.yml

啟動(dòng)springboot項(xiàng)目看看接口情況

生成jar包

復(fù)制jar包

生成docker鏡像

或者



1?? 進(jìn)入到項(xiàng)目所在的目錄下

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

3?? docker build . -t compose-demo:1.0

啟動(dòng)docker compose

docker-compose up -d

d 是不顯示運(yùn)行時(shí)的日志輸出

使用 docker-compose logs 查看

  可以看到,redis, mysql, spring boot 2個(gè),nginx 的容器都啟動(dòng)了

初始化mysql數(shù)據(jù)庫(kù)

  • 查看mysql的docker id
docker ps
  • 把 compose.sql文件copy到docker容器里 /opt目錄下
docker cp compose.sql 01bd894f9ebd:/opt
  • 進(jìn)入mysql的docker容器
docker exec -it 01bd894f9ebd /bin/bash
  • 使用 docker容器里 /opt/compose.sql 初始化數(shù)據(jù)庫(kù)

    1?? mysql -u root -p

    輸入docker-compose.yml里設(shè)置的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 報(bào)上面的異常

解決方法 不配置redis訪問密碼
  • Failed to obtain JDBC Connection

訪問 http://127.0.0.1/commands 報(bào)上面的錯(cuò)

解決方法 mysql docker端口映射

流程梳理

1、打jar包

2、將jar包生成dokcer鏡像

3、docker compose :mysql、redis、2個(gè)springboot、nginx 都啟動(dòng)好

4、訪問nginx接口路由轉(zhuǎn)發(fā)到springboot 然后訪問redis和mysql

接口測(cè)試

對(duì)測(cè)試結(jié)果分析

  • 因?yàn)閚ginx的端口是80, 所以不用端口號(hào)訪問
  • 兩次 /redis的訪問,返回的ip 不一樣, 一個(gè)是172.18.0.4, 一個(gè)172.18.0.5,看來兩個(gè)boot應(yīng)用都可以訪問了。

擴(kuò)展

  • 重新開始 執(zhí)行 docker-compose down

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

docker volume ls
  1??  圖中紅框是實(shí)際db_data的位置。

2?? 這里實(shí)際保存mysql的數(shù)據(jù),即使刪除mysql的容器(docker-compose down, 或 docker rm xxx),

3?? 下次再建立容器時(shí),數(shù)據(jù)還在,root密碼不會(huì)變。

4?? 如果docker-compose里密碼改變的話,就要?jiǎng)h除db_data這個(gè)volume,讓docker-compose重建volume, 再重新初始化數(shù)據(jù)庫(kù)。

(當(dāng)然進(jìn)入 docker容器里改root密碼也行,不過這要用mysql客戶端,相對(duì)麻煩)

docker volume rm compose-demo_db_data

代碼資源

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

參考文獻(xiàn)

https://www.cnblogs.com/bear129/p/12523573.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容