Dockerfile para python con alpine y multistage builds.

18/05/2019 | Autor: Eduardo Enriquez

Un ejemplo de un Dockerfile para python 3 tomado de la documentación oficial de docker es este:

La imagen base es "python:3" que esta basada en debian y tiene la desventaja de ocupar bastante espacio y traer un monton de herramientas que son útiles durante el desarrollo (como por ejemplo bash) y no tan útiles para el ambiente productivo. Por esto ultimamente se usa más y más imágenes basadas en Alpine. Una distribucion de linux (basada en busybox) que ocupa solo 5mb.

La gran diferencia va a consistir en tener que utilizar apk (y no apt-get) para instalar nuestras dependencias. El resto es igual que en cualquier dockerfile.

Otro ajuste que se puede realizar es usar una nueva feature de docker que se llama multistage builds

Aquí utilzamos dos FROM, uno para indicar la imagen base sobre la cual se van a compilar los paquetes. Para compilar algunas dependecias de python se necesitan de librerias de C y de algunos paquetes extras. El segundo FROM indica la imagen definitiva sobre la cual se va a trabajar y se indica que archivos binarios (o ya compilados) se necesitan. Y se indica la copia de dichos archivos de la imagen de la compilacion anterior (COPY --from)

Con esta imagen podemos usar un docker-compose.yml para no tener que memorizar todas las combinaciones de parametros de docker:

Este docker-compose.yml también necesita de un archivo .env con todos los secretos.