Introducción
Docker es una plataforma potente para construir, desplegar y ejecutar aplicaciones en un entorno contenedorizado. En este tutorial, aprenderás cómo ejecutar una aplicación personalizada en un contenedor Docker y exponer un puerto personalizado para acceso externo. Al final de esta guía, tendrás una sólida comprensión de cómo aprovechar Docker para desplegar tus aplicaciones con mayor flexibilidad y control.
Introducción a Docker y Contenedores
Docker es una plataforma de código abierto popular que permite el desarrollo, despliegue y gestión de aplicaciones mediante contenedores. Los contenedores son paquetes de software ligeros, autónomos y ejecutables que incluyen todo lo necesario para que una aplicación funcione, incluyendo el código, el entorno de ejecución, las herramientas del sistema y las bibliotecas.
¿Qué es Docker?
Docker es una herramienta diseñada para facilitar la creación, el despliegue y la ejecución de aplicaciones mediante contenedores. Los contenedores permiten a un desarrollador empaquetar una aplicación con todas las partes que necesita, como bibliotecas y otras dependencias, y enviarla como un solo paquete.
Beneficios del Uso de Docker
- Consistencia: Los contenedores garantizan que tu aplicación se ejecutará de la misma manera, independientemente del entorno en el que se despliegue.
- Escalabilidad: Los contenedores se pueden escalar fácilmente hacia arriba o hacia abajo para satisfacer las demandas de tu aplicación.
- Portabilidad: Los contenedores se pueden ejecutar en cualquier sistema que tenga Docker instalado, lo que facilita el traslado de tu aplicación entre diferentes entornos.
- Eficiencia: Los contenedores son ligeros y utilizan menos recursos que las máquinas virtuales, lo que los hace más eficientes de ejecutar.
Arquitectura de Docker
Docker utiliza una arquitectura cliente-servidor, donde el cliente Docker se comunica con el demonio Docker, que es responsable de la creación, ejecución y distribución de los contenedores Docker.
graph LD
subgraph Arquitectura de Docker
client((Cliente Docker))
daemon((Demonio Docker))
registry((Registro Docker))
client --> daemon
daemon --> registry
end
Contenedores Docker
Los contenedores Docker son los bloques de construcción básicos de Docker. Un contenedor es una unidad de software estándar que empaqueta el código y todas sus dependencias, de modo que la aplicación se ejecute de forma rápida y fiable de un entorno informático a otro.
graph LD
subgraph Contenedor Docker
app((Aplicación))
runtime((Entorno de ejecución))
libs((Bibliotecas))
bin((Binarios))
end
Imágenes Docker
Las imágenes Docker son la base para los contenedores. Una imagen es un paquete de software ligero, autónomo y ejecutable que incluye todo lo necesario para ejecutar una aplicación: el código, un entorno de ejecución, bibliotecas, variables de entorno y archivos de configuración.
Ejecutando una Aplicación Personalizada en Docker
Creando una Imagen Docker Personalizada
Para ejecutar una aplicación personalizada en un contenedor Docker, primero necesitas crear una imagen Docker para tu aplicación. Esto se puede hacer utilizando un Dockerfile, que es un documento de texto que contiene todos los comandos que un usuario podría ejecutar en la línea de comandos para ensamblar una imagen.
Aquí hay un ejemplo de Dockerfile para una sencilla aplicación web Flask:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Este Dockerfile:
- Parte de la imagen base
python:3.9-slim. - Establece el directorio de trabajo en
/app. - Copia el archivo
requirements.txte instala los paquetes Python necesarios. - Copia el código de la aplicación al contenedor.
- Especifica el comando para ejecutar la aplicación (
python app.py).
Creación y Ejecución de la Imagen Docker
Una vez que tengas el Dockerfile, puedes crear la imagen Docker usando el comando docker build:
docker build -t my-flask-app .
Esto creará una nueva imagen Docker con la etiqueta my-flask-app.
Para ejecutar la aplicación en un contenedor Docker, utiliza el comando docker run:
docker run -p 5000:5000 my-flask-app
Esto iniciará un nuevo contenedor basado en la imagen my-flask-app y mapeará el puerto 5000 del host al puerto 5000 dentro del contenedor.
Verificación de la Aplicación
Ahora puedes acceder a la aplicación en ejecución en tu navegador web visitando http://localhost:5000. Deberías ver la salida de tu aplicación Flask.
Exponiendo un Puerto Personalizado
De forma predeterminada, cuando se ejecuta un contenedor Docker, está aislado del sistema host y su red. Si tu aplicación se ejecuta en un puerto específico dentro del contenedor, necesitas exponer ese puerto al sistema host para poder acceder a la aplicación desde fuera del contenedor.
Exponiendo un Puerto
Para exponer un puerto desde un contenedor Docker, puedes usar la bandera -p o --publish al ejecutar el comando docker run. La sintaxis es:
docker run -p <puerto_host>:<puerto_contenedor> <nombre_imagen>
Por ejemplo, si tu aplicación se ejecuta en el puerto 8000 dentro del contenedor, puedes exponerlo al puerto 80 del sistema host así:
docker run -p 80:8000 my-app
Esto mapeará el puerto 80 del sistema host al puerto 8000 dentro del contenedor.
Verificando el Puerto Expuesto
Puedes verificar que el puerto se haya expuesto correctamente comprobando la salida del comando docker run, que debería mostrar los puertos mapeados:
$ docker run -p 80:8000 my-app
* Ejecutando en http://0.0.0.0:8000/ (Presiona CTRL+C para salir)
Alternativamente, puedes usar el comando docker port para listar los puertos mapeados para un contenedor en ejecución:
$ docker port <id_contenedor>
8000/tcp -> 0.0.0.0:80
Esto muestra que el puerto 8000 dentro del contenedor está mapeado al puerto 80 del sistema host.
Ahora, puedes acceder a tu aplicación visitando http://localhost (o la dirección IP del sistema host) en tu navegador web.
Resumen
En este tutorial, has aprendido a ejecutar una aplicación personalizada en un contenedor Docker y exponer un puerto personalizado para acceso externo. Al encapsular tu aplicación en un contenedor, puedes garantizar despliegues consistentes y confiables, así como la capacidad de escalar y gestionar tu aplicación de forma más eficiente. La tecnología de contenedorización de Docker proporciona una plataforma potente para que los desarrolladores construyan, distribuyan y ejecuten sus aplicaciones de una manera más fluida y eficiente.



