Cómo exponer servicios Docker Swarm
Clase 14 de 24 • Curso de Swarm
Contenido del curso
Primeros pasos
- 6

Instalación de Docker en Mac, Ubuntu y Windows
10:13 min - 7

Cómo iniciar Docker Swarm en tu máquina
08:35 min - 8

Creando servicios en Docker Swarm
05:36 min - 9

Cómo funciona docker service ps internamente
11:09 min - 10

Qué es Play with Docker para practicar
06:27 min - 11

Creando un Docker Swarm multinodo real
06:15 min
Administrando Servicios
Swarm avanzado
- 15

Cómo Docker Swarm enruta tráfico sin perder peticiones
06:56 min - 16

Docker Swarm constraints: dónde correr cada tarea
09:04 min - 17

Cómo drenar nodos en Docker Swarm sin downtime
07:56 min - 18

Redes Overlay en Docker Swarm: Comunicación entre Servicios
13:39 min - 19

Docker Stack: automatiza despliegues multinodo
10:49 min - 20

Implementación de Reverse Proxy con Traefik en Docker Swarm
16:49 min
Swarm productivo
Conclusiones
Exponer servicios en Docker Swarm de forma clara y confiable es clave para llevar tus contenedores a producción. Aquí verás cómo construir y publicar una imagen, crear un clúster con Play with Docker, desplegar un servicio con puerto publicado y réplicas, y comprobar el balanceo de peticiones entre contenedores usando hostname.
¿Qué haremos para exponer un servicio en Docker Swarm?
Vamos a convertir una app simple de Node.js que devuelve el hostname en un servicio accesible desde Internet. El flujo cubre desde la construcción de imagen hasta la verificación del tráfico entre réplicas.
- Construir una imagen con Dockerfile y etiquetarla.
- Publicar la imagen en un repositorio de imágenes accesible por todos los nodos.
- Iniciar un clúster con templates en Play with Docker (3 managers y 2 workers).
- Crear un servicio con --publish (-p) y --replicas 3.
- Verificar estado con docker service ps.
- Probar el endpoint público con curl.
- Entender que la respuesta muestra el ID del contenedor como hostname.
- Introducir el concepto de routing mesh de Docker Swarm.
¿Cómo preparar la imagen y el clúster?
Primero, aseguramos que la imagen esté disponible para todos los nodos del Swarm. Luego, levantamos el clúster con un template para simplificar la configuración.
¿Por qué la imagen debe estar en un repositorio accesible?
- Cada nodo del Swarm debe poder descargar la imagen.
- No basta construir localmente en un nodo.
- Publicar con docker push garantiza disponibilidad para managers y workers.
¿Cómo construir y publicar la imagen de hostname en Node.js?
- Construcción con etiqueta propia.
- Publicación al registry para que el clúster la obtenga.
docker build -t giubilarino/swarm/hostname .
docker push giubilarino/swarm/hostname
¿Cómo iniciar el Swarm con Play with Docker y templates?
- Abrir una nueva sesión y elegir el template de 3 managers y 2 workers.
- Verificar nodos activos.
docker node ls
¿Cómo desplegar, probar y entender el enrutamiento?
Crearemos el servicio con puerto publicado, varias réplicas y lo validaremos desde el enlace público que provee Play with Docker.
¿Cómo crear el servicio con puerto publicado y réplicas?
- Ejecutar en modo detach con -d para no imprimir toda la salida.
- Nombrar el servicio y publicar el puerto para acceso externo.
- Definir --replicas 3 desde el inicio.
docker service create -d \
--name app \
--publish 3000:3000 \
--replicas 3 \
giubilarino/swarm/hostname
- Ver estado de tareas mientras se descargan imágenes y arrancan contenedores.
docker service ps app
¿Cómo verificar el estado y acceder al endpoint público?
- Play with Docker muestra un enlace con “3000” asociado al servicio publicado.
- Ese enlace expone el servicio por puerto 80 para facilitar pruebas desde navegador.
- Probar con curl repetidas veces y observar respuestas distintas.
curl http://<enlace-publico>
- La respuesta incluye el hostname, que por defecto es el ID del contenedor. Verás valores diferentes porque el tráfico llega a distintas réplicas.
¿Qué diferencia hay con docker run -p y qué es routing mesh?
- Con docker run -p, el puerto del contenedor queda ligado al puerto del host específico.
- En Docker Swarm, con varios nodos y solo algunas réplicas, las peticiones no se pierden: el clúster enruta el tráfico hacia donde hay contenedores.
- Ese enrutamiento distribuido se denomina routing mesh en Docker Swarm. Es el mecanismo que permite acceder al servicio a través del clúster sin importar en qué nodo corran las tareas.
Conceptos y comandos clave integrados:
- docker build y docker push: preparar y publicar la imagen.
- docker node ls: validar managers y workers disponibles.
- docker service create, --publish (-p) y --replicas: definir acceso externo y escalado.
- docker service ps: observar preparación y ejecución de tareas.
- endpoint público de Play with Docker: acceso simple por navegador.
- hostname como ID del contenedor: identificación de la réplica que respondió.
- routing mesh: enrutamiento interno del Swarm para balancear peticiones.
¿Tienes dudas o quieres compartir cómo expones tus servicios en Docker Swarm? Deja un comentario con tu experiencia y preguntas.