废话不多说,上才艺
- rocketMq Github : https://github.com/apache/rocketmq-docker
- rocketMq Version:https://archive.apache.org/dist/rocketmq/
- springboot 集成 RocketMq:https://blog.csdn.net/itjavaee/article/details/108305994
1.先把源码拉下来并执行构建脚本
# 创建存储目录
mkdir -p /home/service
# 拉取源码
git clone https://github.com/apache/rocketmq-docker.git
# 进入脚本目录
cd /home/service/rocketmq-docker/image-build
# 执行构建
sh build-image.sh 4.7.1 alpine
注意:发现在构建的时候一直开在下载alpine,下载的版本是v3.9,如果发现自己卡在那,请参考第二步,换成你自己的版本
2. 替换下载源为阿里的站点,编辑 Dockerfile-alpine 文件(不替换忒慢。。。)
# 找到 RUN apk add --no-cache bash gettext nmap-ncat openssl busybox-extras,在上面添加以下2行替换命令
RUN echo -e https://mirrors.aliyun.com/alpine/v3.9/main/ > /etc/apk/repositories
RUN echo -e https://mirrors.aliyun.com/alpine/v3.9/community/ >> /etc/apk/repositories
3. 继续执行构建
# 4.7.1 是我当时的最新版本了,可以根据上面那个 RocketMQ Version 查看新的版本
sh build-image.sh 4.7.1 alpine
注意:然后我又发现卡在下载rocketmq-all-x-bin-release.zip
4.没错。。继续换站点
- 我们先去到 rocketMq 的官网:http://rocketmq.apache.org/dowloading/releases/,找到自己下载的版本对应的链接
- 这是4.7.1的 https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
- 站点列表 http://www.apache.org/mirrors/
- 这是国内站点之一:https://mirrors.bfsu.edu.cn
最终Dockerfile-alpine文件内容,仅供参考
FROM openjdk:8-alpine
RUN echo -e https://mirrors.aliyun.com/alpine/v3.9/main/ > /etc/apk/repositories
RUN echo -e https://mirrors.aliyun.com/alpine/v3.9/community/ >> /etc/apk/repositories
RUN apk add --no-cache bash gettext nmap-ncat openssl busybox-extras
ARG user=rocketmq
ARG group=rocketmq
ARG uid=3000
ARG gid=3000
# RocketMQ is run with user `rocketmq`, uid = 3000
# If you bind mount a volume from the host or a data container,
# ensure you use the same uid
RUN addgroup --gid ${gid} ${group} \
&& adduser --uid ${uid} -G ${group} ${user} -s /bin/bash -D
ARG version
# Rocketmq version
ENV ROCKETMQ_VERSION ${version}
# Rocketmq home
ENV ROCKETMQ_HOME /home/rocketmq/rocketmq-${ROCKETMQ_VERSION}
WORKDIR ${ROCKETMQ_HOME}
# Install
RUN set -eux; \
apk add --virtual .build-deps curl gnupg unzip; \
curl -L https://mirrors.bfsu.edu.cn/apache/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; \
apk del .build-deps ; \
rm -rf /var/cache/apk/* ; \
rm -rf /tmp/*
# Copy customized scripts
COPY scripts/ ${ROCKETMQ_HOME}/bin/
RUN chown -R ${uid}:${gid} ${ROCKETMQ_HOME}
# Expose namesrv port
EXPOSE 9876
# Override customized scripts for namesrv
RUN mv ${ROCKETMQ_HOME}/bin/runserver-customize.sh ${ROCKETMQ_HOME}/bin/runserver.sh \
&& chmod a+x ${ROCKETMQ_HOME}/bin/runserver.sh \
&& chmod a+x ${ROCKETMQ_HOME}/bin/mqnamesrv
# Expose broker ports
EXPOSE 10909 10911 10912
# Override customized scripts for broker
RUN mv ${ROCKETMQ_HOME}/bin/runbroker-customize.sh ${ROCKETMQ_HOME}/bin/runbroker.sh \
&& chmod a+x ${ROCKETMQ_HOME}/bin/runbroker.sh \
&& chmod a+x ${ROCKETMQ_HOME}/bin/mqbroker
# Export Java options
RUN export JAVA_OPT=" -Duser.home=/opt"
# Add ${JAVA_HOME}/lib/ext as java.ext.dirs
RUN sed -i 's/${JAVA_HOME}\/jre\/lib\/ext/${JAVA_HOME}\/jre\/lib\/ext:${JAVA_HOME}\/lib\/ext/' ${ROCKETMQ_HOME}/bin/tools.sh
USER ${user}
WORKDIR ${ROCKETMQ_HOME}/bin
5. 再次构建
sh build-image.sh 4.7.1 alpine
6. 成功构建,就能看到镜像了
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apacherocketmq/rocketmq 4.7.1-alpine acfbfb0c8d66 3 minutes ago 145MB
7. 运行镜像
cd /home/service/rocketmq-docker/
sh stage.sh 4.7.1
# 然后就会生成运行文件与目录
# Stage version = 4.7.1
# mkdir /home/service/rocketmq-docker/stages/4.7.1
# staged templates into folder /home/service/rocketmq-docker/stages/4.7.1
cd /home/service/rocketmq-docker/stages/4.7.1/templates
# 启动
./play-docker.sh alpine
启动成功:
8. 使用指定的broker.conf启动(这步可以跳过)
docker rm -f rmqbroker
mkdir -p /home/config/docker/rocketmq/broker/logs
mkdir -p /home/config/docker/rocketmq/broker/store
mkdir -p /home/config/docker/rocketmq/broker/conf
touch /home/config/docker/rocketmq/broker/conf/broker.conf
# 所属集群名字(同一主从下:Master和slave名称要一致)
brokerClusterName = DefaultCluster
# broker名字,注意此处不同的配置文件填写的不一样 例如:在a.properties 文件中写 broker-a 在b.properties 文件中写 broker-b
brokerName = broker-a
# 0 表示 Master,>0 表示 Slave
brokerId = 0
# 检测可用的磁盘空间大小,当磁盘被占用超过90%,消息写入会直接报错
diskMaxUsedSpaceRatio=90
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
deleteWhen = 04
fileReservedTime = 48
# Broker 的角色: ASYNC_MASTER 异步复制Master ; SYNC_MASTER 同步双写Master; SLAVE
brokerRole = ASYNC_MASTER
# 刷盘方式 ASYNC_FLUSH 异步刷盘; SYNC_FLUSH 同步刷盘
flushDiskType = ASYNC_FLUSH
#set `brokerIP1` if you want to set physical IP as broker IP.
brokerIP1=192.168.0.30 #change you own physical IP Address
#是否开启自动注册topic
autoCreateTopicEnable=false
#是否开启自动注册group
autoCreateSubscriptionGroup=true
#是否开启过滤查询
enablePropertyFilter=true
#再次执行
docker run --restart=always -d -p 10911-10912:10911-10912 -p 10909:10909 --name rmqbroker \
-v /home/config/docker/rocketmq/broker/logs:/root/logs \
-v /home/config/docker/rocketmq/broker/store:/root/store \
-v /home/config/docker/rocketmq/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.7.1/conf/broker.conf \
--link rmqnamesrv:namesrv \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "JAVA_OPT=${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m" \
apacherocketmq/rocketmq:4.7.1-alpine sh mqbroker -c ../conf/broker.conf
9.测试是否可用
#设置 rmqnamesrv 和 rmqbroker 自动启动
docker update --restart=always rmqnamesrv
docker update --restart=always rmqbroker
# 关闭防火墙,不然会链接不上
systemctl stop firewalld
# 关闭防火墙后,记得重启一下docker
systemctl restart docker.service
# 执行开机禁用防火墙自启命令(可不使用,但机子要是重启的话,还需要执行上面的关闭stop)
systemctl disable firewalld.service
docker exec -it rmqbroker ./mqadmin clusterList -n 192.168.0.30:9876
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
10. 搭建图形化界面控制台
docker run --restart=always -d --name rmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.30:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8088:8080 styletang/rocketmq-console-ng
打开链接:http://192.168.0.30:8088/#/ 就会出现控制台相关信息
你学废了吗?