Deployment web con Docker con ejemplos
Última actualización
Última actualización
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:
Primero revisaremos de que images dispone DockerHub de lo que nos interesa:
Para descargar la imagen podemos hace run pull
:
Sin 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 intenta localizar esa imagen dentro de su disco duro. Si no la encuentra, la busca en una base de datos de imágenes llamada 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
.
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 .
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 --interactive
le 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 --tty
le 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
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:
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.
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
).
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.
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.