Testato con Python 3.4.8, 3.5.5, 3.6.5 e 2.7.14 (basta sostituire 3 con 2):
# You can use a specific version too, like python:3.6.5-alpine3.7
FROM python:3-alpine
WORKDIR /usr/src/app
COPY requirements.txt .
RUN \
apk add --no-cache postgresql-libs && \
apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev && \
python3 -m pip install -r requirements.txt --no-cache-dir && \
apk --purge del .build-deps
COPY . .
CMD ["python3", "app.py"]
Spiegazione:per compilare Psycopg sono necessari i pacchetti gcc musl-dev postgresql-dev
. Quindi hai anche bisogno dell'eseguibile pg_config:mentre installi semplicemente postgresql-dev
funzionerà, postgresql-libs
va bene e occupa anche 12 MB in meno di spazio.
Ecco la versione originale della risposta (basata su questo Dockerfile) in cui installo manualmente Python su un'immagine Alpine pura perché a quel tempo Python non forniva l'immagine Docker con Python 3.6 e Alpine 3.7. Se vuoi installare Python 2.7 in questo modo, fai anche apk add py2-pip
(chiamato py-pip
nei vecchi repository alpini).
FROM alpine:3.7
WORKDIR /usr/src/app
COPY requirements.txt .
RUN \
apk add --no-cache python3 postgresql-libs && \
apk add --no-cache --virtual .build-deps gcc python3-dev musl-dev postgresql-dev && \
python3 -m pip install -r requirements.txt --no-cache-dir && \
apk --purge del .build-deps
COPY . .
CMD ["python3", "app.py"]