+# 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, make, file, ffi
+RUN apk update && apk add gcc musl-dev make file libffi-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