Metiendo Python a nuestro contenedor

Para entender el concepto de meter a python en nuestro contenedor debemos tener en cuenta que hablamos de docker y sus containers

Si no tienes bien claro estos conceptos te invito a que leas las siguiente entrada:

Docker es una plataforma de software que te permite crear, probar e implementar aplicaciones en contenedores. Un contenedor es una unidad de software que contiene todo lo necesario para que una aplicación se ejecute de manera independiente.

Docker es una forma fácil de encapsular aplicaciones y sus dependencias en un paquete portátil y autocontenido. Esto hace que sea fácil mover aplicaciones de un entorno a otro, lo que puede ser útil para el desarrollo, pruebas y producción.

Para Python, Docker proporciona una forma de ejecutar aplicaciones en un entorno aislado, con todas sus dependencias instaladas y configuradas de forma coherente.

Antes de entrar de lleno en Docker se debe mencionar que existen otras maneras de encapsular nustras versiones en los que son conocidos como entornos virtuales, por mencionar algunos como pipenv, conda, venv.

Ahora si, empecemos

Paso 1: Crear un archivo Dockerfile
El primer paso es crear un archivo Dockerfile. Este archivo especifica cómo construir la imagen de Docker que contiene Python y las dependencias necesarias para ejecutar una aplicación Django.

En el directorio de tu proyecto, crea un archivo llamado Dockerfile y agrega el siguiente contenido:

Dockerfile

FROM python:3.8

ENV PYTHONUNBUFFERED 1

RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

Este archivo Dockerfile usa la imagen oficial de Python 3.8 como base y define el directorio de trabajo como /code. Luego, copia el archivo requirements.txt y lo utiliza para instalar todas las dependencias necesarias. Finalmente, copia todo el contenido del proyecto a la imagen de Docker.

Paso 2: Crear un archivo requirements.txt
El archivo requirements.txt contiene todas las dependencias de Python necesarias para ejecutar la aplicación Django. Debes crear un archivo requirements.txt en el directorio principal de tu proyecto y agregar las dependencias necesarias. Por ejemplo, si tu aplicación Django requiere Django, agrega la siguiente línea al archivo requirements.txt:

requirements.txt

Django==3.1.4

También puedes agregar cualquier otra dependencia que necesites para tu proyecto.

Paso 3: Crear el contenedor de Docker
Una vez que tienes el archivo Dockerfile y requirements.txt, puedes crear la imagen de Docker y ejecutar el contenedor.

Primero, construye la imagen de Docker utilizando el siguiente comando:

Docker Script

docker build -t my-django-app .

Este comando construye una imagen de Docker con el nombre my-django-app. El punto al final del comando indica que se debe utilizar el directorio actual como el contexto de compilación.

Luego, puedes ejecutar el contenedor de Docker con el siguiente comando:

Docker Script

docker run -it --rm -p 8000:8000 my-django-app

Este comando ejecuta el contenedor de Docker y lo mapea al puerto 8000 en tu máquina local. El parámetro --rm indica que se debe eliminar el contenedor después de que se detenga.

Una vez que el contenedor esté en ejecución, puedes abrir tu navegador y visitar la dirección http://localhost:8000 para ver tu aplicación Django en acción.

Paso 4: Configurar la aplicación Django
Ahora que has creado el contenedor de Docker, debes configurar la aplicación Django para que se ejecute correctamente en el entorno de Docker.

Primero, asegúrate de que el archivo settings.py tenga la siguiente configuración:

settings.py

ALLOWED_HOSTS = ['*']

Esta configuración permite que cualquier host se conecte a la aplicación.

Luego, agrega la siguiente línea al archivo Dockerfile antes de la copia del contenido del proyecto:

Dockerfile

RUN python manage.py collectstatic --noinput

Esta línea ejecuta el comando collectstatic de Django en la imagen de Docker. Este comando recolecta todos los archivos estáticos de tu aplicación y los guarda en la carpeta STATIC_ROOT.

Finalmente, modifica el comando docker run para incluir el parámetro -v y mapear el directorio de archivos estáticos de Django en la imagen de Docker al directorio local. De esta manera, los archivos estáticos se pueden servir correctamente:

Dockerfile

docker run -it --rm -p 8000:8000 -v "$(pwd)"/static:/code/static my-django-app

Paso 5: Trabajar con el contenedor de Docker
Una vez que el contenedor de Docker esté en ejecución, puedes trabajar con él de la misma manera que trabajarías con una aplicación Django local.

Para acceder al shell de Django en el contenedor, utiliza el siguiente comando:

Docker Script

docker exec -it python manage.py shell

Donde es el ID del contenedor de Docker. Puedes obtener el ID del contenedor ejecutando el siguiente comando:

Docker Script

docker ps

Este comando lista todos los contenedores de Docker en ejecución.

Conclusión
En resumen, Docker es una herramienta poderosa para el desarrollo de aplicaciones Python. Te permite encapsular tus aplicaciones y dependencias en un contenedor portátil y autocontenido, lo que hace que sea fácil mover tus aplicaciones entre entornos.

En este post, hemos cubierto cómo contener Python en un contenedor de Docker y cómo trabajar con Django en este entorno. Ahora estás listo para desarrollar tu aplicación Django en un entorno de Docker aislado y portátil. ¡Buena suerte!