Docker에서 Consul 서버 에이전트 배포
Docker에서 Consul 서버 에이전트 배포 (Deploy Consul server agent on Docker)
이 주제에서는 Docker 컨테이너에서 Consul을 실행할 때 Consul 서버를 배포하는 방법에 대한 개요를 다루고 있어요.
출처: 문서
본문
이 주제에서는 Docker 컨테이너에서 Consul을 실행할 때 Consul 서버를 배포하는 방법에 대한 개요를 제공합니다.
Consul 서버 배포 및 실행 (Deploy and run a Consul server)
명령줄에서 Consul 서버 컨테이너를 시작하고 Consul 에이전트를 구성할 수 있습니다.
다음 예제는 Docker 컨테이너를 시작하고 Consul 서버 에이전트를 구성하고 UI를 활성화하는 consul agent -server 하위 명령을 포함합니다.
$ docker run --name=consul-server -d -p 8500:8500 -p 8600:8600/udp hashicorp/consul consul agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0 -data-dir=/consul/data
컨테이너를 분리 모드 -d로 시작했으므로 프로세스는 백그라운드에서 실행됩니다. 또한 로컬 머신에 포트 매핑을 설정하고 에이전트의 클라이언트 인터페이스를 0.0.0.0에 바인딩했습니다. 이 구성은 로컬 머신에서 직접 Consul 데이터센터로 작업하고 localhost를 통해 Consul의 UI와 DNS에 액세스할 수 있게 합니다. 마지막으로 Docker의 기본 bridge 네트워크를 사용합니다.
참고로 Consul Docker 이미지는 기본적으로 /consul/config에 Consul 구성 디렉터리를 설정합니다. 에이전트는 해당 디렉터리에 배치된 모든 구성 파일을 로드합니다.
구성 디렉터리는 볼륨으로 노출되지 않으며 데이터를 유지하지 않습니다. Consul은 시작 중에만 사용하며 거기에 상태를 저장하지 않습니다.
또한 CONSUL_LOCAL_CONFIG 환경 변수로 JSON 형식의 Consul 구성을 제출할 수도 있습니다. 이 방법은 볼륨을 마운트하거나 파일을 컨테이너에 복사할 필요가 없습니다. 자세한 내용은 Consul on Docker 문서를 참조하세요.
서버 IP 주소 발견 (Discover the server IP address)
Consul 서버의 IP 주소를 찾으려면 consul-server 컨테이너 내부에서 consul members 명령을 실행하세요.
$ docker exec consul-server consul members
Node Address Status Type Build Protocol DC Partition Segment
server-1 172.17.0.2:8301 alive server 1.21.2 2 dc1 default <all>
다중 노드 Consul 클러스터 (Multi-node Consul cluster)
프로덕션 환경을 더 가깝게 모방한 여러 서버 컨테이너로 Consul 클러스터를 시작할 수 있습니다. 다음 예제는 Docker compose 파일을 사용하여 세 개의 Consul 서버 컨테이너를 시작합니다.
consul-cluster.yml
version: '3.7'
services:
consul-server1:
image: hashicorp/consul:1.21.3
container_name: consul-server1
restart: always
networks:
- consul
ports:
- "8500:8500"
- "8600:8600/tcp"
- "8600:8600/udp"
command: "agent -server -ui -client=0.0.0.0 -data-dir='/consul/data' -node=consul-server1 -retry-join=consul-server2 -bootstrap-expect=3"
consul-server2:
image: hashicorp/consul:1.21.3
container_name: consul-server2
restart: always
networks:
- consul
command: "agent -server -ui -data-dir='/consul/data' -node=consul-server2 -retry-join=consul-server1 -bootstrap-expect=3"
consul-server3:
image: hashicorp/consul:1.21.3
container_name: consul-server3
restart: always
networks:
- consul
command: "agent -server -ui -data-dir='/consul/data' -node=consul-server3 -retry-join=consul-server1 -bootstrap-expect=3"
networks:
consul:
driver: bridge
다음 명령으로 클러스터를 시작할 수 있습니다:
$ docker-compose -f consul-cluster.yml up -d
[+] Running 4/4
✔ Network docker_consul Created 0.0s
✔ Container consul-server3 Started 0.2s
✔ Container consul-server1 Started 0.2s
✔ Container consul-server2 Started 0.2s
이 명령은 세 개의 Consul 서버 컨테이너를 분리 모드로 시작합니다. 각 서버는 -bootstrap-expect=3 플래그로 지정된 클러스터에 세 개의 서버가 있을 것으로 기대하도록 구성됩니다.
서버 컨테이너 중 하나 내부에서 consul members 명령을 실행하여 클러스터 상태를 확인할 수 있습니다:
$ docker exec consul-server1 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-server2 172.19.0.4:8301 alive server 1.21.3 2 dc1 default <all>
consul-server3 172.19.0.3:8301 alive server 1.21.3 2 dc1 default <all>
Docker compose 파일에서 로컬 머신의 포트 8500이 consul-server1 컨테이너로 전달되므로 웹 브라우저에서 http://localhost:8500로 이동하여 Consul UI에 액세스할 수도 있습니다.