RocketMQ在Docker下的部署

前言

現(xiàn)在網(wǎng)絡(luò)上大部分的技術(shù)文章就是純粹的復(fù)制粘貼,自己具體有沒有去實際操作過都是要打上問號的。
眾所周知,RocketMQ是name-server和broker一起協(xié)同工作的。
那么在docker下的部署,就要考慮到容器間的網(wǎng)絡(luò)互聯(lián)問題。
現(xiàn)在網(wǎng)絡(luò)上清一色使用的是過時的--link來連接name-server和broker。
找一個日期靠前的部署教程,甚至都無法正常啟動容器,所以才有了這篇文章。

文章說明

本教程完全由我反復(fù)部署,試驗了3種不同環(huán)境,公司,家里,朋友電腦。全部能正常部署成功,期間出現(xiàn)的一些問題點也會給出解決方案。

1.鏡像版本選擇

從docker hub上查看到RocketMQ鏡像最新版本為4.4.0。

那么就選擇4.4.0了。

2.為容器網(wǎng)絡(luò)互聯(lián)創(chuàng)建RocketMQ的docker網(wǎng)絡(luò)

# 后續(xù)的name-server,broker,rocketmq-console都會使用該網(wǎng)絡(luò)
docker network create rocketmq

# 創(chuàng)建好網(wǎng)絡(luò)可以使用docker inspect命令查看網(wǎng)絡(luò)信息
docker inspect rocketmq

3.部署name-server

# 無須先pull鏡像,docker run之前會自動下載鏡像

docker run -d --name rmqnamesrv -p 9876:9876 \
--privileged=true \
--network rocketmq \
-v /docker/rocketmq/namesrv/logs:/root/logs \
-v /docker/rocketmq/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq:4.4.0 sh mqnamesrv autoCreateTopicEnable=true

參數(shù)說明:

  • --name rmqnamesrv:指定容器名稱為rmqnamesrv,注意這個名字,后續(xù)會使用。
  • --network rocketmq:為容器指定網(wǎng)絡(luò)為rocketmq,同一網(wǎng)絡(luò)下的容器能夠通過容器名稱互通。
  • --privileged=true:如果使用-v映射了目錄,則使用該參數(shù)獲取文件訪問權(quán)限

查看啟動成功后的日志:

docker logs -f rmqnamesrv
namesrv啟動日志.png

4.部署broker

首先在宿主機創(chuàng)建broker的配置文件目錄

sudo mkdir -p /docker/rocketmq/broker/conf

創(chuàng)建broker的配置文件broker.conf

vi /docker/rocketmq/broker/conf/broker.conf

broker.conf內(nèi)容如下(記得修改brokerIP1的值為宿主機的ip地址)

brokerClusterName = DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.81.120

部署broker

# 無須先pull鏡像,docker run之前會自動下載鏡像
docker run -d --name rmqbroker -p 10911:10911 -p 10909:10909 \
--privileged=true \
--network rocketmq \
-v /docker/rocketmq/broker/logs:/root/logs \
-v /docker/rocketmq/broker/store:/root/store \
-v /docker/rocketmq/broker/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-e "NAMESRV_ADDR=rmqnamesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq:4.4.0 sh mqbroker autoCreateTopicEnable=true -c /opt/rocketmq-4.4.0/conf/broker.conf

參數(shù)說明:

  • --network rocketmq:為容器指定網(wǎng)絡(luò)為rocketmq,同一網(wǎng)絡(luò)下的容器能夠通過容器名稱互通。
  • -e "NAMESRV_ADDR=rmqnamesrv:9876":此處的rmqnamesrv就是容器name-server的名稱

查看啟動日志:

docker logs -f rmqbroker
image.png

從日志可以看出,已經(jīng)獲取到配置文件中broker的ip地址。
name-server的地址則是由name-server容器名稱:端口號組成。

下面來驗證一下容器內(nèi)部是否能夠通過容器名稱進行網(wǎng)絡(luò)互聯(lián)。
驗證思路為從一個容器內(nèi)部ping另一個容器,看是否能夠ping通。

# 進入broker容器
docker exec -it rmqbroker /bin/bash

# ping name-server的容器名稱
ping rmqnamesrv
image.png

能夠ping通,說明網(wǎng)絡(luò)是互通的,現(xiàn)在rocketmq就已經(jīng)部署完畢了。
如果無法ping通容器,那么說明啟動命令有問題,重新檢查自己啟動的命令。
如果無法ping通宿主機的ip,請重新按下述文章步驟安裝docker。
CentOS下的docker部署 - Torture

為了后續(xù)方便,這里再部署一個RocketMQ的控制臺。

5.部署console

console的部署就不說那么多了,直接上命令。

# 同樣在啟動的時候指定同一個network
# 注意修改rocketmq.namesrv.addr后面的地址為容器名稱:端口號

docker run -d --name rmqconsole -p 8080:8080 --network rocketmq \
 -e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876" styletang/rocketmq-console-ng

訪問控制臺:


控制臺界面
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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