一、背景
由于公司会用到zookeeper,rocketmq中间件,并且这些中间件在测试环境需要隔离,所以我们决定制作zookeeper,rocketmq的镜像然后在每个环境运行这些镜像就可以了,可以大大减少重复部署的操作。
二、制作zookeeper镜像
2.1 编写zookeeper镜像的Dockerfile
- 把解压好的zookeeper拷贝到包含jdk的centos镜像
- 修改/opt/zookeeper/conf/zoo.cfg配置文件
- 授权/opt/zookeeper所属组和所有者为zookeeper
- 通过zookeeper用户启动zookeeper,并把在终端打印的信息重定向到zookeeper.log
- 可传入位置参数执行sysinit.sh
FROM registry.moguyun.com/centos7-jdk8
MAINTAINER lijun registry.moguyun.com
ENV REFRESHED_AT 20190726
ENV ZOO_HOME /opt/zookeeper
ENV ZOO_USER zookeeper
ENV ZOO_CLUSTER 1
RUN groupadd zookeeper && useradd zookeeper -g zookeeper -s /sbin/nologin -M
RUN yum install -y telnet lsof
ADD zookeeper $ZOO_HOME
WORKDIR /opt/zookeeper
RUN echo 'sed -i "s|zk${1}-mg-addr|0.0.0.0|g" '$ZOO_HOME'/conf/zoo.cfg' >> /bin/sysinit.sh && \
echo 'echo ${1} > '$ZOO_HOME'/data/myid' >> /bin/sysinit.sh && \
echo "chown -R zookeeper:zookeeper $ZOO_HOME" >> /bin/sysinit.sh && \
echo "su $ZOO_USER -s /bin/bash -c \"cd $ZOO_HOME/bin && ./zkServer.sh start-foreground | tee ../logs/zookeeper.log \"" >> /bin/sysinit.sh
EXPOSE 2181 2888 3888
CMD ["sh", "-c", "/bin/sysinit.sh $ZOO_CLUSTER"]
三、制作rocktmq镜像
3.1 编写mq-namesrv镜像Dockerfile
- 把解压好的rocketmq拷贝到包含jdk的centos镜像
- 优化xms(初始化堆内存大小),xmx(最大堆内存),xmn(年轻代大小)参数,参数调优参考: Xms,Xmx,Xmn参数调优
- 执行mqnamesrv启动脚本
FROM registry.moguyun.com/centos7-jdk8
MAINTAINER lijun registry.moguyun.com
ENV REFRESHED_AT 2019-08-14
ENV MQ_HOME=/opt/mq-namesrv
RUN groupadd messageQueue && useradd messageQueue -g messageQueue -s /sbin/nologin -M \
&& cd /opt && wget http://10.30.221.72/down/alibaba-rocketmq-3.2.6.tar.gz \
&& tar zxvf alibaba-rocketmq-3.2.6.tar.gz && mv alibaba-rocketmq $MQ_HOME \
&& rm alibaba-rocketmq-3.2.6.tar.gz && cd $MQ_HOME/bin \
&& sed -i "s/-Xms4g -Xmx4g -Xmn2g/-Xms2g -Xmx2g -Xmn1g/g" $MQ_HOME/bin/runserver.sh
EXPOSE 9876
CMD ["sh","/opt/mq-namesrv/bin/mqnamesrv"]
3.2 编写mq-broker镜像Dockerfile
- 把解压好的mq-broker目录拷贝到包含jdk的centos镜像
- 指定mq-namesrv的地址和启动的配置文件启动mq-broker
FROM registry.moguyun.com/centos7-jdk8
MAINTAINER lijun registry.moguyun.com
ENV REFRESHED_AT 2019-08-02
ENV MQ_HOME /opt/mq-broker
ENV MQ_NAMESRV "mq-mg-addr:9876"
ENV MQ_BROKER_CONF conf/2m-2s-async/broker-a.properties
ADD mq-broker $MQ_HOME
WORKDIR $MQ_HOME
RUN groupadd $MQ_USER && useradd $MQ_USER -g $MQ_USER -s /sbin/nologin -M && \
echo "cat /etc/sysinit.sh" >> /etc/sysinit.sh && \
echo "cd $MQ_HOME/bin ; sh mqbroker -n $MQ_NAMESRV -c $MQ_HOME/${1} " >> /etc/sysinit.sh
EXPOSE 10911
CMD ["sh","-c","/bin/sysinit.sh \"$MQ_BROKER_CONF\""]