流程

  • 拉取RocketMQ镜像
  • 创建共享网络
  • 构建nameserver并启动
  • 构建broker + proxy
  • rocketmq-dashboard可视化

一、拉取RocketMQ镜像

docker pull apache/rocketmq:5.1.0

二、创建共享网络

为什么要创建docker共享网络

  • 容器间通信:创建一个 Docker 网络可以确保同一个网络中的容器可以通过容器名称进行通信,而不需要知道对方的 IP 地址。这对于需要相互通信的服务非常重要,比如 RocketMQ 的多个组件(如 NameServer 和 Broker)
  • 隔离性和安全性:Docker 网络提供了一个隔离的网络环境,不同网络中的容器彼此隔离。这增加了安全性,防止外部或其他不相关的容器访问敏感服务
  • 简化配置:使用 Docker 网络,配置变得更加简单。容器可以通过名称互相访问,无需担心容器重启后 IP 地址发生变化
docker network create rocketmq

三、构建nameserver并启动

  • 创建目录
  • 创建容器
  • 拷贝启动脚本
  • 删除容器
  • 启动容器

创建目录

mkdir -p /data/rocketmq/nameserver/bin /data/rocketmq/nameserver/logs

创建容器

docker run -d \
--privileged=true --name rmqnamesrv \
apache/rocketmq:5.1.0 sh mqnamesrv

拷贝启动脚本

docker cp rmqnamesrv:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh /data/rocketmq/nameserver/bin/

删除容器

docker rm -f rmqnamesrv

启动容器

# 启动容器 NameServer
docker run -d --network rocketmq \
--privileged=true --restart=always \
--name rmqnamesrv -p 9876:9876 \
-v /data/rocketmq/nameserver/logs:/home/rocketmq/logs \
-v /data/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh \
apache/rocketmq:5.1.0 sh mqnamesrv

四、构建broker + proxy

  • 创建挂载文件
  • 创建broker.cnf文件
  • 启动broker容器
  • 拷贝脚本文件
  • 删除broker容器
  • 启动broker容器

创建挂载文件

mkdir -p /data/rocketmq/broker/store /data/rocketmq/broker/logs /data/rocketmq/broker/conf /data/rocketmq/broker/bin

创建broker.cnf文件

vim /data/rocketmq/broker/conf/broker.conf

文件详情:IP地址填写自己真实的IP地址

# nameServer 地址多个用;隔开 默认值null
namesrvAddr = 192.168.37.105:9876
# 集群名称
brokerClusterName = DefaultCluster
# 节点名称
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0 
brokerId = 0
# Broker服务地址    String  内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = 192.168.37.105
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# 禁用 tsl
tlsTestModeEnable = false
​
# 下面是没有注释的版本, 记得修改"namesrvAddr", "brokerIP1"的地址
namesrvAddr = 192.168.37.105/:9876
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
brokerIP1 = 192.168.37.105
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
deleteWhen = 04
fileReservedTime = 72
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
tlsTestModeEnable = false
​

启动broker容器

docker run -d \
--name rmqbroker --privileged=true \
apache/rocketmq:5.1.0 sh mqbroker

拷贝脚本文件

docker cp rmqbroker:/home/rocketmq/rocketmq-5.1.0/bin/runbroker.sh /data/rocketmq/broker/bin

删除broker容器

docker rm -f rmqbroker

启动broker容器

# 启动容器 Broker
docker run -d --network rocketmq \
--restart=always --name rmqbroker --privileged=true \
-p 10911:10911 -p 10909:10909 \
-v /data/rocketmq/broker/logs:/root/logs \
-v /data/rocketmq/broker/store:/root/store \
-v /data/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf \
-v /data/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.1.0/bin/runbroker.sh \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
apache/rocketmq:5.1.0 sh mqbroker --enable-proxy -c /home/rocketmq/broker.conf

五、rocketmq-dashboard可视化

  • 拉取rocketmq-dashboard
  • 运行rocketmq-dashboard

拉取rocketmq-dashboard

docker pull apacherocketmq/rocketmq-dashboard:latest

运行rocketmq-dashboard

docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest

浏览器访问:自己IP + 8080端口即可查看可视化

最后修改:2025 年 04 月 24 日
如果觉得我的文章对你有用,请随意赞赏