Testowane z Pythonem 3.4.8, 3.5.5, 3.6.5 i 2.7.14 (wystarczy zastąpić 3 przez 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"]
Wyjaśnienie:aby zbudować Psycopg potrzebujesz pakietów gcc musl-dev postgresql-dev
. Następnie potrzebujesz również tego pliku wykonywalnego pg_config:po prostu instalując postgresql-dev
zadziała, postgresql-libs
również działa dobrze i zajmuje około 12 MB mniej miejsca.
Oto oryginalna wersja odpowiedzi (na podstawie tego pliku Dockerfile), w której ręcznie instaluję Pythona na czystym obrazie Alpine, ponieważ w tym czasie Python nie dostarczał obrazu Docker z Pythonem 3.6 i Alpine 3.7. Jeśli chcesz w ten sposób zainstalować Pythona 2.7, wykonaj także apk add py2-pip
(zwane py-pip
w starszych repozytoriach Alpine).
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"]