在码头 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