You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by vo...@apache.org on 2019/08/08 07:07:34 UTC

[rocketmq-docker] 21/28: Feat(Dockerfile): support openjdk-alpine as base image to provide light-weight image version

This is an automated email from the ASF dual-hosted git repository.

vongosling pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-docker.git

commit 6a542ddbdb663085e8c912d2dc7d903c9e5422d1
Author: liuruiyiyang <24...@qq.com>
AuthorDate: Wed Aug 7 17:01:42 2019 +0800

    Feat(Dockerfile): support openjdk-alpine as base image to provide light-weight image version
---
 README.md                                       |  6 ++--
 image-build/Dockerfile-alpine                   | 39 ++++++++++++-------------
 image-build/build-image.sh                      | 39 ++++++++++++++++++++-----
 image-build/scripts/runbroker-customize.sh      |  4 +--
 image-build/scripts/runserver-customize.sh      |  4 +--
 product/conf/2m-noslave/broker-trace.properties |  2 --
 stage.sh                                        | 21 +++++++++----
 7 files changed, 72 insertions(+), 43 deletions(-)

diff --git a/README.md b/README.md
index ec46e17..40fa54c 100644
--- a/README.md
+++ b/README.md
@@ -22,10 +22,10 @@ Note: This is an experimented code to allow users to build docker image locally
 
 ```
 cd image-build
-sh build-image.sh RMQ-VERSION
+sh build-image.sh RMQ-VERSION BASE-IMAGE
 ```
 
-Tip: The supported RMQ-VERSIONs can be obtained from [here](https://dist.apache.org/repos/dist/release/rocketmq/)
+> Tip: The supported RMQ-VERSIONs can be obtained from [here](https://dist.apache.org/repos/dist/release/rocketmq/). The supported BASE-IMAGEs are [centos, alpine]. For example: ```sh build-image.sh 4.5.0 alpine```
 
 ### B. Stage a specific version
 
@@ -44,7 +44,7 @@ Run:
 ```
 cd stages/4.5.0 
 
-./play-docker.sh
+./play-docker.sh alpine
 
 ```
 > NOTE:
diff --git a/image-build/Dockerfile-alpine b/image-build/Dockerfile-alpine
index b810dc6..6145021 100644
--- a/image-build/Dockerfile-alpine
+++ b/image-build/Dockerfile-alpine
@@ -15,15 +15,9 @@
 # limitations under the License.
 #
 
-FROM centos:7
+FROM openjdk:8-alpine
 
-RUN yum install -y java-1.8.0-openjdk-devel.x86_64 unzip gettext nmap-ncat openssl, which gnupg, telnet \
- && yum clean all -y
-
-# FROM openjdk:8-jdk
-# RUN apt-get update && apt-get install -y --no-install-recommends \
-#		bash libapr1 unzip telnet wget gnupg ca-certificates \
-#	&& rm -rf /var/lib/apt/lists/*
+RUN apk add --no-cache bash gettext nmap-ncat openssl busybox-extras
 
 ARG user=rocketmq
 ARG group=rocketmq
@@ -33,8 +27,8 @@ ARG gid=3000
 # 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 -u ${uid} -g ${gid} -m -s /bin/bash ${user}
+RUN addgroup --gid ${gid} ${group} \
+    && adduser --uid ${uid} -G ${group} ${user} -s /bin/bash -D
 
 ARG version
 
@@ -46,41 +40,46 @@ ENV ROCKETMQ_HOME  /home/rocketmq/rocketmq-${ROCKETMQ_VERSION}
 
 WORKDIR  ${ROCKETMQ_HOME}
 
+# Install
 RUN set -eux; \
+    apk add --virtual .build-deps curl gnupg unzip; \
     curl https://dist.apache.org/repos/dist/release/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip -o rocketmq.zip; \
     curl https://dist.apache.org/repos/dist/release/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip.asc -o rocketmq.zip.asc; \
     #https://www.apache.org/dist/rocketmq/KEYS
 	curl https://www.apache.org/dist/rocketmq/KEYS -o KEYS; \
 	\
 	gpg --import KEYS; \
-    gpg --batch --verify rocketmq.zip.asc rocketmq.zip ; \
-    unzip rocketmq.zip ; \
+    gpg --batch --verify rocketmq.zip.asc rocketmq.zip; \
+    unzip rocketmq.zip; \
 	mv rocketmq-all*/* . ; \
-	rmdir rocketmq-all*  ; \
-	rm rocketmq.zip rocketmq.zip.asc KEYS
+	rmdir rocketmq-all* ; \
+	rm rocketmq.zip rocketmq.zip.asc KEYS; \
+	apk del .build-deps ; \
+    rm -rf /var/cache/apk/* ; \
+    rm -rf /tmp/*
 
-# add scripts
+# Copy customized scripts
 COPY scripts/ ${ROCKETMQ_HOME}/bin/
 
 RUN chown -R ${uid}:${gid} ${ROCKETMQ_HOME}
 
-# expose namesrv port
+# Expose namesrv port
 EXPOSE 9876
 
-# add customized scripts for namesrv
+# Override customized scripts for namesrv
 RUN mv ${ROCKETMQ_HOME}/bin/runserver-customize.sh ${ROCKETMQ_HOME}/bin/runserver.sh \
  && chmod a+x ${ROCKETMQ_HOME}/bin/runserver.sh \
  && chmod a+x ${ROCKETMQ_HOME}/bin/mqnamesrv
 
-# expose broker ports
+# Expose broker ports
 EXPOSE 10909 10911 10912
 
-# add customized scripts for broker
+# Override customized scripts for broker
 RUN mv ${ROCKETMQ_HOME}/bin/runbroker-customize.sh ${ROCKETMQ_HOME}/bin/runbroker.sh \
  && chmod a+x ${ROCKETMQ_HOME}/bin/runbroker.sh \
  && chmod a+x ${ROCKETMQ_HOME}/bin/mqbroker
 
-# export Java options
+# Export Java options
 RUN export JAVA_OPT=" -Duser.home=/opt"
 
 # Add ${JAVA_HOME}/lib/ext as java.ext.dirs
diff --git a/image-build/build-image.sh b/image-build/build-image.sh
index 59891ab..3faefcd 100755
--- a/image-build/build-image.sh
+++ b/image-build/build-image.sh
@@ -15,16 +15,39 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-if [ $# -lt 1 ]; then
-    echo "Usage: sh $0 version#"
+checkVersion()
+{
+    echo "Version = $1"
+	echo $1 |grep -E "^[0-9]+\.[0-9]+\.[0-9]+" > /dev/null
+    if [ $? = 0 ]; then
+        return 1
+    fi
+
+	echo "Version $1 illegal, it should be X.X.X format(e.g. 4.5.0), please check released versions in 'https://dist.apache.org/repos/dist/release/rocketmq/'"
     exit -1
-fi
+}
 
-ROCKETMQ_VERSION=${1}
-if [ -z "${ROCKETMQ_VERSION}" ]
-then
-  ROCKETMQ_VERSION="4.5.0"
+if [ $# -lt 2 ]; then
+    echo -e "Usage: sh $0 Version BaseImage"
+    exit -1
 fi
 
+ROCKETMQ_VERSION=$1
+BASE_IMAGE=$2
+
+checkVersion $ROCKETMQ_VERSION
+
 # Build rocketmq
-docker build --no-cache -t rocketmqinc/rocketmq:${ROCKETMQ_VERSION} --build-arg version=${ROCKETMQ_VERSION} .
+case "${BASE_IMAGE}" in
+    alpine)
+        docker build --no-cache -f Dockerfile-alpine -t rocketmqinc/rocketmq:${ROCKETMQ_VERSION}-alpine --build-arg version=${ROCKETMQ_VERSION} .
+    ;;
+    centos)
+        docker build --no-cache -f Dockerfile-centos -t rocketmqinc/rocketmq:${ROCKETMQ_VERSION} --build-arg version=${ROCKETMQ_VERSION} .
+    ;;
+    *)
+        echo "${BASE_IMAGE} is not supported, supported base images: centos, alpine"
+        exit -1
+    ;;
+esac
+
diff --git a/image-build/scripts/runbroker-customize.sh b/image-build/scripts/runbroker-customize.sh
index cf82645..8ae360f 100755
--- a/image-build/scripts/runbroker-customize.sh
+++ b/image-build/scripts/runbroker-customize.sh
@@ -63,13 +63,13 @@ then
 	elif [ "$CAL_UNIT" == "K" -o "$CAL_UNIT" == "k" ]; then
 		MAX_POSSIBLE_RAM=$(echo ${MAX_POSSIBLE_RAM_STR:0:${#MAX_POSSIBLE_RAM_STR}-1} `expr 1 \* 1024` | awk '{printf "%d",$1*$2}')
 	fi
-	MAX_POSSIBLE_HEAP=$[MAX_POSSIBLE_RAM/4]
+	MAX_POSSIBLE_HEAP=`expr $MAX_POSSIBLE_RAM / 4`
 fi
 
 # Dynamically calculate parameters, for reference.
 Xms=$MAX_POSSIBLE_HEAP
 Xmx=$MAX_POSSIBLE_HEAP
-Xmn=$[MAX_POSSIBLE_HEAP/2]
+Xmn=`expr $MAX_POSSIBLE_HEAP / 2`
 MaxDirectMemorySize=$MAX_POSSIBLE_HEAP
 # Set for `JAVA_OPT`.
 JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}"
diff --git a/image-build/scripts/runserver-customize.sh b/image-build/scripts/runserver-customize.sh
index 7135b6b..0b76aa2 100755
--- a/image-build/scripts/runserver-customize.sh
+++ b/image-build/scripts/runserver-customize.sh
@@ -63,13 +63,13 @@ then
 	elif [ "$CAL_UNIT" == "K" -o "$CAL_UNIT" == "k" ]; then
 		MAX_POSSIBLE_RAM=$(echo ${MAX_POSSIBLE_RAM_STR:0:${#MAX_POSSIBLE_RAM_STR}-1} `expr 1 \* 1024` | awk '{printf "%d",$1*$2}')
 	fi
-	MAX_POSSIBLE_HEAP=$[MAX_POSSIBLE_RAM/4]
+	MAX_POSSIBLE_HEAP=`expr $MAX_POSSIBLE_RAM / 4`
 fi
 
 # Dynamically calculate parameters, for reference.
 Xms=$MAX_POSSIBLE_HEAP
 Xmx=$MAX_POSSIBLE_HEAP
-Xmn=$[MAX_POSSIBLE_HEAP/2]
+Xmn=`expr $MAX_POSSIBLE_HEAP / 2`
 # Set for `JAVA_OPT`.
 JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}"
 JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
diff --git a/product/conf/2m-noslave/broker-trace.properties b/product/conf/2m-noslave/broker-trace.properties
index 966bb5f..fe1c82f 100644
--- a/product/conf/2m-noslave/broker-trace.properties
+++ b/product/conf/2m-noslave/broker-trace.properties
@@ -1,4 +1,3 @@
-#
 # 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.
@@ -13,7 +12,6 @@
 # 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.
-#
 brokerClusterName=DefaultCluster
 brokerName=broker-trace
 brokerId=0
diff --git a/stage.sh b/stage.sh
index dbf24f4..652d160 100644
--- a/stage.sh
+++ b/stage.sh
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-function checkVersion()        
+checkVersion()
 {
     echo "Stage version = $1"
 	echo $1 |grep -E "^[0-9]+\.[0-9]+\.[0-9]+" > /dev/null
@@ -50,9 +50,18 @@ cp -rf "$CURRENT_DIR/templates/" "$STAGE_DIR/$version"
 
 echo "staged templates into folder $STAGE_DIR/$version"
 
-# Stage the real version
-# todo fix on linux (sed)
-#find "$STAGE_DIR/$version" -type f -exec sed -i "" "s/ROCKETMQ_VERSION/${version}/g" {} \;
-find "$STAGE_DIR/$version" -type f | xargs perl -pi -e "s/ROCKETMQ_VERSION/${version}/g"
+# Replace ROCKETMQ_VERSION with real version string in all files under $STAGE_DIR/$version
+replace_version()
+{
+    case "`uname`" in
+        Darwin)
+            find "$STAGE_DIR/$version" -type f | xargs perl -pi -e "s/ROCKETMQ_VERSION/${version}/g"
+        ;;
+        *)
+            #sed -i "s/ROCKETMQ_VERSION/${version}/g"  `grep ROCKETMQ_VERSION -rl $STAGE_DIR/$version/template`
+            find "$STAGE_DIR/$version/template" -type f | xargs perl -pi -e "s/ROCKETMQ_VERSION/${version}/g"
+        ;;
+    esac
+}
 
-cd $STAGE_DIR
+replace_version
\ No newline at end of file