# Dockerfile for image with ONAP Portal SDK demo app

# Yields an image 823 MB
FROM frolvlad/alpine-oraclejdk8:slim
# Yields an image 1.4 GB
# FROM openjdk:8-jdk

# Arguments are supplied by build.sh script
# the defaults below only support testing
ARG SDK_WAR=build/epsdk-app-os.war
ARG HTTP_PROXY
ARG HTTPS_PROXY

# Just variables, never passed in
ARG TOMCAT=apache-tomcat-8.0.37
ARG TOMCATTAR=${TOMCAT}.tar.gz
ARG TOMCATHOME=/opt/${TOMCAT}
ARG SDKCONTEXT=ONAPPORTALSDK

ENV http_proxy $HTTP_PROXY
ENV https_proxy $HTTPS_PROXY
RUN if [ ! -z ${HTTP_PROXY} ]; then echo "Acquire::http::proxy  \"${HTTP_PROXY}\";" >> /etc/apt/apt.conf; fi && \
    if [ ! -z ${HTTPS_PROXY} ]; then echo "Acquire::https::proxy \"${HTTPS_PROXY}\";" >> /etc/apt/apt.conf; fi

# Install Tomcat.  This image already has curl.
WORKDIR /tmp
RUN wget -q http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.37/bin/apache-tomcat-8.0.37.tar.gz
RUN tar -xzf ${TOMCATTAR}
RUN rm ${TOMCATTAR}
# Remove manager and sample apps
RUN rm -fr ${TOMCAT}/webapps/[a-z]*
RUN mkdir -p /opt
RUN mv ${TOMCAT} /opt

WORKDIR ${TOMCATHOME}/webapps
RUN mkdir ${SDKCONTEXT}

# SDK app has only a war
COPY $SDK_WAR ${SDKCONTEXT}
RUN cd ${SDKCONTEXT} && unzip -q *.war && rm *.war

VOLUME ${TOMCATHOME}/logs

# Switch back to root
WORKDIR /

# Define commonly used ENV variables
ENV PATH $PATH:$JAVA_HOME/bin:${TOMCATHOME}/bin
# Install the launch script
COPY start-apache-tomcat.sh /

# Define default command
CMD /start-apache-tomcat.sh
