Docker RocketMQ 安装
1 拉取最新镜像
docker pull apache/rocketmq:5.3.0
2 创建挂载目录
# nameserver 挂载目录 分别是 日志、启动脚本 mkdir -p /root/app/rocketmq/nameserver/logs mkdir -p /root/app/rocketmq/nameserver/bin # broker 挂载目录 分别是 日志,数据,配置文件,启动脚本 mkdir -p /root/app/rocketmq/broker/logs mkdir -p /root/app/rocketmq/broker/store mkdir -p /root/app/rocketmq/broker/conf mkdir -p /root/app/rocketmq/broker/bin # 对rocketmq目录下所有目录、文件进行授权,一定要授权,不然挂载日志 数据的时候会报错 # 一定要授权 # 一定要授权 chmod -R 777 /root/app/rocketmq/
3 创建网络
docker network create rocketmq
Nameserver
1、简单启动一下,目的是为了将启动脚本复制出来
docker run -d \ --privileged=true \ --name rmqnamesrv \ apache/rocketmq:5.3.0 sh mqnamesrv
- 将启动脚本复制回到宿主机中并进行修改
目的:原始脚本申请的堆内存过大,需要控制一下,JVM内存参数手动传入
docker cp \ rmqnamesrv:/home/rocketmq/rocketmq-5.3.0/bin/runserver.sh \ /root/app/rocketmq/nameserver/bin/runserver.sh
# 在runserver.sh脚本中找到 calculate_heap_sizes 并注释掉就可以了 # calculate_heap_sizes
#脚本修完完毕,简单启动的容器就可以不要了 docker stop rmqnamesrv docker rm rmqnamesrv
3、正式启动RocketMQ NameServer
docker run -d \ --name rmqnamesrv \ --network rocketmq \ --restart=always \ -p 9876:9876 \ -e "MAX_HEAP_SIZE=512M" \ -e "HEAP_NEWSIZE=128M" \ -v /root/app/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.3.0/bin/runserver.sh \ -v /root/app/rocketmq/nameserver/logs:/home/rocketmq/logs/rocketmqlogs \ apache/rocketmq:5.3.0 sh mqnamesrv
Broker
1、简单启动,将启动脚本复制出来
docker run -d \ --name rmqbroker \ --privileged=true \ apache/rocketmq:5.3.0 \ sh mqbroker
- 将启动脚本复制回到宿主机中并进行修改
目的:原始脚本申请的堆内存过大,需要控制一下,JVM内存参数手动传入
docker cp rmqbroker:/home/rocketmq/rocketmq-5.3.0/bin/runbroker.sh \ /root/app/rocketmq/broker/bin/runbroker.sh
# 在runbroker.sh脚本中找到 calculate_heap_sizes 并注释掉就可以了 # calculate_heap_sizes
#脚本修完完毕,简单启动的容器就可以不要了 docker stop rmqbroker docker rm rmqbroker
/root/app/rocketmq/broker/conf
下创建配置文件 broker.conf
# 所属集群名称,如果节点较多可以配置多个 brokerClusterName = DefaultCluster #broker名称,master和slave使用相同的名称,表明他们的主从关系 brokerName = broker-a #0表示Master,大于0表示不同的slave brokerId = 0 #表示几点做消息删除动作,默认是凌晨4点 deleteWhen = 04 #在磁盘上保留消息的时长,单位是小时 fileReservedTime = 72 #有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制; brokerRole = ASYNC_MASTER #刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功 状态,ASYNC_FLUSH不需要; flushDiskType = ASYNC_FLUSH # 设置broker节点所在服务器(宿主机)的ip地址、物理ip,不能用127.0.0.1、localhost、docker内网ip brokerIP1 = 宿主机地址
- 配置密码
- 将acl配置文件复制回宿主机进行修改
docker cp rmqbroker:/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml \ /root/app/rocketmq/broker/conf/plain_acl.yml
5、正式启动broker
docker run -d \ --name rmqbroker \ --network rocketmq \ --restart=always \ -p 10912:10912 -p 10911:10911 -p 10909:10909 \ -p 18080:8080 -p 18081:8081 \ -e "NAMESRV_ADDR=宿主机地址:9876" \ -e "MAX_HEAP_SIZE=2048M" \ -e "HEAP_NEWSIZE=512M" \ -v /root/app/rocketmq/broker/logs:/home/rocketmq/logs \ -v /root/app/rocketmq/broker/store:/home/rocketmq/store \ # 密码配置 -v /root/app/rocketmq/broker/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml \ -v /root/app/rocketmq/broker/conf/broker.conf:/home/rocketmq/rocketmq-5.3.0/conf/broker.conf \ -v /root/app/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.3.0/bin/runbroker.sh \ apache/rocketmq:5.3.0 sh mqbroker --enable-proxy \ -c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf
安装 管理面板 dashboard
拉取镜像
docker pull apacherocketmq/rocketmq-dashboard:latest
- 配置dashboard 连接 带密码的broker
简单启动一下容器,将容器中根目录的rocketmq-dashboard.jar复制出来
docker cp rocketmq-dashboard:/rocketmq-dashboard.jar /root/app/rocketmq/dashboard/rocketmq-dashboard.jar
解压缩rocketmq-dashboard.jar,编辑其中的application.properties,改好后将该配置文件重新放回jar中替换旧配置。
#需要配置的信息 rocketmq.config.accessKey=管理员名称 rocketmq.config.secretKey=管理员密码
启动容器
docker run -d \ --name rocketmq-dashboard \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=宿主机地址:9876" \ -v /root/app/rocketmq/dashboard/rocketmq-dashboard.jar:/rocketmq-dashboard.jar \ -p 8888:8080 \ apacherocketmq/rocketmq-dashboard:latest
参考:https://www.yuque.com/woruochengfeng-mm5ow/bg71qs/yx6d87a7zlmri0cq