# https://hub.docker.com/r/adoptopenjdk/openjdk8
# https://github.com/AdoptOpenJDK/openjdk-docker/blob/master/8/jdk/ubuntu/Dockerfile.hotspot.releases.slim
FROM adoptopenjdk/openjdk8:slim

MAINTAINER Marek Rychly <marek.rychly@gmail.com>

# https://kafka.apache.org/downloads
ARG KAFKA_VERSION=1.1.0
ARG SCALA_VERSION=2.12

ARG DOWNLOAD_CACHE
#ARG APACHE_ORIG="http://www-eu.apache.org/dist"	# mirror disabled as it does not have the old versions, just the latest
ARG APACHE_ORIG="http://archive.apache.org/dist"
ARG APACHE_MIRROR="https://archive.apache.org/dist"

ENV KAFKA_HOME="/opt/kafka"
ENV KAFKA_CONF_DIR="${KAFKA_HOME}/config"
ENV \
KAFKA_SERVER_CONF="${KAFKA_CONF_DIR}/server.properties" \
ZOOKEEPER_CONF="${KAFKA_CONF_DIR}/zookeeper.properties"

COPY scripts /

RUN true \
# make the scripts executable
&& chmod 755 /*.sh \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get -y install gnupg \
\
# download keys and trust them
&& ( [ -n "${DOWNLOAD_CACHE}" ] && cp -v "${DOWNLOAD_CACHE}/kafka.KEYS" /tmp \
	|| curl -LfsSo /tmp/kafka.KEYS "${APACHE_ORIG}/kafka/KEYS" ) \
&& gpg --import /tmp/kafka.KEYS \
&& echo "trust-model always" > ~/.gnupg/gpg.conf \
\
# download the package
&& ( [ -n "${DOWNLOAD_CACHE}" ] && cp -v "${DOWNLOAD_CACHE}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz" /tmp \
	|| curl -LfsSo /tmp/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz "${APACHE_MIRROR}/kafka/${KAFKA_VERSION}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz" ) \
\
# download and verify signature
&& ( [ -n "${DOWNLOAD_CACHE}" ] && cp -v "${DOWNLOAD_CACHE}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz.asc" /tmp \
	|| curl -LfsSo /tmp/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz.asc "${APACHE_ORIG}/kafka/${KAFKA_VERSION}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz.asc" ) \
&& for SIG in /tmp/*.asc; do gpg --verify "${SIG}" "${SIG%.asc}"; done \
\
# extract the package and remove garbage
&& mkdir -p "${KAFKA_HOME}" \
&& tar -xzf "/tmp/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz" -C "${KAFKA_HOME}" --strip-components 1 \
&& find "${KAFKA_HOME}" \( -name '*.asc' -o -name '*-sources.jar' -o -name '*-javadoc.jar' -o -name '*-scaladoc.jar' -o -name '*-test.jar' -o -name '*-examples-*.jar' \) -delete \
&& rm -rf "${KAFKA_HOME}/bin/windows" "${KAFKA_HOME}/site-docs" \
\
# set up permissions
&& addgroup --system kafka \
&& adduser --system --home ${KAFKA_HOME} --gecos "Apache Kafka" --shell /bin/sh --ingroup kafka --disabled-login --no-create-home kafka \
&& chown -R kafka:kafka ${KAFKA_HOME} \
\
# set path and java-home for the shell
&& echo '#!/bin/sh' > /etc/profile.d/path-kafka.sh \
&& echo "export PATH=\"\${PATH}:${KAFKA_HOME}/bin\"" >> /etc/profile.d/path-kafka.sh \
&& echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile.d/path-kafka.sh \
&& chmod 755 /etc/profile.d/path-kafka.sh \
\
# clean up
&& apt-get -y autoremove gnupg \
&& apt-get clean \
&& rm -rf /tmp/* /var/tmp/* /var/lib/apt/lists/*

ENTRYPOINT ["/entrypoint.sh"]

HEALTHCHECK CMD /healthcheck.sh
