blob: 74c9c631c08310948f8c6f5c4917bff26099e912 [file] [log] [blame]
#
# 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.
#
################################################################################
# Build stage 1 `builder`:
# Download and extract RocketMQ
################################################################################
FROM eclipse-temurin:8-jdk-alpine AS builder
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
ARG 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 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/
# Copy RocketMQ artifact from builder
COPY --from=builder --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 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
ENTRYPOINT ["./docker-entrypoint.sh"]
# Dummy overridable parameter parsed by entrypoint
CMD ["dummy"]