Testado com Python 3.4.8, 3.5.5, 3.6.5 e 2.7.14 (apenas substitua 3 por 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"]
Explicação:para construir o Psycopg você precisa dos pacotes
gcc musl-dev postgresql-dev
. Então você também precisa do executável pg_config:enquanto simplesmente instala o postgresql-dev
funcionará, postgresql-libs
também funciona bem e ocupa menos 12 MB de espaço. Aqui está a versão original da resposta (com base neste Dockerfile) onde instalo manualmente o Python em uma imagem Alpine pura porque naquela época o Python não fornecia a imagem do Docker com o Python 3.6 e o Alpine 3.7. Se você quiser instalar o Python 2.7 assim, também faça
apk add py2-pip
(chamado py-pip
em repositórios Alpine mais antigos). 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"]