# Tips and tricks were learned from: https://pythonspeed.com/articles/multi-stage-docker-python/
FROM python:3.8-alpine AS compile-image
# 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
+# upgrade pip as root
+RUN pip install --upgrade pip
# Gevent needs gcc, make, file, ffi
RUN apk update && apk add gcc musl-dev make file libffi-dev
# 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!
+# create a non-root user. Only really needed in stage 2,
+# however this makes the copying easier and straighttforward;
+# pip option --user doesn't do the same thing if run as root
RUN addgroup -S a1user && adduser -S -G a1user a1user
RUN addgroup -S a1user && adduser -S -G a1user a1user
+# switch to the non-root user for installing site packages
USER 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