Un ejemplo de una aplicación Python que utiliza contenedores Docker tanto en entornos de desarrollo como producción
Supongamos que tienes una aplicación web escrita en Python que utiliza Flask como framework y que tienes dos entornos, el de desarrollo y el de producción. Además, utilizas Docker para virtualizar el entorno y garantizar la consistencia en cualquier plataforma.
Entorno de Desarrollo
Para el entorno de desarrollo, utilizarás un contenedor Docker que contenga tu aplicación Flask, las bibliotecas Python necesarias y las herramientas de desarrollo necesarias. El siguiente Dockerfile puede servir como base para tu contenedor:
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python", "app.py"]
Este Dockerfile instala Python 3.9 en una imagen base de slim-buster. Luego instala las dependencias necesarias para la aplicación Flask a través de un archivo de requisitos y finalmente define el comando para ejecutar la aplicación.
Para crear el contenedor, puedes utilizar el siguiente comando:
docker build -t myapp .
Después de ejecutar este comando, tendrás un contenedor Docker creado etiquetado como "myapp".
Entorno de Producción
Para el entorno de producción, utilizarás un servidor web como Nginx para servir la aplicación Flask. También utilizarás otro contenedor Docker para alojar el servidor Nginx. El Dockerfile para este contenedor puede lucir así:
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=myapp /app /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Este Dockerfile utiliza la imagen base de Nginx y copia la configuración Nginx para servir la aplicación Flask. Luego copia el contenido del contenedor de la aplicación Docker (myapp) en el directorio de contenido compartido por Nginx y define el puerto que expone el contenedor. Finalmente, define el comando para ejecutar el servidor Nginx.
Una vez que se haya creado este contenedor, puede ejecutar tanto el contenedor de la aplicación Flask como el contenedor Nginx juntos con el siguiente comando:
docker run -d --name myapp --network mynetwork myapp
docker run -d --name nginx --network mynetwork -p 80:80 nginx
Esto creará dos contenedores: uno para la aplicación Flask y otro para el servidor Nginx. El contenedor de la aplicación Flask se asigna a la red "mynetwork" para que el contenedor Nginx pueda conectarse a él. También se asigna el puerto 80 del contenedor Nginx al puerto 80 de la máquina anfitriona para que la aplicación sea accesible en el navegador.
Esto es solo un ejemplo simple de cómo puedes utilizar contenedores Docker tanto en entornos de desarrollo como producción para lograr consistencia y portabilidad.