-# CI to build a Docker image with the A1 mediator
-# Adds gcc and cmake to build RMr library
-
-FROM python:3.7
-
-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
-# This pins RMr to a known working version
-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.8-alpine AS compile-image
+# Gevent needs gcc
+RUN apk update && apk add gcc musl-dev
+
+# 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.8-alpine
+# dir that rmr routing file temp goes into