记录一次在docker容器中部署rocketmq的过程

记录一次在docker容器中部署rocketmq的过程

参考博客:https://my.oschina.net/u/2299686/blog/1618531

环境:
centos 7
rocketmq 4.2.0
docker 1.13.1

rocketMq架构

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日志

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