首先下载镜像
docker pull rocketmqinc/rocketmq # rocketmq
docker pull apacherocketmq/rocketmq-dashboard # rocketmq 管理平台
创建自定义网络,用于容器通信
docker network create rocketmq-net
启动 mqnamesrv
docker run -d \
--name rmqnamesrv \ # 容器名称为 rmqnamesrv
--network rocketmq-net \ # 连接到自定义网络 rocketmq-net
-p 9876:9876 \ # 映射主机端口 9876 到容器端口 9876
-v /usr/local/docker/local/rocket/data/conf:/root/conf \ # 挂载配置文件目录
-v /usr/local/docker/local/rocket/data/store:/root/store \ # 挂载数据存储目录
-v /usr/local/docker/local/rocket/data/logs:/root/logs \ # 挂载日志目录
-e "MAX_POSSIBLE_HEAP=100000000" \ # 设置环境变量 MAX_POSSIBLE_HEAP
rocketmqinc/rocketmq \ # 使用 rocketmqinc/rocketmq 镜像
sh mqnamesrv # 执行 sh mqnamesrv 启动 NameServer
启动 broker
创建配置目录和broker配置文件
mkdir -p /usr/local/docker/local/rocketbroker/conf
vi /usr/local/docker/local/rocketbroker/conf/broker.conf
mkdir -p /usr/local/docker/local/rocketbroker/logs
mkdir -p /usr/local/docker/local/rocketbroker/store
broker.conf
注意:brokerIP1 的地址,需要从命令 docker network inspect rocketmq-net 中查询
brokerClusterName = DefaultCluster
brokerName = rocket-broker-master-one
# Master=0,slave > 0
brokerId = 0
# 表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
# 在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
# 有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
# 刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址
namesrvAddr = 127.0.0.1:9876
brokerIP1 = 172.19.0.3
启动 broker
docker run -d \
--name rocketbroker \ # 容器名称为 rocketbroker
--network rocketmq-net \ # 连接到自定义网络 rocketmq-net
-p 10911:10911 \ # 映射主机端口 10911 到容器端口 10911
-p 10909:10909 \ # 映射主机端口 10909 到容器端口 10909
-v /usr/local/docker/local/rocketbroker/logs:/root/logs \ # 挂载日志目录
-v /usr/local/docker/local/rocketbroker/store:/root/store \ # 挂载数据存储目录
-v /usr/local/docker/local/rocketbroker/conf/broker.conf:/opt/rocketmq/conf/broker.conf \ # 挂载配置文件
-e "NAMESRV_ADDR=rmqnamesrv:9876" \ # 设置 NameServer 地址
-e "MAX_POSSIBLE_HEAP=200000000" \ # 设置最大堆内存大小
rocketmqinc/rocketmq \ # 使用 rocketmqinc/rocketmq 镜像
sh mqbroker -c /opt/rocketmq/conf/broker.conf # 执行 sh mqbroker 启动 Broker
启动 rocketmq 的控制台
首先查看自定义网络的信息
docker network inspect rocketmq-net
下面图中是 namesrv 的地址
启动控制台
docker run -d \ # 在后台运行容器
--name rocketmq-dashboard \ # 容器名称为 rocketmq-dashboard
--network rocketmq-net \ # 连接到自定义网络 rocketmq-net
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.19.0.2:9876" \ # 设置 RocketMQ NameServer 的地址
-p 8077:8080 \ # 将容器的 8080 端口映射到主机的 8077 端口
apacherocketmq/rocketmq-dashboard # 使用 apacherocketmq/rocketmq-dashboard 镜像启动容器
Docker Compose 部署
结构配置文件
broker
broker.conf
其中 brokerIP1 = broker 地址为 broker 是容器的名字
# 集群名称
brokerClusterName = DefaultCluster
# 节点名称
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0
brokerId = 0
# Broker服务地址 String 内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = broker
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
namesrvAddr=127.0.0.1:9876
#是大写的IP一定要注意!!!修改成自己的IP地址
brokerIP1=192.168.200.130
namesrv
最后 yml文件信息
注意:最后的控制台容器中,java参数中的 namesrv 一定对应容器的名字。
version: '3'
services:
# RocketMQ Namesrv 服务
namesrv:
image: rocketmqinc/rocketmq # 使用 RocketMQ 官方镜像
container_name: mqnamesrv # 容器名称
ports:
- "9876:9876" # 映射容器端口到宿主机端口
hostname: namesrv # 容器主机名
volumes:
- ./namesrv/conf:/root/conf # 挂载 Namesrv 配置文件目录
- ./namesrv/store:/root/store # 挂载 Namesrv 存储目录
- ./namesrv/logs:/root/logs # 挂载 Namesrv 日志目录
command: ["sh","mqnamesrv"] # 启动命令
# RocketMQ Broker 服务
broker:
image: rocketmqinc/rocketmq # 使用 RocketMQ 官方镜像
container_name: mqbroker # 容器名称
ports:
- "10911:10911" # 映射容器端口到宿主机端口
- "10909:10909"
restart: always # 总是重启容器
privileged: true # 提供给容器访问主机的权限
environment:
- NAMESRV_ADDR=namesrv:9876 # 设置 Broker 的 NameServer 地址
- MAX_HEAP_SIZE=512M # 设置最大堆内存大小
- HEAP_NEWSIZE=256M # 设置新生代堆内存大小
volumes:
- ./broker/store:/root/store # 挂载 Broker 存储目录
- ./broker/logs:/root/logs # 挂载 Broker 日志目录
- ./broker/broker.conf:/opt/rocketmq/conf/broker.conf # 挂载 Broker 配置文件
command: ["sh","mqbroker", "-c", "/opt/rocketmq/conf/broker.conf"] # 启动命令
depends_on:
- 'namesrv' # 依赖于 Namesrv 服务
# RocketMQ Dashboard 服务
rmqdashboard:
image: apacherocketmq/rocketmq-dashboard # 使用 RocketMQ Dashboard 官方镜像
container_name: rocketmq-dashboard # 容器名称
ports:
- 8080:8080 # 映射容器端口到宿主机端口
restart: always # 总是重启容器
privileged: true # 提供给容器访问主机的权限
depends_on:
- 'namesrv' # 依赖于 Namesrv 服务
environment:
- JAVA_OPTS= -Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false # Java 启动参数