记录一次在docker容器中部署rocketmq的过程
环境:
centos 7
rocketmq 4.2.0
docker 1.13.1
rocketMq架构

1. 构建nameserver镜像
创建Dockerfile
Dockerfile文件内容
RocketMQ使用Java环境,因此基于Java镜像进行构建
修改启动参数-Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m为-Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m,虚拟机内存较小
9876:消息监听端口
rocketmq默认jvm启动参数较大,需要修改。
FROM java:8
ENV ROCKETMQ_VERSION 4.2.0
ENV ROCKETMQ_HOME /opt/rocketmq-${ROCKETMQ_VERSION}
ENV JAVA_OPT " -Duser.home=/opt"
WORKDIR ${ROCKETMQ_HOME}
RUN mkdir -p /opt/logs /opt/store
RUN curl https://dist.apache.org/repos/dist/release/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip -o rocketmq.zip \
&& unzip rocketmq.zip \
&& rm rocketmq.zip \
&& cd ${ROCKETMQ_HOME}/bin \
&& sed -i 's#-Xms[0-9]\+[gm]#-Xms256m#' runserver.sh \
&& sed -i 's#-Xmx[0-9]\+[gm]#-Xmx256m#' runserver.sh \
&& sed -i 's#-Xmn[0-9]\+[gm]#-Xmn128m#' runserver.sh \
&& sed -i 's#-XX:MetaspaceSize=[0-9]\+[gm]#-XX:MetaspaceSize=64m#' runserver.sh \
&& sed -i 's#-XX:MaxMetaspaceSize=[0-9]\+[gm]#-XX:MaxMetaspaceSize=128m#' runserver.sh \
&& chmod +x ./mqnamesrv
CMD cd ${ROCKETMQ_HOME}/bin && sh mqnamesrv
EXPOSE 9876
VOLUME ["/opt/logs", "/opt/store"]
构建镜像
在刚刚构建的Dockerfile文件目录下面执行构建镜像的语句
sudo docker build -t study/rocketmq-namesrv:4.2.0 .
查看镜像
#查看docker镜像列表
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
study/rocketmq-namesrv 4.2.0 b2b9f7c76c31 58 seconds ago 653 MB
java 8 d23bdf5b1b1b 12 months ago 643 MB
#查看study/rocketmq-namesrv镜像信息
sudo docker inspect study/rocketmq-namesrv:4.2.0
2. 构建broker镜像
创建Dockerfile
#Dockerfile文件内容
#RocketMQ以来Java环境,因此基于Java镜像进行构建
#修改启动参数-Xms8g -Xmx8g -Xmn4g为-Xms256m -Xmx256m -Xmn128m,虚拟机内存较小
#10911:消息监听端口
#10912:主从同步端口
FROM java:8
ENV ROCKETMQ_VERSION 4.2.0
ENV ROCKETMQ_HOME /opt/rocketmq-${ROCKETMQ_VERSION}
ENV JAVA_OPT " -Duser.home=/opt"
WORKDIR ${ROCKETMQ_HOME}
RUN mkdir -p /opt/logs /opt/store
RUN curl https://dist.apache.org/repos/dist/release/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip -o rocketmq.zip \
&& unzip rocketmq.zip \
&& rm rocketmq.zip \
&& cd ${ROCKETMQ_HOME}/bin \
&& sed -i 's#-Xms[0-9]\+[gm]#-Xms256m#' runbroker.sh \
&& sed -i 's#-Xmx[0-9]\+[gm]#-Xmx256m#' runbroker.sh \
&& sed -i 's#-Xmn[0-9]\+[gm]#-Xmn128m#' runbroker.sh \
&& chmod +x ./mqbroker
EXPOSE 10909 10911 10912
VOLUME ["/opt/logs", "/opt/store"]
CMD cd ${ROCKETMQ_HOME}/bin && sh mqbroker
构建镜像
在刚刚创建的Dockerfile目录下构建镜像
sudo docker build -t study/rocketmq-broker:4.2.0 .
3. 启动nameserver容器
创建容器挂载目录
mkdir -p /opt/rocketmq/namesrv/logs /opt/rocketmq/namesrv/store
启动运行nameserver容器
sudo docker run --name rmq-namesrv --net mynetwork --ip 172.18.0.12 -p 46111:9876 -v /opt/rocketmq/namesrv/logs:/opt/logs -v /opt/rocketmq/namesrv/store:/opt/store -d study/rocketmq-namesrv:4.2.0
–net mynetwork -ip 172.18.0.12 将nameserver加入建立的局域网ip
查看下nameserver容器启动状态
sudo docker ps -a | grep 'rmq-namesrv'
启动broker容器
#容器是以root用户启用运行,因此以root用户创建目录
mkdir -p /opt/rocketmq/broker/logs /opt/rocketmq/broker/store /opt/rocketmq/broker/conf
#配置文件
cd /opt/rocketmq/broker/conf && vi broker.properties
#配置文件内容
#集群的名字
brokerClusterName=DefaultCluster
#当前broker名字
brokerName=broker-a
#brokerId
brokerId=0
#每天清理磁盘时间,默认凌晨4点
deleteWhen=04
#文件保留时间,默认48小时
fileReservedTime=48
#broker是主还是从
brokerRole=ASYNC_MASTER
#刷盘策略
flushDiskType=ASYNC_FLUSH
#指定一块网卡以免被随机选择
brokerIP1=202.115.62.29
#nameserver地址,使用内网的时候端口是容器暴露的端口
namesrvAddr=172.168.0.13:9876
查看broker日志
# 日志目录
cd /opt/rocketmq/broker/logs/rocketmqlogs
#查看日志
cat broker.log

看到如上语句表示broker启动成功