add entry point for docker (#75)

diff --git a/image-build/Dockerfile-alpine b/image-build/Dockerfile-alpine
index d00f808..74c9c63 100644
--- a/image-build/Dockerfile-alpine
+++ b/image-build/Dockerfile-alpine
@@ -15,21 +15,39 @@
 # limitations under the License.
 #
 
-FROM openjdk:8-alpine
+################################################################################
+# Build stage 1 `builder`:
+# Download and extract RocketMQ
+################################################################################
+FROM eclipse-temurin:8-jdk-alpine AS builder
 
-RUN apk add --no-cache bash gettext nmap-ncat openssl busybox-extras
+ARG version
+
+RUN set -eux; \
+    apk add --virtual .build-deps curl gnupg unzip;
+
+RUN 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.zip;
+
+RUN 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-alpine
 
 ARG user=rocketmq
 ARG group=rocketmq
 ARG uid=3000
 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 addgroup --gid ${gid} ${group} \
-    && adduser --uid ${uid} -G ${group} ${user} -s /bin/bash -D
-
 ARG version
 
 # Rocketmq version
@@ -38,53 +56,42 @@
 # Rocketmq home
 ENV ROCKETMQ_HOME  /home/rocketmq/rocketmq-${ROCKETMQ_VERSION}
 
-WORKDIR  ${ROCKETMQ_HOME}
 
-# Install
-RUN set -eux; \
-    apk add --virtual .build-deps curl gnupg unzip; \
-    curl -L https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip -o rocketmq.zip; \
-    curl -L https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip.asc -o rocketmq.zip.asc; \
-    #https://www.apache.org/dist/rocketmq/KEYS
-	curl -L https://www.apache.org/dist/rocketmq/KEYS -o KEYS; \
-	\
-	gpg --import KEYS; \
-    gpg --batch --verify rocketmq.zip.asc rocketmq.zip; \
-    unzip rocketmq.zip; \
-	mv rocketmq*/* . ; \
-	rmdir rocketmq-* ; \
-	rm rocketmq.zip rocketmq.zip.asc KEYS; \
-	apk del .build-deps ; \
-    rm -rf /var/cache/apk/* ; \
-    rm -rf /tmp/*
+# 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 addgroup --gid ${gid} ${group} \
+    && adduser --uid ${uid} -G ${group} ${user} -s /bin/bash -D \
+    && apk add --no-cache bash gettext nmap-ncat openssl busybox-extras
 
 # Copy customized scripts
 COPY scripts/ ${ROCKETMQ_HOME}/bin/
 
-RUN chown -R ${uid}:${gid} ${ROCKETMQ_HOME}
+# Copy RocketMQ artifact from builder
+COPY --from=builder --chown=${uid}:${gid} /tmp/rocketmq-${version}/ ${ROCKETMQ_HOME}
 
-# Expose namesrv port
-EXPOSE 9876
 
 # 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 10909 10911 10912
-
 # 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
-RUN export JAVA_OPT=" -Duser.home=/opt"
-
 # Add ${JAVA_HOME}/lib/ext as java.ext.dirs
-RUN sed -i 's/${JAVA_HOME}\/jre\/lib\/ext/${JAVA_HOME}\/jre\/lib\/ext:${JAVA_HOME}\/lib\/ext/' ${ROCKETMQ_HOME}/bin/tools.sh
+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 a+x ${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}
 
 USER ${user}
 
-WORKDIR ${ROCKETMQ_HOME}/bin
\ No newline at end of file
+WORKDIR ${ROCKETMQ_HOME}/bin
+
+ENTRYPOINT ["./docker-entrypoint.sh"]
+# Dummy overridable parameter parsed by entrypoint
+CMD ["dummy"]
+
diff --git a/image-build/scripts/docker-entrypoint.sh b/image-build/scripts/docker-entrypoint.sh
new file mode 100644
index 0000000..ea7032e
--- /dev/null
+++ b/image-build/scripts/docker-entrypoint.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+set -e
+
+# Allow user specify custom CMD, maybe run /bin/bash to check the image
+if [[ "$1" == "nameserver" || "${NODE_ROLE}" == "nameserver" ]]; then
+  shift
+  exec ./mqnamesrv "${@}"
+elif [[ "$1" == "broker" || "${NODE_ROLE}" == "broker" ]]; then
+  shift
+  exec ./mqbroker "${@}"
+elif [[ "$1" == "controller" || "${NODE_ROLE}" == "controller" ]]; then
+  shift
+  exec ./mqcontroller "${@}"
+else
+  # Run whatever command the user wants
+  exec "$@"
+fi