# Dockerfile for image with ONAP applications:
# Portal app, Portal-SDK 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 PORTAL_WAR=build/ecompportal-be-os.war
ARG FE_DIR=build/public
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 PORTALCONTEXT=ONAPPORTAL
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 ${PORTALCONTEXT} && mkdir ${SDKCONTEXT}

# Portal has many parts
COPY $PORTAL_WAR ${PORTALCONTEXT}
RUN cd ${PORTALCONTEXT} && unzip -q *.war && rm *.war
COPY ${FE_DIR} ${PORTALCONTEXT}/public

# 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 wait script
COPY wait-for.sh /
# Install the launch script
COPY start-apps-cmd.sh /

# Define default command
CMD /start-apps-cmd.sh
