Deployment web con Docker con ejemplos
Ya hemos visto lo que es Docker, una plataforma de código abierto para desarrollar, enviar y ejecutar aplicaciones. Es una tecnología que permite incorporar y almacenar su código y sus dependencias en un pequeño paquete llamado imagen.
Vamos a realizar dos ejemplos, uno con una imagen ya creada y la otra más libre:
1) Ejemplo con php
Primero revisaremos de que images dispone DockerHub de lo que nos interesa:
docker search phpPara descargar la imagen podemos hace run pull:
docker pull phpSin descargar la imagen, también podemos directamente ejecutar un contenedor. Como ejemplo podemos probar a instalar una imagen ya creada de php8 con el siguiente comando:
docker run -d hazardco/anaya-php8:v1.0.1 Docker intenta localizar esa imagen dentro de su disco duro. Si no la encuentra, la busca en una base de datos de imágenes llamada dockerhub y la descarga. Cuando ya está la imagen en el disco, procede a ejecutarla en segundo plano gracias al parámetro -d.

Después de ejecutar la imagen de PHP 8 en este caso, lo que obtenemos es un contenedor que está iniciado, pero que no es visible a priori. Además del contenedor que está ejecutándose, Docker guarda de forma local una copia de la imagen descargada. Se puede obtener un listado de imágenes con el comando:
Y es posible ver los contenedores que están funcionando con el comando:
Después de lanzar el comando, obtendremos información de todos los contenedores que se encuentran activos. Lo más importante es el atributo CONTAINER_ID, que identifica al contenedor de manera unívoca, y el IMAGE, que muestra la imagen desde la que se creó. Desde este punto, es posible entrar en el contenedor para comprobar que está funcionando.
Esto se hace con el comando:
Una vez ejecutado, verás que accedes a un shell del container donde puedes ejecutar otros comandos. Prueba a sacar la versión con:
O prueba a sacar la fecha con:
Para salir del shell simplemente usa el comando exit.
2) Monitor web con docker
Para este ejemplo vamos a crear tres contenedores, vamos a ponernos en el supuesto que deseamos un sitio web que esté estrechamente monitorizado. Queremos gestionar nuestras propias operaciones, por lo que queremos que la solución envíe correos electrónicos a un equipo cuando el servidor esté caído. Para estos tres contenedores:
El primero ejecutará NGINX
El segundo ejecutará un programa llamado "mailer" (sistema de envío de correos). Ambos funcionarán como contenedores en segundo plano.
Un tercer programa, llamado "agent" (agente), se ejecutará en un contenedor interactivo.
Tanto el "mailer" como el "agent" son pequeños scripts creados para este ejemplo.

Vamos primero a crear el contenedor de nginx:
Ahora con un docker ps podemos ver el contenedor en activo y crearemos el mailer:
Vamos ahora con el contenedor interactivo, el que tendrá shell de terminal para gestionar:
El comando utiliza dos opciones en la instrucción run: --interactive (o -i) y --tty (o -t).
La opción
--interactivele indica a Docker que mantenga abierto el flujo de entrada estándar (stdin) para el contenedor, incluso si no hay un terminal conectado.La opción
--ttyle indica a Docker que asigne un terminal virtual al contenedor, lo cual te permitirá enviar señales al contenedor.
Tan importante como estas opciones interactivas, es que al iniciar este contenedor especificaste el programa que debía ejecutarse dentro de él. En este caso, ejecutamos un programa de shell llamado sh. Desde la shell podemos comprobar si funciona el servidor web:
Si ves el mensaje de "welcome to nginx" es que esta correcto.
Para terminar el trabajo necesitamos iniciar un agente. Este es un agente de monitoreo que comprobará el servidor web, como hicimos antes, y enviará un mensaje usando el "mailer" si el servidor web se detiene. Este comando iniciará el agente en un contenedor interactivo usando las flags acortadas (--interactive --tty):
Cuando se ejecute, el contenedor testeara el contenedor web cada segundo y mostrará un mensaje de system up. Ahora ya puedes desacoplar la terminal con Ctrl + P + Q
3) Página web en docker
1- Crear un Archivo HTML
Creamos un archivo HTML simple que será el contenido de tu sitio web. Puedes utilizar un editor de texto para crear un archivo llamado index.html. Por ejemplo:
2- Crear el Dockerfile
Crea un archivo llamado Dockerfile en el mismo directorio que tu archivo HTML. Este archivo define cómo se construirá tu imagen de Docker. Puedes usar la imagen oficial de Nginx y copiar tu archivo HTML dentro de ella.
3- Construir la Imagen de Docker
Abre una terminal en el directorio que contiene tu Dockerfile y el archivo index.html. Ejecuta el siguiente comando para construir la imagen:
Elige un nombre significativo para tu imagen (en este caso, mi-sitio-web-dockerizado).
4- Ejecutar el Contenedor
Después de construir la imagen, puedes ejecutar un contenedor basado en ella:
Esto ejecutará el contenedor en segundo plano (-d), redirigiendo el puerto 8080 de tu máquina host al puerto 80 del contenedor. Puedes cambiar el número del puerto según tus preferencias.
5- Verificar
Abre un navegador web y visita http://IPDELHOST:8080 (el puerto configurado antes). Deberías ver tu página web HTML servida por Nginx desde el contenedor de Docker.

Última actualización