Docker 컨테이너에서 Consul 클라이언트 배포
Docker 컨테이너에서 Consul 클라이언트 배포
Docker 컨테이너에서 Consul을 실행할 때 Consul 클라이언트를 배포하는 개요를 설명하는 문서예요. 단일 클라이언트부터 여러 클라이언트(Docker compose)까지 살펴봐요.
출처: 문서
본문
이 주제는 Docker 컨테이너에서 Consul을 실행할 때 Consul 클라이언트를 배포하는 개요를 제공해요.
Consul 클라이언트 배포 및 실행 (Deploy and run a Consul client)
하나 이상의 서버 에이전트를 배포한 후, 데이터센터에 조인하는 컨테이너화된 Consul 클라이언트 에이전트를 배포할 수 있어요. 분리(detached) 모드는 사용하지 마세요. 그래야 나중에 클라이언트 로그를 참조할 수 있어요.
다음 명령은 Docker 컨테이너를 배포하고 retry-join 매개변수에 Consul 서버의 호스트 이름 또는 IP 주소를 포함시켜 Consul 클러스터에 조인하도록 지시해요.
$ docker run --name=consul-client hashicorp/consul consul agent -node=consul-client -data-dir=/consul/data -retry-join=consul-server
==> Starting Consul agent...
Version: '1.21.2'
Build Date: '2025-06-18 08:16:39 +0000 UTC'
Node ID: '63a0c0ae-4762-2fa5-4b70-1cf526a1395b'
Node name: 'consul-client'
Datacenter: 'dc1' (Segment: '')
Server: false (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: -1, gRPC-TLS: -1, DNS: 8600)
Cluster Addr: consul-server (LAN: 8301, WAN: 8302)
Gossip Encryption: false
Auto-Encrypt-TLS: false
ACL Enabled: false
ACL Default Policy: allow
HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2
gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2
Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2
==> Log data will now stream in as it occurs:
2025-07-22T23:16:33.667Z [INFO] agent.client.serf.lan: serf: EventMemberJoin: consul-client consul-server
2025-07-22T23:16:33.667Z [INFO] agent.router: Initializing LAN area manager
2025-07-22T23:16:33.667Z [INFO] agent: Started DNS server: address=127.0.0.1:8600 network=udp
2025-07-22T23:16:33.667Z [INFO] agent: Started DNS server: address=127.0.0.1:8600 network=tcp
2025-07-22T23:16:33.667Z [INFO] agent: Starting server: address=127.0.0.1:8500 network=tcp protocol=http
2025-07-22T23:16:33.668Z [INFO] agent: started state syncer
2025-07-22T23:16:33.668Z [INFO] agent: Retry join is supported for the following discovery methods: cluster=LAN discovery_methods="aliyun aws azure digitalocean gce hcp k8s linode mdns os packet scaleway softlayer tencentcloud triton vsphere"
2025-07-22T23:16:33.668Z [INFO] agent: Joining cluster...: cluster=LAN
2025-07-22T23:16:33.668Z [INFO] agent: (LAN) joining: lan_addresses=["consul-server"]
2025-07-22T23:16:33.668Z [INFO] agent: Consul agent running!
##...
2022-12-15T18:59:46.454Z [INFO] agent: Synced node info
새 터미널 세션에서 Consul 클라이언트 컨테이너 안의 consul members 명령을 실행해 에이전트가 데이터센터에 조인했는지 확인해요.
$ docker exec consul-client consul members
Node Address Status Type Build Protocol DC Partition Segment
consul-server 172.17.0.2:8301 alive server 1.21.2 2 dc1 default <all>
consul-client 172.17.0.3:8301 alive client 1.21.2 2 dc1 default <default>
출력은 클라이언트가 클러스터에 조인했고 서비스 정의를 받을 준비가 되었음을 확인해 줘요.
다중 에이전트 Consul 배포 (Multi-agent Consul deployment)
여러 클라이언트 컨테이너로 다중 에이전트 Consul 배포를 시작할 수 있어요. 다음 예시는 Consul 서버 consul-server1에 연결하려는 세 개의 Consul 클라이언트 컨테이너를 시작하는 Docker compose 파일을 사용해요. Consul 서버 클러스터 시작에 대한 자세한 내용은 Docker에서 Consul 서버 에이전트 배포를 참고하세요.
consul-clients.yml
version: '3.7'
services:
consul-client1:
image: hashicorp/consul:1.21.3
container_name: consul-client1
restart: always
networks:
- consul
command: "agent -node=consul-client1 -client=0.0.0.0 -data-dir='/consul/data' -retry-join=consul-server1"
consul-client2:
image: hashicorp/consul:1.21.3
container_name: consul-client2
restart: always
networks:
- consul
command: "agent -node=consul-client2 -client=0.0.0.0 -data-dir='/consul/data' -retry-join=consul-server1"
consul-client3:
image: hashicorp/consul:1.21.3
container_name: consul-client3
restart: always
networks:
- consul
command: "agent -node=consul-client3 -client=0.0.0.0 -data-dir='/consul/data' -retry-join=consul-server1"
networks:
consul:
driver: bridge
다음 명령으로 클러스터를 시작할 수 있어요:
$ docker-compose -f consul-clients.yml up -d
[+] Running 4/4
✔ Network docker_consul Created 0.0s
✔ Container consul-client3 Started 0.2s
✔ Container consul-client1 Started 0.2s
✔ Container consul-client2 Started 0.2s
이 명령은 세 개의 Consul 클라이언트 컨테이너를 분리 모드로 시작해요. 각 클라이언트는 consul-server1에 재연결을 시도하며 클러스터에 조인하도록 구성돼요.
어느 클라이언트 컨테이너 안에서든 consul members 명령을 실행해 클러스터 상태를 확인할 수 있어요:
$ docker exec consul-client1 consul members
Node Address Status Type Build Protocol DC Partition Segment
consul-server1 172.19.0.2:8301 alive server 1.21.3 2 dc1 default <all>
consul-client1 172.19.0.3:8301 alive client 1.21.3 2 dc1 default <default>
consul-client2 172.19.0.4:8301 alive client 1.21.3 2 dc1 default <default>
consul-client3 172.19.0.5:8301 alive client 1.21.3 2 dc1 default <default>