Docker es una solución gratuita y de código abierto para desarrollar, implementar y gestionar aplicaciones mediante virtualización ligera a nivel de sistema operativo. En esta guía, demostraremos cómo crear una aplicación Python dentro de un contenedor Docker.
Requisitos previos
Para realizar los pasos que se muestran en esta guía, necesitará los siguientes componentes:
Un sistema Linux. Consulte cómo configurar su propio VPS Ubuntu en CloudSigma.
La versión más reciente de Docker instalada y configurada. Obtenga más información sobre cómo instalar Docker en Ubuntu.
Contenedores Docker
Cuando se ejecutan varios programas dentro del mismo entorno, las cosas pueden fallar, y lo harán. Cuantos más programas agregue, más inestable se vuelve. Puede que no sea un gran problema para usuarios promedio. Sin embargo, cuando se trata de aplicaciones críticas, puede haber consecuencias graves.
Cuantas más aplicaciones se introducen en el sistema, mayor es la superficie de ataque. Una sola aplicación comprometida puede llevar fácilmente a la caída de todo el sistema.
Para resolver estos problemas, podemos usar contenedores Docker para aislamiento a nivel de software:
Las aplicaciones dentro del contenedor tendrán acceso limitado a los archivos.
Las aplicaciones contenerizadas no pueden ver otros procesos que se ejecutan en el sistema.
Al contenedor se le puede asignar una cantidad específica de recursos de hardware.
Los puertos de red de un contenedor no se exponen al exterior.
Empaquetado consistente de casi cualquier cosa entre entornos locales y de producción.
Para demostrarlo, crearemos un servidor Python sencillo dentro de un contenedor Docker, transformaremos el contenedor en una imagen e implementaremos la imagen dentro de un entorno de producción de prueba.
Paso 1 – Configuración del sistema de archivos
Para alojar el proyecto, primero crearemos un directorio dedicado:
mkdir -pv python-server-container/
cd !$
Dentro del directorio, cree un subdirectorio src para almacenar nuestro código:
mkdir -pv src/

Paso 2 – Construcción del servidor Python
En este paso, crearemos un servidor HTTP sencillo en Python. Cree el archivo server.py:
touch server.py
Ábralo en un editor de texto:
nano server.py

Introduzca el siguiente código Python:
from http.server import HTTPServer, SimpleHTTPRequestHandler
def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
"""server entrypoint"""
server_address = ("0.0.0.0", 8080)
httpd = server_class(server_address, handler_class)
print("starting server...")
httpd.serve_forever()
if __name__ == "__main__":
run()
Aquí:
Estamos usando la clase HTTPServer y solicitando un controlador de la biblioteca estándar de Python, manteniendo el programa simple.
La función run inicia una instancia de HTTPserver.
Como sugieren los argumentos de server_address, el servidor escuchará cualquier conexión entrante en el puerto 8080.
Ahora verificaremos si el servidor funciona como se espera. Inicie el servidor:
python3 server.py
![]()
Desde una nueva terminal, podemos usar curl para enviar una solicitud al servidor:
curl -iv localhost:8080

Como alternativa, puede acceder al enlace en un navegador web:
http://localhost:8080

Paso 3 – Creación de un Dockerfile
Un Dockerfile contiene las instrucciones necesarias para generar una imagen Docker. Las instrucciones del archivo se siguen de forma secuencial. Obtenga más información sobre Dockerfile.
Cree un nuevo Dockerfile para nuestro proyecto:
touch Dockerfile
Ahora introduciremos el código necesario en él. Ábralo en un editor de texto:
nano Dockerfile
Introduzca el siguiente código:
FROM python:latest
ENV SRC_DIR /usr/bin/src/test_server/src
COPY src/* ${SRC_DIR}/
WORKDIR ${SRC_DIR}
ENV PYTHONUNBUFFERED=1
CMD ["python", "server.py"]Aquí:
Todo Dockerfile debe comenzar con la directiva FROM. En nuestro caso, declaramos Python como base de la imagen Docker.
La directiva ENV SRC_DIR especifica la ubicación del directorio del contenedor.
La directiva COPY copia los archivos desde el directorio src que actualmente aloja el servidor Python.
La variable PYTHONBUFFERED=1 especifica que Python imprimirá y registrará la salida directamente en STDOUT. De lo contrario, los registros no se enviarían a ningún búfer.
La directiva CMD especifica un comando predeterminado para ejecutar al iniciar el contenedor. En este caso, usamos la directiva para iniciar nuestro servidor Python.
Paso 4 – Generación de la imagen Docker
Con el Dockerfile listo, ahora podemos crear una imagen. Ejecute el siguiente comando de Docker para iniciar el proceso:
docker build . -t python_server

Aquí:
La opción -t se usa para etiquetar nuestra imagen Docker como python_server.
Docker descargará todos los componentes necesarios y los combinará en una imagen.
Paso 5 – Ejecución de la imagen
La imagen está lista para implementarse. Podemos ejecutarla usando el siguiente comando:
docker run -p 8080:8080 python_server

Aquí, estamos reenviando el puerto 8080 desde la máquina local a la imagen Docker usando la opción -p.
Podemos validar fácilmente si el servidor está en funcionamiento usando curl:
curl -iv localhost:8080


Paso 6 – Finalización del servidor
Desde la terminal, presione “Ctrl + C” para finalizar el proceso de Docker:

Paso 7 – Exportación e importación de la imagen Docker
Ahora tenemos una imagen Docker funcional que aloja nuestro servidor Python. Con la ayuda de las funciones de exportación e importación de Docker, podemos migrarla a cualquier otro sistema.
Primero, compruebe la lista de imágenes Docker en el sistema actual:
docker images

Nuestro objetivo es la imagen Docker python_server que acabamos de crear. El siguiente comando la exportará como un archivo TAR:
docker save python_server:latest > python_server.tar

Después de transferir el archivo python_server.tar a la máquina de destino, use el siguiente comando para importar la imagen Docker:
docker load < python_server.tar

Reflexiones finales
En esta guía, demostramos cómo crear una imagen Docker a partir de una aplicación Python. Creamos un servidor web Python sencillo y construimos una imagen Docker a partir de él. La imagen Docker ahora puede implementarse en cualquier entorno y se puede esperar un comportamiento consistente.
¿Le interesa aprender más sobre Docker? Consulte las siguientes guías:
Crear e implementar una aplicación Flask con Docker en Ubuntu 20.04
Cómo proteger y escalar una aplicación Django con Docker, Nginx y Let’s Encrypt
Cómo implementar WordPress con contenedores Docker en Ubuntu 20.04
¡Feliz computación!

Comentarios
Aún no hay comentarios. Sea el primero.