Skip to Content

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

3 November 2025 by
Ilimit Comunicacions S.L., Oscar Mas

Soc Òscar Mas i us vull ensenyar una eina que es diu Consul. Aquesta eina és una eina de la família de l'empresa Hashicorp i hem de ser sincers: no és de les eines més populars que te Hashicorp, però crec que és de les més útils en determinats entorns. Algunes de les eines famoses que ens podem trobar de Hashicorp poden ser:

  • Terraform: la seva utilitat és desplegar entorns via codi (IaC)
  • Vagrant: creació d'entorns de proves en local mitjançant màquines virtuals
  • Vault: un bon lloc per guardar secrets
  • etc....

No em vull estendre amb els diferents productes que te Hashicorp, ja que són bastants i cadascun és molt diferent dels altres. Us aconsello que li doneu una ullada als diferents productes que ens ofereix aquesta empresa.

Què és HashiCorp Consul

Com he comentat al principi, en aquest cas ens centrarem en Consul. El primer que hem de dir de Consul, és que fa de "gestió i descobriment de serveis en entorns distribuïts". Crec que aquesta frase és massa complicada i m'agradaria explicar que és Consul, d'una manera més amena que amb la típica frase de llibre:

Consul és un sistema en el qual, quan un servei (servidor web, base de dades, access API, etc...) es dona d'alta, ell mateix es registra en Consul. De tal manera que si tres servidors webs estan funcionant i s'han registrat a Consul. Quan li preguntis a Consul que t'informi d'aquest servei, Consul et contestarà amb les dades necessàries per accedir als tres servidors (IP, port, etc...)

En el cas que un servidor deixi de comunicar-se amb Consul, sigui per decisió pròpia o per qualsevol altre motiu, ell donarà de baixa el servei i la següent consulta, t'informarà que només hi ha dos servidors (en comptes de tres). 

Aquest sistema és molt útil, ja que pots tenir serveis en diferents ubicacions (Azure, On-Premise, AWS, etc....) o anar canviant de serveis, ports, etc.... i no has d'informar a ningú, ja que els serveis es registren automàticament a Consul i sempre li has de preguntar a Consul per saber on estan les coses.

Laboratori amb Consul

Ara que ja tenim clar per a què serveix i quina és la funcionalitat de Consul, el que farem és un petit laboratori, en el qual:

  • Registrarem un servei de forma manual
  • Registrarem un servei de forma automàtica

Prerequisits

Abans de començar, necessitarem tenir desplegats dos equips. Un farà les funcionalitats de servidor de Consul i l'altra el farem servir de client

  • Hostname: consul -> té les funcionalitats de servidor
  • Hostname: consul-client -> farà de client per registrar un servei a Consul

Diagrama del laboratori HashiCorp Consul amb dos equips: servidor consul i client consul-client

Desplegament de Consul

Un cop clar els equips que formen aquest laboratori, hem de desplegar el sistema de Consul en el que farà les funcionalitats de servidor (equip: consul). En aquest cas, desplegarem Consul amb Docker Compose. La instal·lació s'ha fet el més senzill possible, ja que és un laboratori per entendre per què serveix el producte: 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

Un cop aixecat els serveis via Docker Compose, revisaren que tenim accés a la GUI de Consul:

Interfície web de HashiCorp Consul mostrant el servei consul actiu a la secció Services.

Registrem un servei: de forma manual

En aquest cas registrarem un servei de forma manual a Consul de la següent manera:

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

Un cop registrat, podrem veure en la GUI de Consul el resultat:



Registrem un servei: de forma automàtica

En aquest cas farem servir un servidor web (nginx) i el registrarem en Consul de forma automàtica:

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

Un cop registrat el servei via Docker Compose al nostre servidor de Consul, revisarem via GUI que s'hagi registrat correctament el nostre servidor web:

Interfície web de HashiCorp Consul mostrant el servei Nginx registrat automàticament amb Registrator.

Consultes a Consul

No podíem acabar el post, sense ensenyar-vos el resultat d'una consulta feta al servei de Consul. Aquesta consulta s'ha fet al servei que s'ha creat de manera 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"
}

També li podríem fer una consulta directa, perquè ens mostri l'URL d'un servei en concret:

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

Conclusions

HashiCorp Consul és una eina ideal per a entorns amb microserveis, contenidors i desplegaments multi-núvol, on la flexibilitat i l’automatització són essencials.

Espero que aquest petit laboratori us ajudi a començar i a entendre el seu funcionament bàsic o com a mínim hàgiu descobert un nou producte.