中国国建设监理协会网站,识图 WordPress,廊坊网站建设技术支持,微网站的案例现状 目前市面上和官方均只有rocketmq x86架构下的docker镜像#xff0c;而随着国产化和信创适配的需求越来越多#xff0c;显然现有的x86架构下的docker镜像不能满足多样化的需求#xff0c;因此我们需要根据官方发布的版本制作满足需求的多架构镜像#xff0c;以在不同cp…现状 目前市面上和官方均只有rocketmq x86架构下的docker镜像而随着国产化和信创适配的需求越来越多显然现有的x86架构下的docker镜像不能满足多样化的需求因此我们需要根据官方发布的版本制作满足需求的多架构镜像以在不同cpu架构下部署使用。 rocketmq官方网站RocketMQ · 官方网站 | RocketMQ
关于rocketmq的介绍请阅读官方文档这里就不做过多赘述。
前提条件 1. 构建镜像的机器需要能访问互联网拥有良好的网络环境 2. 构建之前请搭建好私有仓库比如harbor、registry这种以便将多架构镜像推送到镜像仓库中 3. 需要安装docker版本要求19.03以上并支持buildx插件 准备工作 1. 编写Dockerfile文件 # 多阶段构建方式
cat Dockerfile-centos################################################################################
# Build stage 1 builder:
# Download and extract RocketMQ
################################################################################
FROM eclipse-temurin:8-jdk-centos7 AS builderARG versionRUN set -eux \ yum -y update \ yum -y install curl gnupg unzip \ yum clean all -yRUN curl -L https://archive.apache.org/dist/rocketmq/${version}/rocketmq-all-${version}-bin-release.zip -o rocketmq.zip \ curl -L https://archive.apache.org/dist/rocketmq/${version}/rocketmq-all-${version}-bin-release.zip.asc -o rocketmq.zip.asc \ curl -L https://www.apache.org/dist/rocketmq/KEYS -o KEYS \ gpg --import KEYS \ gpg --batch --verify rocketmq.zip.asc rocketmq.zipRUN unzip rocketmq.zip \ mkdir -p /tmp/rocketmq-${version} \ mv rocketmq*/* /tmp/rocketmq-${version}################################################################################
# Build stage 2:
# Make the actual RocketMQ docker image
################################################################################
FROM eclipse-temurin:8-jdk-centos7ARG userrocketmq
ARG grouprocketmq
ARG uid3000
ARG gid3000ARG version# Rocketmq version
ENV ROCKETMQ_VERSION ${version}# Rocketmq home
ENV ROCKETMQ_HOME /home/rocketmq/rocketmq-${ROCKETMQ_VERSION}# expose namesrv port
EXPOSE 9876# expose broker ports
EXPOSE 10909 10911 10912# 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 groupadd -g ${gid} ${group} \ useradd -l -u ${uid} -g ${gid} -m -s /bin/bash ${user} \ yum -y update \ yum -y install less openssl which bash wget curl tzdata \ yum clean all -y rm -rf /var/cache/yum # Copy customized scripts
COPY scripts/ ${ROCKETMQ_HOME}/bin/# Copy RocketMQ artifact from builder
COPY --frombuilder --chown${uid}:${gid} /tmp/rocketmq-${version}/ ${ROCKETMQ_HOME}# Override customized scripts for namesrv
# Override customized scripts for broker
# Export Java options
# Add ${JAVA_HOME}/lib/ext as java.ext.dirs
RUN mv ${ROCKETMQ_HOME}/bin/runserver-customize.sh ${ROCKETMQ_HOME}/bin/runserver.sh \ mv ${ROCKETMQ_HOME}/bin/runbroker-customize.sh ${ROCKETMQ_HOME}/bin/runbroker.sh \ chmod -R ax ${ROCKETMQ_HOME}/bin/ \ export JAVA_OPT -Duser.home/opt \ sed -i s/${JAVA_HOME}\/jre\/lib\/ext/${JAVA_HOME}\/jre\/lib\/ext:${JAVA_HOME}\/lib\/ext/ ${ROCKETMQ_HOME}/bin/tools.sh \ chown -R ${uid}:${gid} ${ROCKETMQ_HOME} \ localedef -i en_US -f UTF-8 en_US.UTF-8 \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ export LANGC.UTF-8USER ${user}WORKDIR ${ROCKETMQ_HOME}/binENTRYPOINT [./docker-entrypoint.sh]
# Dummy overridable parameter parsed by entrypoint
CMD [dummy] 2. 编写需要的脚本文件 # 脚本文件docker-entrypoint.sh
cat docker-entrypoint.sh#!/bin/bash
set -e# Allow user specify custom CMD, maybe run /bin/bash to check the image
if [[ $1 nameserver || ${NODE_ROLE} nameserver ]]; thenshiftexec ./mqnamesrv ${}
elif [[ $1 broker || ${NODE_ROLE} broker ]]; thenshiftexec ./mqbroker ${}
elif [[ $1 controller || ${NODE_ROLE} controller ]]; thenshiftexec ./mqcontroller ${}
else# Run whatever command the user wantsexec $
fi # 脚本文件 runbroker-customize.sh#!/bin/bash# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the License); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.#
# Java Environment Setting
#
error_exit ()
{echo ERROR: $1 !!exit 1
}find_java_home()
{case uname inDarwin)JAVA_HOME$(/usr/libexec/java_home);;*)JAVA_HOME$(dirname $(dirname $(readlink -f $(which javac))));;esac
}find_java_home[ ! -e $JAVA_HOME/bin/java ] JAVA_HOME$HOME/jdk/java
[ ! -e $JAVA_HOME/bin/java ] JAVA_HOME/usr/java
[ ! -e $JAVA_HOME/bin/java ] error_exit Please set the JAVA_HOME variable in your environment, We need java(x64)!export JAVA_HOME
export JAVA$JAVA_HOME/bin/java
export BASE_DIR$(dirname $0)/..
export CLASSPATH.:${BASE_DIR}/conf:${CLASSPATH}#
# JVM Configuration
#
calculate_heap_sizes()
{case uname inLinux)system_memory_in_mbfree -m| sed -n 2p | awk {print $2}system_cpu_coresegrep -c processor([[:space:]]):.* /proc/cpuinfo;;FreeBSD)system_memory_in_bytessysctl hw.physmem | awk {print $2}system_memory_in_mbexpr $system_memory_in_bytes / 1024 / 1024system_cpu_coressysctl hw.ncpu | awk {print $2};;SunOS)system_memory_in_mbprtconf | awk /Memory size:/ {print $3}system_cpu_corespsrinfo | wc -l;;Darwin)system_memory_in_bytessysctl hw.memsize | awk {print $2}system_memory_in_mbexpr $system_memory_in_bytes / 1024 / 1024system_cpu_coressysctl hw.ncpu | awk {print $2};;*)# assume reasonable defaults for e.g. a modern desktop or# cheap serversystem_memory_in_mb2048system_cpu_cores2;;esac# some systems like the raspberry pi dont report cores, use at least 1if [ $system_cpu_cores -lt 1 ]thensystem_cpu_cores1fi# set max heap size based on the following# max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))# calculate 1/2 ram and cap to 1024MB# calculate 1/4 ram and cap to 8192MB# pick the maxhalf_system_memory_in_mbexpr $system_memory_in_mb / 2quarter_system_memory_in_mbexpr $half_system_memory_in_mb / 2if [ $half_system_memory_in_mb -gt 1024 ]thenhalf_system_memory_in_mb1024fiif [ $quarter_system_memory_in_mb -gt 8192 ]thenquarter_system_memory_in_mb8192fiif [ $half_system_memory_in_mb -gt $quarter_system_memory_in_mb ]thenmax_heap_size_in_mb$half_system_memory_in_mbelsemax_heap_size_in_mb$quarter_system_memory_in_mbfiMAX_HEAP_SIZE${max_heap_size_in_mb}M# Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 * heap size)max_sensible_yg_per_core_in_mb100max_sensible_yg_in_mbexpr $max_sensible_yg_per_core_in_mb * $system_cpu_coresdesired_yg_in_mbexpr $max_heap_size_in_mb / 4if [ $desired_yg_in_mb -gt $max_sensible_yg_in_mb ]thenHEAP_NEWSIZE${max_sensible_yg_in_mb}MelseHEAP_NEWSIZE${desired_yg_in_mb}Mfi
}calculate_heap_sizes# Dynamically calculate parameters, for reference.
Xms$MAX_HEAP_SIZE
Xmx$MAX_HEAP_SIZE
Xmn$HEAP_NEWSIZE
MaxDirectMemorySize$MAX_HEAP_SIZE
# Set for JAVA_OPT.
JAVA_OPT${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}
JAVA_OPT${JAVA_OPT} -XX:UseG1GC -XX:G1HeapRegionSize16m -XX:G1ReservePercent25 -XX:InitiatingHeapOccupancyPercent30 -XX:SoftRefLRUPolicyMSPerMB0 -XX:SurvivorRatio8
JAVA_OPT${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:PrintGCDetails -XX:PrintGCDateStamps -XX:PrintGCApplicationStoppedTime -XX:PrintAdaptiveSizePolicy
JAVA_OPT${JAVA_OPT} -XX:UseGCLogFileRotation -XX:NumberOfGCLogFiles5 -XX:GCLogFileSize30m
JAVA_OPT${JAVA_OPT} -XX:-OmitStackTraceInFastThrow
JAVA_OPT${JAVA_OPT} -XX:AlwaysPreTouch
JAVA_OPT${JAVA_OPT} -XX:MaxDirectMemorySize${MaxDirectMemorySize}
JAVA_OPT${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking
JAVA_OPT${JAVA_OPT} -Djava.ext.dirs${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib
#JAVA_OPT${JAVA_OPT} -Xdebug -Xrunjdwp:transportdt_socket,address9555,servery,suspendn
JAVA_OPT${JAVA_OPT} ${JAVA_OPT_EXT}
JAVA_OPT${JAVA_OPT} -cp ${CLASSPATH}numactl --interleaveall pwd /dev/null 21
if [ $? -eq 0 ]
thenif [ -z $RMQ_NUMA_NODE ] ; thennumactl --interleaveall $JAVA ${JAVA_OPT} $elsenumactl --cpunodebind$RMQ_NUMA_NODE --membind$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $fi
else$JAVA ${JAVA_OPT} $
fi# 脚本文件 runserver-customize.sh#!/bin/bash# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the License); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.#
# Java Environment Setting
#
error_exit ()
{echo ERROR: $1 !!exit 1
}find_java_home()
{case uname inDarwin)JAVA_HOME$(/usr/libexec/java_home);;*)JAVA_HOME$(dirname $(dirname $(readlink -f $(which javac))));;esac
}find_java_home[ ! -e $JAVA_HOME/bin/java ] JAVA_HOME$HOME/jdk/java
[ ! -e $JAVA_HOME/bin/java ] JAVA_HOME/usr/java
[ ! -e $JAVA_HOME/bin/java ] error_exit Please set the JAVA_HOME variable in your environment, We need java(x64)!export JAVA_HOME
export JAVA$JAVA_HOME/bin/java
export BASE_DIR$(dirname $0)/..
export CLASSPATH.:${BASE_DIR}/conf:${CLASSPATH}#
# JVM Configuration
#
calculate_heap_sizes()
{case uname inLinux)system_memory_in_mbfree -m| sed -n 2p | awk {print $2}system_cpu_coresegrep -c processor([[:space:]]):.* /proc/cpuinfo;;FreeBSD)system_memory_in_bytessysctl hw.physmem | awk {print $2}system_memory_in_mbexpr $system_memory_in_bytes / 1024 / 1024system_cpu_coressysctl hw.ncpu | awk {print $2};;SunOS)system_memory_in_mbprtconf | awk /Memory size:/ {print $3}system_cpu_corespsrinfo | wc -l;;Darwin)system_memory_in_bytessysctl hw.memsize | awk {print $2}system_memory_in_mbexpr $system_memory_in_bytes / 1024 / 1024system_cpu_coressysctl hw.ncpu | awk {print $2};;*)# assume reasonable defaults for e.g. a modern desktop or# cheap serversystem_memory_in_mb2048system_cpu_cores2;;esac# some systems like the raspberry pi dont report cores, use at least 1if [ $system_cpu_cores -lt 1 ]thensystem_cpu_cores1fi# set max heap size based on the following# max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))# calculate 1/2 ram and cap to 1024MB# calculate 1/4 ram and cap to 8192MB# pick the maxhalf_system_memory_in_mbexpr $system_memory_in_mb / 2quarter_system_memory_in_mbexpr $half_system_memory_in_mb / 2if [ $half_system_memory_in_mb -gt 1024 ]thenhalf_system_memory_in_mb1024fiif [ $quarter_system_memory_in_mb -gt 8192 ]thenquarter_system_memory_in_mb8192fiif [ $half_system_memory_in_mb -gt $quarter_system_memory_in_mb ]thenmax_heap_size_in_mb$half_system_memory_in_mbelsemax_heap_size_in_mb$quarter_system_memory_in_mbfiMAX_HEAP_SIZE${max_heap_size_in_mb}M# Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 * heap size)max_sensible_yg_per_core_in_mb100max_sensible_yg_in_mbexpr $max_sensible_yg_per_core_in_mb * $system_cpu_coresdesired_yg_in_mbexpr $max_heap_size_in_mb / 4if [ $desired_yg_in_mb -gt $max_sensible_yg_in_mb ]thenHEAP_NEWSIZE${max_sensible_yg_in_mb}MelseHEAP_NEWSIZE${desired_yg_in_mb}Mfi
}calculate_heap_sizes# Dynamically calculate parameters, for reference.
Xms$MAX_HEAP_SIZE
Xmx$MAX_HEAP_SIZE
Xmn$HEAP_NEWSIZE
# Set for JAVA_OPT.
JAVA_OPT${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}
JAVA_OPT${JAVA_OPT} -XX:UseConcMarkSweepGC -XX:UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction70 -XX:CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB0 -XX:CMSClassUnloadingEnabled -XX:SurvivorRatio8 -XX:-UseParNewGC
JAVA_OPT${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:PrintGCDetails
JAVA_OPT${JAVA_OPT} -XX:-OmitStackTraceInFastThrow
JAVA_OPT${JAVA_OPT} -XX:-UseLargePages
JAVA_OPT${JAVA_OPT} -Djava.ext.dirs${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib
#JAVA_OPT${JAVA_OPT} -Xdebug -Xrunjdwp:transportdt_socket,address9555,servery,suspendn
JAVA_OPT${JAVA_OPT} ${JAVA_OPT_EXT}
JAVA_OPT${JAVA_OPT} -cp ${CLASSPATH}$JAVA ${JAVA_OPT} $编写构建脚本build-image.sh
# 构建镜像的脚本#!/usr/bin/env bashcheckVersion() {echo Version $1echo $1 |grep -E ^[0-9]\.[0-9]\.[0-9] /dev/nullif [ $? 0 ]; thenreturn 1fiecho Version $1 illegal, it should be X.X.X format(e.g. 4.5.0), please check released versions in https://archive.apache.org/dist/rocketmq/exit -1
}if [ $# -lt 2 ]; thenecho -e Usage: sh $0 Version BaseImageexit -1
fiROCKETMQ_VERSION$1BASE_IMAGEcentoscheckVersion $ROCKETMQ_VERSION# Build rocketmq
case ${BASE_IMAGE} incentos)docker run --privileged --rm harbor.codemiracle.com.cn/baseapp/binfmt:latest --install alldocker buildx create --use --namemybuilder-rocketmq --driver docker-container --driver-opt imageharbor.codemiracle.com.cn/baseapp/buildkit:masterdocker buildx build --no-cache -f Dockerfile-centos --platformlinux/amd64,linux/arm64 -t harbor.codemiracle.com.cn/baseapp/rocketmq:${ROCKETMQ_VERSION} --build-arg version${ROCKETMQ_VERSION} . --pushdocker buildx rm mybuilder-rocketmq;;*)echo ${BASE_IMAGE} is not supported, supported base images: centosexit -1;;
esac
如何构建 # 如何使用脚本构建呢1. 创建相关目录将文件放到对应目录下mkdir scriptsmv docker-entrypoint.sh scripts/mv runbroker-customize.sh scripts/mv runserver-customize.sh scripts/2. 登陆harbordocker login harbor.codemiracle.com.cn3. 执行构建脚本sh build-image.sh [rocketmq版本号]eg: sh build-image.sh 4.5.2参考资料
GitHub - apache/rocketmq-docker: Apache RocketMQ Docker 文章转载自: http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn http://www.morning.zypnt.cn.gov.cn.zypnt.cn http://www.morning.xtrzh.cn.gov.cn.xtrzh.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.ntwfr.cn.gov.cn.ntwfr.cn http://www.morning.bpncd.cn.gov.cn.bpncd.cn http://www.morning.tyjnr.cn.gov.cn.tyjnr.cn http://www.morning.ljmbd.cn.gov.cn.ljmbd.cn http://www.morning.pyswr.cn.gov.cn.pyswr.cn http://www.morning.hjssh.cn.gov.cn.hjssh.cn http://www.morning.thbqp.cn.gov.cn.thbqp.cn http://www.morning.ypxyl.cn.gov.cn.ypxyl.cn http://www.morning.yznsx.cn.gov.cn.yznsx.cn http://www.morning.wnpps.cn.gov.cn.wnpps.cn http://www.morning.bfysg.cn.gov.cn.bfysg.cn http://www.morning.fhcwm.cn.gov.cn.fhcwm.cn http://www.morning.lxhrq.cn.gov.cn.lxhrq.cn http://www.morning.smhtg.cn.gov.cn.smhtg.cn http://www.morning.dpqqg.cn.gov.cn.dpqqg.cn http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.kmldm.cn.gov.cn.kmldm.cn http://www.morning.dfmjm.cn.gov.cn.dfmjm.cn http://www.morning.hqgkx.cn.gov.cn.hqgkx.cn http://www.morning.dlgjdg.cn.gov.cn.dlgjdg.cn http://www.morning.zynjt.cn.gov.cn.zynjt.cn http://www.morning.qwfq.cn.gov.cn.qwfq.cn http://www.morning.nkyc.cn.gov.cn.nkyc.cn http://www.morning.bsrcr.cn.gov.cn.bsrcr.cn http://www.morning.yksf.cn.gov.cn.yksf.cn http://www.morning.cjqcx.cn.gov.cn.cjqcx.cn http://www.morning.fhkr.cn.gov.cn.fhkr.cn http://www.morning.swwpl.cn.gov.cn.swwpl.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.jppb.cn.gov.cn.jppb.cn http://www.morning.rknjx.cn.gov.cn.rknjx.cn http://www.morning.clkyw.cn.gov.cn.clkyw.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.rgrdd.cn.gov.cn.rgrdd.cn http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn http://www.morning.kabaifu.com.gov.cn.kabaifu.com http://www.morning.jzfrl.cn.gov.cn.jzfrl.cn http://www.morning.ngcw.cn.gov.cn.ngcw.cn http://www.morning.ffcsr.cn.gov.cn.ffcsr.cn http://www.morning.gxtfk.cn.gov.cn.gxtfk.cn http://www.morning.rfpq.cn.gov.cn.rfpq.cn http://www.morning.xpfwr.cn.gov.cn.xpfwr.cn http://www.morning.rkfh.cn.gov.cn.rkfh.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.ryglh.cn.gov.cn.ryglh.cn http://www.morning.knrgb.cn.gov.cn.knrgb.cn http://www.morning.qichetc.com.gov.cn.qichetc.com http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.errnull.com.gov.cn.errnull.com http://www.morning.myzfz.com.gov.cn.myzfz.com http://www.morning.mydgr.cn.gov.cn.mydgr.cn http://www.morning.jlpdc.cn.gov.cn.jlpdc.cn http://www.morning.nnttr.cn.gov.cn.nnttr.cn http://www.morning.qxltp.cn.gov.cn.qxltp.cn http://www.morning.nlwrg.cn.gov.cn.nlwrg.cn http://www.morning.mbprq.cn.gov.cn.mbprq.cn http://www.morning.hgwsj.cn.gov.cn.hgwsj.cn http://www.morning.lnwdh.cn.gov.cn.lnwdh.cn http://www.morning.lrskd.cn.gov.cn.lrskd.cn http://www.morning.qwdlj.cn.gov.cn.qwdlj.cn http://www.morning.qtltg.cn.gov.cn.qtltg.cn http://www.morning.mrxgm.cn.gov.cn.mrxgm.cn http://www.morning.tcfhs.cn.gov.cn.tcfhs.cn http://www.morning.tgtsg.cn.gov.cn.tgtsg.cn http://www.morning.bfbl.cn.gov.cn.bfbl.cn http://www.morning.dncgb.cn.gov.cn.dncgb.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn http://www.morning.jcxyq.cn.gov.cn.jcxyq.cn http://www.morning.zphlb.cn.gov.cn.zphlb.cn http://www.morning.xqjrg.cn.gov.cn.xqjrg.cn http://www.morning.zylzk.cn.gov.cn.zylzk.cn http://www.morning.lwgrf.cn.gov.cn.lwgrf.cn http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn