本篇仅简单讲述如何使用docker搭建单机版rocketmq,想在mac M1环境中构建rocketmq的小伙伴儿看过来哦
一.环境介绍
以下为本人部署时的环境介绍
- 基础环境:mac M1
- 本地docker版本:20.10.6 (注:docker版本没那么多说道,不用太在意)
二.相关镜像编译
由于M1是arm架构,docker hub中的rocketmq 和 rocketmq-console-ng控制台都需要自己编译镜像
1. 编译rocketmq镜像
我已编译好一版,可以直接拿来用[candice0630/rocketmq:5.0.0-alpine]
- 先down下代码 :git clone https://github.com/apache/rocketmq-docker.git
- 按照readme中的步骤执行命令
cd image-build
sh build-image.sh RMQ-VERSION BASE-IMAGE
(我执行的:sh build-image.sh 4.8.0 alpine )
-
上一步成功后运行 docker images
2.编译rocketmq-console-ng镜像
我已编译好一版,可以直接拿来用[candice0630/rocketmq-console-ng:2.0]
- 先down代码:git clone https://github.com/apache/rocketmq-externals.git
- 代码下载完成后先进入rocketmq-console目录
- 执行
mvn clean package -Dmaven.test.skip=true
会在./target目录下生成一个jar包 - 将jar包copy到./src/main/docker,然后 进入该目录执行
docker build -t rocketmq-console-ng:2.0 .
- 然后就坐等编译成功就好啦
!!重点强调:正常情况下只要执行(mvn clean package -Dmaven.test.skip=true docker:build)命令就可以编译docker镜像,但是我失败了 jar包编译成功,但是打docker镜像报错,所以我分别执行两步骤!!
3.broker.conf配置
由于咱们是docker构建服务,我在使用第三方rocketmq-client包创建生产者时总是使用docker分配的内网ip进行连接,因连接不通,所以我们需要修改broker配置,使其用本地ip进行连接。具体配置如下:
三.docker-compose配置
version: '3'
services:
namesrv:
image: apacherocketmq/rocketmq:4.8.0-alpine
container_name: rmqnamesrv
ports:
- 9876:9876
command: sh mqnamesrv
broker:
image: apacherocketmq/rocketmq:4.8.0-alpine //这儿是自己编译的镜像
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
volumes:
//这儿将本地的broker.conf配置文件挂在到容器中
- '本机broker.conf目录'/broker.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf
command: sh mqbroker -n namesrv:9876 -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
depends_on:
- namesrv
mqconsole:
image: candice0630/rocketmq-console-ng:2.0 //这儿是自己编译的ng镜像
container_name: rmqconsole
ports:
- 19876:8080
environment:
JAVA_OPTS: -Drocketmq.config.namesrvAddr=namesrv:9876 -Drocketmq.config.isVIPChannel=false
depends_on:
- namesrv
四.运行
使用docker-compose执行第三部配置好的yml文件
eg:docker-compose -f rocketmq.yml up -d
然后我就成功啦!!
再访问localhost:19876 rocketmq控制台进行简单测试
五.总结
rocketmq目前本人还在学习阶段,对docker了解也较浅,所以目前先简单介绍学习rocketmq的第一步 本地部署。希望此篇文章可以让小伙伴儿们避免一些坑