RocketMQ-docker镜像的制作与部署

          在制作 RocketMQ 的 docker 镜像之前,我们先了解一下如何在 window 环境下基于官网编译好的 Binary 文件去启动 RocketMQ

一、RocketMQ的下载与安装:

1、下载并解压:

https://rocketmq.apache.org/release_notes/release-notes-4.9.0/

2、配置环境变量:

注意:RocketMQ 存放路径最好不要出现空格,否则配置容易出错

(1) 新建系统变量:ROCKETMQ_HOME

 

 (2)在 PATH 添加以下配置:

 3、启动 RocketMQ:

(1)启动 NameServer:

在命令控制台中输入:start mqnamesrv.cmd

执行完之后,出现以下新窗口,注意下面的窗口不要关闭

 (2)启动 Broker:

同样在命令控制台中输入:start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true

 执行完之后,出现以下新窗口,注意下面的窗口不要关闭

 至此,RocketMQ 已经成功启动了,访问地址与端口为:127.0.0.1:9876

4、安装 RocketMQ 控制台:

(1)下载控制台源代码:

git clone git://github.com/apache/rocketmq-externals.git

(2)下载完成之后,进入 “rocketmq-externals\rocketmq-console\src\main\resources” 目录下,打开 application.properties 配置以下信息:

 (3)编译生成:

        进入 "\rocketmq-externals\rocketmq-console" 文件夹,执行 "mvn clean package -Dmaven.test.skip=true" 命令,编译生成运行所需 jar 包

(4)运行 jar 包:

        编译成功后,进入 target 文件夹,执行 “java -jar rocketmq-console-ng-1.0.0.jar” 命令,启动 RocketMQ 的控制台

(5)访问地址:http://localhost:8080

二、RocketMQ-docker镜像的制作与部署:

        前面介绍如何在 window 环境下基于官网编译好的 Binary 文件去启动 RocketMQ,核心操作主要有三个:启动 NameServer、Broker、console,接下来我们就介绍如何制作 RocketMQ 的docker 镜像,方便在不同环境快速启动 RocketMQ,核心操作也是分为三个:NameServer 镜像的制作与部署、Broker 镜像的制作与部署、console 镜像的制作与部署。

1、docker镜像构建的准备工作:

(1)构建项目的目录结构:

        我们直接使用文章第一部分已经编译好的 Binary 文件以及 rocketmq-console-ng-1.0.0.jar 来制作的镜像,先将 Binary 下的 bin、conf、lib 三个目录以及 rocketmq-console-ng-1.0.0.jar,放在同一个路径下,最终目录如下图所示:

 (2)namesrv-Dockerfile 文件:

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,namesrv-Dockerfile 文件内容如下:

FROM java:openjdk-8u111-alpine
MAINTAINER zhangweipeng

# set environment
ENV JVM_XMS="1g" \
    JVM_XMX="1g" \
    JVM_XMN="512m" \
    JVM_MS="128m" \
    JVM_MMS="320m"

ENV ROCKETMQ_VERSION 4.9.0
ENV ROCKETMQ_HOME /opt/rocketmq-${ROCKETMQ_VERSION}
WORKDIR ${ROCKETMQ_HOME}


# 设置时间,东八区
RUN set -x \
    && rm -f /etc/localtime \
    && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

ADD bin bin
ADD conf conf
ADD lib lib

RUN mkdir -p \
	/opt/logs \
	/opt/store

VOLUME /opt/logs \
       /opt/store

EXPOSE 9876
RUN chmod +x bin/mqnamesrv
CMD cd ${ROCKETMQ_HOME}/bin && export JAVA_OPT=" -Duser.home=/opt" && sh mqnamesrv

(3)broker-Dockerfile 文件:

FROM java:openjdk-8u111-alpine
MAINTAINER zhangweipeng

# set environment
ENV JVM_XMS="1g" \
    JVM_XMX="1g" \
    JVM_XMN="512m" \
    JVM_MS="128m" \
    JVM_MMS="320m"

ENV ROCKETMQ_VERSION 4.9.0
ENV ROCKETMQ_HOME /opt/rocketmq-${ROCKETMQ_VERSION}
WORKDIR ${ROCKETMQ_HOME}


# 设置时间,东八区
RUN set -x \
    && rm -f /etc/localtime \
    && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

ADD bin bin
ADD conf conf
ADD lib lib

RUN mkdir -p \
    /opt/logs \
    /opt/store

VOLUME /opt/logs \
       /opt/store


# Rocketmq broker ip
ARG BROKER_IP1
ARG BROKER_IP2
ENV BROKER_IP1 ${BROKER_IP1}
ENV BROKER_IP2 ${BROKER_IP2}
RUN if [ -n "$BROKER_IP1" ] ; then echo -e "\nbrokerIP1 = $BROKER_IP1\nbrokerIP2 = $BROKER_IP2" >> ./conf/broker.conf ; fi


EXPOSE 10909 10911
RUN chmod +x bin/mqbroker
CMD cd ${ROCKETMQ_HOME}/bin && export JAVA_OPT="${JAVA_OPT} -Duser.home=/opt" && sh mqbroker -n ${NAMESRV_ADDR} -c ../conf/broker.conf

(4)console-Dockerfile 文件:

FROM java:openjdk-8u111-alpine
MAINTAINER zhangweipeng
                                                                         
# Rocketmq home
ENV ROCKETMQ_CONSOLE_HOME /opt/rocketmq-console
WORKDIR ${ROCKETMQ_CONSOLE_HOME}

# 设置时间,东八区
RUN set -x \
    && rm -f /etc/localtime \
    && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

ADD rocketmq-console-ng-1.0.0.jar .

EXPOSE 8080
CMD java -jar rocketmq-console-ng-1.0.0.jar -DnamesrvAddr=${NAMESRV_ADDR}

2、镜像的构建与运行:

        dokcer 镜像的构建与运行脚本已经编写在 startup.cmd 和 startup.sh 文件中,只需针对自己服务器的情况进行以下的修改便可以执行了。

  • ① 修改 startup.cmd 和 startup.sh 脚本中的 rmqnamesrv、NAMESRV_ADDR 的值为 nameserver 的IP地址
  • ② 如果是本地 window 环境,则修改 startup.cmd 脚本中 BROKER_IP1、BROKER_IP2 的值为自身服务器的IP地址
  • ③ 执行 startup.cmd 或者 startup.sh 脚本便可以生成 rmqnamesrv、broker、console 镜像,并自动运行相应的容器

(1)startup.sh 脚本如下:

#!/bin/sh

# 创建 rocketmq-nameserver 镜像
docker build -f namesrv-Dockerfile -t rocketmq-namesrv:4.9.0 .
# 创建 rocketmq-broker 镜像
docker build -f broker-Dockerfile -t rocketmq-broker:4.9.0 .
# 创建 rocketmq-console 镜像
docker build -f console-Dockerfile -t rocketmq-console:1.0.0 .



# 运行 rocketmq-nameserver 容器
docker run -d -p 9876:9876 --name rmqnamesrv --restart=always rocketmq-namesrv:4.9.0

# 运行 rocketmq-broker 容器
docker run -d -p 10911:10911 -p 10909:10909 --name rmqbroker --restart=always -m 2048m \
 -e "NAMESRV_ADDR=172.28.190.101:9876" \
 -e "JAVA_OPT=-XX:MetaspaceSize=256m" \
 -v /opt/rocketmq/logs:/opt/logs \
 -v /opt/rocketmq/store:/opt/store \
 --link rmqnamesrv:172.28.190.101 rocketmq-broker:4.9.0

# 运行 rocketmq-console 容器
docker run -d -p 8888:8080 --name rmqconsole --restart=always \
 -m 512m \
 -e NAMESRV_ADDR='172.28.190.101:9876' \
 --link rmqnamesrv:172.28.190.101 rocketmq-console:1.0.0

(2)startup.cmd 脚本如下:

docker build -f namesrv-Dockerfile -t rocketmq-namesrv:4.9.0 .

docker build -f broker-Dockerfile --build-arg "BROKER_IP1=172.28.190.101" --build-arg "BROKER_IP2=172.28.190.101" -t rocketmq-broker:4.9.0 .

docker build -f console-Dockerfile -t rocketmq-console:1.0.0 .



docker run -d -p 9876:9876 --name rmqnamesrv rocketmq-namesrv:4.9.0

docker run -d -p 10911:10911 -p 10909:10909 --name rmqbroker --link rmqnamesrv:172.28.190.101 -e "NAMESRV_ADDR=172.28.190.101:9876" -e "JAVA_OPT=-XX:MetaspaceSize=256m" rocketmq-broker:4.9.0

docker run -d -p 8888:8080 --name rmqconsole --link rmqnamesrv:172.28.190.101 -e "NAMESRV_ADDR=172.28.190.101:9876" rocketmq-console:1.0.0

猜你喜欢

转载自blog.csdn.net/a745233700/article/details/122531859