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
Donde
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!