Je cherche un moyen de créer des builds à plusieurs étages avec python et Dockerfile:
Par exemple, en utilisant les images suivantes:
1ère image: installez toutes les exigences de temps de compilation, et installez tous les modules nécessaires python
2ème image: copiez tous les paquets compilés/construits de la première image à la seconde, sans les compilateurs eux-mêmes (gcc, postgers-dev, python-dev etc.)
L'objectif final est d'avoir une image plus petite, exécutant python et les packages python dont j'ai besoin).
En bref: comment puis-je "envelopper" tous les modules compilés (site-packages/libs externes) qui ont été créés dans la première image, et les copier de manière "propre", à la 2ème image.
ok donc ma solution utilise wheel, elle nous permet de compiler sur la première image, de créer des fichiers wheel pour toutes les dépendances et de les installer dans la deuxième image, sans installer les compilateurs
FROM python:2.7-Alpine as base
RUN mkdir /svc
COPY . /svc
WORKDIR /svc
RUN apk add --update \
postgresql-dev \
gcc \
musl-dev \
linux-headers
RUN pip install wheel && pip wheel . --wheel-dir=/svc/wheels
FROM python:2.7-Alpine
COPY --from=base /svc /svc
WORKDIR /svc
RUN pip install --no-index --find-links=/svc/wheels -r requirements.txt
Vous pouvez voir ma réponse à ce sujet dans le blog suivant
https://galnevis.wixsite.com/website/single-post/2018/02/10/Python-and-Docker-multistage-build