Encontraste un dockerfile que usa multi-stage con python 🐍:
# Primera imagen para compilar
FROM python:3.8.4-slim-buster as compile-image
# Se define una variable opcional
RUN python3 -m venv /opt/venv
# Se sobreescribe la variable path para que tenga prioridad los comandos del ambiente
ENV PATH="/opt/venv/bin:$PATH"
# Se copia unicamente el archivo de dependencias
COPY requirements.txt /requirements.txt
# Se instalan las dependencias.
RUN pip install -r requirements.txt
# Listo, inicia el segundo contenedor
FROM python:3.8.4-alpine3.12 AS build-image
# Se copia la carpeta venv que contiene todas las dependencias en el segundo contenedor
COPY --from=compile-image /opt/venv /opt/venv
# Se copia la aplicación
COPY . usr/src/app
# Se establece por defecto el directorio
WORKDIR /usr/src/app
# Se agrega el directorio a las variables de ambiente.
ENV PATH="/opt/venv/bin:$PATH"
# Arranca la aplicación
ENTRYPOINT python3 main.py
aquí te cuento algunas cosas que me sorprendieron:
1 etapa o primer contendor
FROM python:3.8.4-slim-buster as compile-image la versión slim-buster te da la imagen que compila con C. Por lo que es adecuada para correr numpy, keras y todo lo relacionado con machine learning.RUN python3 -m venv /opt/venv asigna una carpeta para el entorno virtual.ENV PATH="/opt/venv/bin:$PATH" asigna el entorno virtual al path o variables de entorno de linux 🤯 (así todo corre en el entorno virtual y no en el sistema operativo del docker)RUN pip install -r requirements.txt2 etapa o segundo contendor
FROM python:3.8.4-alpine3.12 AS build-image descarga la imágen de python que funciona con alpine. ¡Alpine es la distro de linux más liviana que existe! 🪶COPY --from=compile-image /opt/venv /opt/venv copia las dependencias del contenedor sucio y las pega en el directorio opt/venv (ya sabes el entorno virtual)COPY . usr/src/app, en un contenedor limpioENTRYPOINT arranca el archivo que necesites.Content type
Image
Digest
sha256:c6a98fe02…
Size
21.7 MB
Last updated
over 2 years ago
docker pull ccamsoto/swain