-ADD . /tmp
-
-# Install RMR
-RUN apt-get update && apt-get install -y gcc git cmake
-RUN git clone https://gerrit.oran-osc.org/r/ric-plt/lib/rmr
-WORKDIR rmr
-RUN git checkout 68d09fa5028e47e763c44c30647da31e77eda64a
-RUN mkdir .build; cd .build; cmake ..; make install
-
-# Install python-rmr
-RUN pip install --upgrade pip
-
-#install a1
-WORKDIR /tmp
-
-# Run our unit tests
-RUN pip install tox
-RUN tox
-
-# do the actual install
-RUN pip install .
-EXPOSE 10000
-
-# rmr setups
+# This container uses a 2 stage build!
+# Tips and tricks were learned from: https://pythonspeed.com/articles/multi-stage-docker-python/
+FROM python:3.7-alpine AS compile-image
+# Gevent needs gcc
+RUN apk update && apk add gcc musl-dev
+# do the install of a1
+
+# Switch to a non-root user for security reasons
+# This is only really needed in stage 2 however this makes the copying easier and straitforward! --user doesn't do the same thing if run as root!
+RUN addgroup -S a1user && adduser -S -G a1user a1user
+USER a1user
+
+# Speed hack; we install gevent FIRST because when building repeatedly (eg during dev) and only changing a1 code, we do not need to keep compiling gevent which takes forever
+RUN pip install --upgrade pip && pip install --user gevent
+COPY setup.py /home/a1user/
+COPY a1/ /home/a1user/a1
+RUN pip install --user /home/a1user
+
+###########
+# 2nd stage
+FROM python:3.7-alpine
+# dir that rmr routing file temp goes into