持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
1.写在前面
很多微服务
项目的框架,一般会采用消息
中间件,进行业务逻辑的解耦。
鉴于目前SpringCloud Alibaba
这套体系用得比较多,那一整套的分布式解决方案,rocketmq
消息中间件也就用得比较多了。(毕竟是一整套的东西)^_^
一般来说,我们的项目,如果是传统的方式部署,直接从rocketmq
官网,拿到rocketmq
的服务的中间件,直接跑起来就行了。
目前最新版:4.9.3(2022-06-14)
但现在很多时候,我们的服务,要使用云原生k8s
部署,那就要使用rocketmq
的docker镜像,运行rocketmq了。
rocketmq
的docker
镜像包,我们可以从docker hub
仓库,直接拉别人制作好的镜像包。
docker pull apache/rocketmq:4.9.3
扫描二维码关注公众号,回复: 14273722 查看本文章![]()
docker [运行教程] (github.com/apache/rock…)
1) Start NameServer
$ docker run -it --net=host apache/rocketmq:4.9.3 ./mqnamesrv
复制代码
需要暴露端口,默认为:-p 9876:9876
2) Start Broker
$ docker run -it --net=host --mount source=/tmp/store,target=/home/rocketmq/store apache/rocketmq:4.9.3 ./mqbroker -n localhost:9876
复制代码
需要暴露端口,默认为:-p 10911:10911 -p 10909:10909 -p 10912:10912
由此可见,我们要执行两次docker
的run
命令运行。
因为rocketmq
至少需要启动一个nameserver
和一个broker
服务。
那可不可以做到,我只执行一次docker run
命令,就帮我们同时启动一个nameserver
和一个broker
服务?
答案,肯定是可以!!! 我自己制作一个镜像,同时帮我们启动一个nameserver
和一个broker
服务,就好了。
当然,这种一般只适合在我们开发环境中使用。
上生产环境,我们就需要分开部署:
nameserver集群
部署、broker集群
部署详情可参考这里:点击查看
那就开干吧!!!
2.rocketmq镜像包制作
2.1环境准备
- /opt/dockerfile/rocketmq
从rocketmq官网中download可以运行的rocketmq版本,这里已4.5.0版本作为基础版本 rocketmq-all-4.5.0-bin-release.zip
上传到/opt/dockerfile/rocketmq
下面,解压,并重命名为rocketmq
unzip rocketmq-all-4.5.0-bin-release.zip
mv rocketmq-all-4.5.0-bin-release rocketmq
复制代码
- 编写启动rocketmq脚本,
startServer.sh
#!/bin/bash
source /etc/profile
cd /opt/rocketmq
mkdir logs
# 启动nameserver
nohup sh ./bin/mqnamesrv > ./logs/ns.log 2>&1 &
# 启动Broker
nohup sh ./bin/mqbroker -c ./conf/broker.conf -n $NAMESRV_IP:$NAMESRV_PORT > ./logs/bk.log 2>&1 &
tail -f ./logs/ns.log & tail -f ./logs/bk.log
复制代码
$NAMESRV_IP: 为nameserver的ip地址
$NAMESRV_PORT: 为nameserver的port端口号
2.2Dockerfile
FROM openjdk:8u332-jdk
RUN mkdir -p /opt/
WORKDIR /opt/
COPY ./rocketmq ./rocketmq
COPY ./startServer.sh .
ENTRYPOINT ["sh", "/opt/startServer.sh"]
复制代码
2.3打包发布
- vi build.sh
docker build -t llsydn/rocketmq:4.5 -f ./Dockerfile .
docker push llsydn/rocketmq:4.5
docker rmi llsydn/rocketmq:4.5
复制代码
2.4效果
账号密码:admin、llsydn123
harbor的安装可查看这里:点击查看
3.docker启动rocketmq镜像
- 启动命令
docker run --name rocketmq \
-p 9876:9876 \
-p 10911:10911 -p 10909:10909 -p 10912:10912 \
-e NAMESRV_IP=192.168.4.xxx \
-e NAMESRV_PORT=9876 \
llsydn/rocketmq:4.5
复制代码
这里要指定
NAMESRV_IP
为nameserver的ip地址,一般用宿主机ip即可,否则默认会用docker容器的ip。这里要指定
NAMESRV_PORT
为nameserver的端口
可以参考:官方docker部署文档
好了,以上就是我个人的实操了。
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下呗!!!