在碼頭 1.12 群中執行領事

這依賴於官方的 consul docker 映象,在 Docker 1.12 中使用新的 swarm 模式在 docker swarm 中以群集模式執行 consul。此示例基於 http://qnib.org/2016/08/11/consul-service/ 。簡單地說,這個想法是使用兩個相互通訊的 docker swarm 服務。這解決了你無法預先了解各個領事容器的 ips 並允許你依賴 docker swarm 的 dns 的問題。

這假設你已經有一個執行的 docker 1.12 swarm 叢集,其中至少有三個節點。

你可能希望在 docker 守護程式上配置日誌驅動程式,以便可以檢視發生的情況。我使用了 syslog 驅動程式:在 dockerd 上設定 --log-driver=syslog 選項。

首先為領事建立一個覆蓋網路:

docker network create consul-net -d overlay

現在只用 1 個節點引導叢集(預設 –replicas 為 1):

docker service create --name consul-seed \
  -p 8301:8300 \
  --network consul-net \
  -e 'CONSUL_BIND_INTERFACE=eth0' \
  consul agent -server -bootstrap-expect=3  -retry-join=consul-seed:8301 -retry-join=consul-cluster:8300

你現在應該有一個節點叢集。現在提出第二項服務:

docker service create --name consul-cluster \
  -p 8300:8300 \
  --network consul-net \
  --replicas 3 \
  -e 'CONSUL_BIND_INTERFACE=eth0' \
  consul agent -server -retry-join=consul-seed:8301 -retry-join=consul-cluster:8300 

你現在應該有一個四節點的 consul 叢集。你可以通過在任何 docker 容器上執行來驗證這一點:

docker exec <containerid> consul members