在Docker下部署RocketMQ(4.9.2版本)

  • A+
所属分类:Java

之前写过4.2.0版本基于Docker对RocketMQ的部署。
最近根据之前的文档去部署,发现由于升级,以前的操作不能使用了。
下面是2021年11月份部署的操作步骤。

首先是生成Docker镜像的脚本从原有的git工程迁移到了一个独立的工程
rocketmq-docker中。
工程的README.md也描述了脚本的使用手册。
下面具体讲一下根据使用说明操作,排的一些坑。

生成RocketMQ镜像

首先下载工程

wget https://github.com/apache/rocketmq-docker.git

执行工程下的脚本生成镜像。

cd image-build
#sh build-image.sh RMQ-VERSION BASE-IMAGE
sh build-image.sh 4.9.2 centos

该脚本会执行镜像脚本Dockerfile-centos,该脚本在下载rocketmq镜像,并解压处理的脚本会有问题。
需要将

RUN set -eux; \
    curl -L https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip -o rocketmq.zip; \
    curl -L https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip.asc -o rocketmq.zip.asc; \
    #https://www.apache.org/dist/rocketmq/KEYS
    curl -L https://www.apache.org/dist/rocketmq/KEYS -o KEYS; \
    \
    gpg --import KEYS; \
    gpg --batch --verify rocketmq.zip.asc rocketmq.zip ; \
    unzip rocketmq.zip ; \
    mv rocketmq-all*/* . ; \
    rmdir rocketmq-all*  ; \
    rm rocketmq.zip rocketmq.zip.asc KEYS

改为

RUN set -eux; \
    curl -L https://archive.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip -o rocketmq.zip; \
    curl -L https://archive.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip.asc -o rocketmq.zip.asc; \
    #https://www.apache.org/dist/rocketmq/KEYS
        curl -L https://www.apache.org/dist/rocketmq/KEYS -o KEYS; \
        \
        gpg --import KEYS; \
    gpg --batch --verify rocketmq.zip.asc rocketmq.zip ; \
    unzip rocketmq.zip ; \
        mv rocketmq*/* . ; \
        rm -f rocketmq.zip rocketmq.zip.asc KEYS ;\
        rmdir rocketmq*

镜像生成以后,镜像名称为apacherocketmq/rocketmq:4.9.2

启动NameServer

docker run -d   --restart=always --name mq-namesrv \
--network=host \
-v ${PATH}/data/namesrv/logs:/home/rocketmq/logs \
apacherocketmq/rocketmq:4.9.2 sh mqnamesrv

启动Broker

docker run -d   --restart=always --name mq-broker  \
--network=host \
-v ${PATH}/data/broker/logs:/home/rocketmq/logs \
-v ${PATH}/data/broker/store:/home/rocketmq/store \
-v ${PATH}data/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.9.2/conf/broker.conf \
-e "NAMESRV_ADDR=172.16.35.14:9876" \
apacherocketmq/rocketmq:4.9.2 sh mqbroker -c ../conf/broker.conf

生产RocketMQ Dashboard镜像

执行工程下的脚本生成镜像。

#cd image-build && sh build-image-dashboard.sh `VERSION` centos
 sh build-image-dashboard.sh 1.0.0 centos

运行Dashboard

 docker run -d   --name mq-console  \--network=host \
apacherocketmq/rocketmq-dashboard:1.0.0-centos

默认的镜像生成脚本中,没有办法传JVM参数。所以,在dashbaord运行起来以后,需要在运维界面,设置NameServer的地址信息,如下图所示:

image.png

如果想要固定设置NameServer地址,可以修改脚本Dockerfile-centos-dashboard,最后一行:

ENTRYPOINT ["java", "-jar", "bin/rocketmq-dashboard.jar"];

将其改为:

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar bin/rocketmq-dashboard.jar"];

运行实例脚本改为

docker run -d   --name mq-console  \
--network=host \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=${NameSrvIp}:${NameSrvPort}  -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
doyoungdy/rocketmq-dashboard:1.0.0-centos

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: