Publicación de Servicios en Docker Swarm con Puertos Externos

Clase 14 de 24Curso de Swarm

Resumen

¿Cómo exponer un servicio en Docker Swarm?

Docker Swarm es una herramienta potente para administrar múltiples contenedores en un clúster. Sin embargo, hasta ahora hemos trabajado con servicios internos y no hemos explorado cómo permitir que estos servicios sean accesibles desde el exterior. En esta sección, veremos cómo lograrlo utilizando un ejemplo práctico con una aplicación en Node.js.

¿Cuál es el proyecto ejemplo de Hostname?

El proyecto Hostname es una aplicación sencilla en Node.js. Su propósito principal es recibir una petición GET y responder con el hostname del servidor en el que está ejecutándose. Viene con un Dockerfile preparado para su construcción. Así, se puede publicar y acceder desde Docker Swarm fácilmente.

Pasos para construir y publicar la imagen

  1. Construir la imagen: Primero ubicamos el directorio correcto del proyecto y ejecutamos el comando para construir la imagen usando Docker:

    docker build -t tu_usuario_de_docker/swarm/hostname .
    
  2. Publicar en un repositorio de imágenes: La imagen debe ser accesible por todos los nodos del clúster, por lo que es necesario publicarla:

    docker push tu_usuario_de_docker/swarm/hostname
    

¿Cómo iniciar un Swarm con templates?

Para no tener que configurarlo cada vez desde cero, Docker Swarm ofrece templates predefinidos para la rápida creación del clúster. En este caso, seleccionamos un template de tres nodos gestores (managers) y dos nodos trabajadores (workers), optimizando así los recursos y facilitando el despliegue.

¿Cómo correr la aplicación y hacerla accesible externamente?

Después de tener nuestro Swarm listo, hacemos que la aplicación sea accesible desde el exterior mediante la creación de un servicio:

docker service create --name app --detach --publish 3000:3000 --replicas 3 tu_usuario_de_docker/swarm/hostname
  • --name app: asigna un nombre al servicio.
  • --detach: permite que el comando no muestre toda la información en la consola.
  • --publish 3000:3000: expone el puerto 3000 de los contenedores a los usuarios externos.
  • --replicas 3: inicializa el servicio con tres réplicas.

¿Cómo funciona el acceso a los servicios publicados?

Una vez que el servicio está corriendo, se puede obtener un endpoint público. Por ejemplo, Play with Docker automatiza la provisión de una URL pública, lo que facilita verificar el funcionamiento de nuestra aplicación.

Al consultar esta URL, podemos usar curl o un navegador. El sistema de balanceo de carga de Swarm distribuye las peticiones entre los diferentes contenedores. Esto se evidencia cuando accedemos al servicio y obtenemos respuestas distintas, lo que indica que cada petición podría llegar a un contenedor diferente en el clúster.

¿Qué es el Routing Mesh en Docker Swarm?

Una de las características más fascinantes de Docker Swarm es el Routing Mesh. Aunque la aplicación tenga múltiples réplicas y los contenedores estén distribuidos entre varios nodos, Docker Swarm asegura que cada solicitud siempre llegue a un nodo que puede manejarla. Esto sucede sin intervención directa del usuario y garantiza una administración eficiente de los recursos del clúster. En la próxima lección exploraremos más a fondo esta tecnología y cómo se logra este balanceo y enrutamiento efectivo.