Ir al contenido

HashiCorp Consul: qué es y cómo desplegarlo con Docker Compose

3 de noviembre de 2025 por
Ilimit Comunicacions S.L., Oscar Mas

Soy Òscar Mas y quiero enseñaros una herramienta que se llama Consul. Esta herramienta pertenece a la familia de productos de la empresa Hashicorp y seamos sinceros: no es de las herramientas más populares que tiene HashiCorp, pero creo que es una de las más útiles en determinados entornos. Algunas de las herramientas más conocidas que podemos encontrar de HashiCorp son:

  • Terraform: su utilidad es desplegar entornos mediante código (IaC)
  • Vagrant: creación de entornos de pruebas locales mediante máquinas virtuales
  • Vault: un buen lugar para guardar secretos
  • etc....

No quiero extenderme con los diferentes productos que tiene HashiCorp, ya que son bastantes y cada uno es muy diferente de los demás. Os aconsejo que le echéis un vistazo a los diferentes productos que ofrece esta empresa.

Qué es HashiCorp Consul

Como he comentado al principio, en este caso nos centraremos en Consul. Lo primero que debemos decir de Consul es que se encarga de la “gestión y descubrimiento de servicios en entornos distribuidos”. Creo que esta frase es demasiado complicada y me gustaría explicar qué es Consul de una manera más amena que con la típica definición de libro:

Consul es un sistema en el cual, cuando un servicio (servidor web, base de datos, access API, etc...) se da de alta, él mismo se registra en Consul. De tal manera que, si tres servidores web están funcionando y se han registrado en Consul, cuando le preguntes a Consul que te informe sobre ese servicio, Consul te responderá con los datos necesarios para acceder a los tres servidores (IP, puerto, etc.). 

En el caso de que un servidor deje de comunicarse con Consul, sea por decisión propia o por cualquier otro motivo, Consul dará de baja el servicio, y la siguiente consulta te informará de que solo hay dos servidores (en lugar de tres). 

Este sistema es muy útil, ya que puedes tener servicios en diferentes ubicaciones (Azure, On-Premise, AWS, etc.) o ir cambiando servicios, puertos, etc., y no tienes que informar a nadie, ya que los servicios se registran automáticamente en Consul y siempre debes preguntar a Consul para saber dónde están las cosas.

Laboratorio con Consul

Ahora que ya tenemos claro para qué sirve y cuál es la funcionalidad de Consul, vamos a realizar un pequeño laboratorio, en el cual:

  • Registraremos un servicio de forma manual
  • Registraremos un servicio de forma automática

Prerequisitos

Antes de comenzar, necesitaremos tener desplegados dos equipos. Uno hará las funciones de servidor de Consul y el otro lo utilizaremos como cliente

  • Hostname: consul → tiene las funcionalidades de servidor
  • Hostname: consul-client → actuará como cliente para registrar un servicio en Consul

Diagrama del laboratorio HashiCorp Consul con dos equipos: servidor consul y cliente consul-client.

Despliegue de Consul

Una vez claros los equipos que forman este laboratorio, debemos desplegar el sistema de Consul en el que hará las funciones de servidor (equipo: consul). En este caso, desplegaremos Consul con Docker Compose. La instalación se ha hecho lo más sencilla posible, ya que es un laboratorio para entender para qué sirve el producto Consul.

root@consul:~# cat /etc/docker-compose/docker-compose.yaml
services:

  consul:
    container_name: consul
    hostname: consul
    image: hashicorp/consul:1.19
    ports:
      - "8400:8400"
      - "8500:8500" # GUI/API
      - "8600:8600" # DNS server
    volumes:
     - /etc/localtime:/etc/localtime:ro

root@consul:~# docker compose -f /etc/docker-compose/docker-compose.yaml up -d

Una vez levantados los servicios vía Docker Compose, verificaremos que tenemos acceso a la GUI de Consul:

Interfaz web de HashiCorp Consul mostrando el servicio consul activo en la sección Services.

Registrar un servicio: de forma manual

En este caso registraremos un servicio de forma manual en Consul de la siguiente manera:

root@consul:~# docker exec -it consul consul services register -name=HTTP -address=http://web.ilba.cat -port=80

Una vez registrado, podremos ver en la GUI de Consul el resultado:



Registrar un servicio: de forma automática

En este caso utilizaremos un servidor web (nginx) y lo registraremos automáticamente en Consul:

root@consul-client:~# cat /etc/docker-compose/docker-compose.yaml
services:

  consul-registrator:
    container_name: consul-registrator
    hostname: consul-registrator
    image: gliderlabs/registrator:master
    volumes:
     - /var/run/docker.sock:/tmp/docker.sock
    command: "-ip=172.26.0.34 consul://172.26.0.33:8500"

  nginx:
    container_name: nginx
    hostname: nginx
    image: nginx:1.27-bookworm
    ports:
      - "80:80"
    volumes:
     - /etc/localtime:/etc/localtime:ro
    depends_on:
      - consul-registrator

root@consul-client:~# docker compose -f /etc/docker-compose/docker-compose.yaml up -d

Una vez registrado el servicio mediante Docker Compose en nuestro servidor de Consul, revisaremos a través de la GUI que se haya registrado correctamente nuestro servidor web:

Interfaz web de HashiCorp Consul mostrando el servicio Nginx registrado automáticamente con Registrator.

Consultas a Consul

No podíamos terminar el post sin enseñaros el resultado de una consulta realizada al servicio de Consul. Esta consulta se ha hecho al servicio que se ha creado de forma manual:

root@consul-client:~# curl -s http://172.26.0.33:8500/v1/agent/service/HTTP
{
    "ID": "HTTP",
    "Service": "HTTP",
    "Tags": [],
    "Meta": {},
    "Port": 80,
    "Address": "http://web.ilba.cat",
    "Weights": {
        "Passing": 1,
        "Warning": 1
    },
    "EnableTagOverride": false,
    "ContentHash": "b3279d556030b491",
    "Datacenter": "dc1"
}

También podríamos hacerle una consulta directa para que nos muestre la URL de un servicio en concreto:

root@consul-client:~# apt update && apt -y install jq

root@consul-client:~# curl -s http://172.26.0.33:8500/v1/agent/service/HTTP | jq -r '.Address'
http://web.ilba.cat

Conclusiones

HashiCorp Consul es una herramienta ideal para entornos con microservicios, contenedores y despliegues multi-nube, donde la flexibilidad y la automatización son esenciales.

Espero que este pequeño laboratorio os ayude a comenzar y a entender su funcionamiento básico, o al menos, que hayáis descubierto un nuevo producto.