docker 安装 rocketMq 就是这么简单?

废话不多说,上才艺

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.没错。。继续换站点

最终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/#/    就会出现控制台相关信息

你学废了吗?

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值