docker群和泊坞窗 – 组成如何dynamic地添加节点并使它们可以由服务parsing

我一直在玩docker-compose并在docker中心网站上拼凑了一个项目。

有一件事情我不知道如何扩展个别服务(通过添加更多的实例),并让现有的实例知道这些新的实例。

例如,典型的docker-compose示例包括一个簇:

  • redis节点
  • python(瓶)节点
  • haproxy负载均衡器

我创build群集,一切工作正常,但我试图添加另一个节点到群集:

 $ docker-compose scale web=2 Creating and starting 2 ... done $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e83f6ed94546 packetops/web:latest "/bin/sh -c 'python /" 6 minutes ago Up About a minute 80/tcp swarm-slave/1_web_2 40e01a615a2f tutum/haproxy "python /haproxy/main" 7 minutes ago Up About a minute 443/tcp, 1936/tcp, 172.16.186.165:80->80/tcp swarm-slave/1_lb_1 f16357a28ac4 packetops/web:latest "/bin/sh -c 'python /" 7 minutes ago Up About a minute 80/tcp swarm-slave/1_lb_1/1_web_1,swarm-slave/1_lb_1/web,swarm-slave/1_lb_1/web_1,swarm-slave/1_web_1 8dd59686e7be redis "/entrypoint.sh redis" 8 minutes ago Up About a minute 6379/tcp swarm-slave/1_redis_1,swarm-slave/1_web_1/1_redis_1,swarm-slave/1_web_1/redis,swarm-slave/1_web_1/redis_1,swarm-slave/1_web_2/1_redis_1,swarm-slave/1_web_2/redis,swarm-slave/1_web_2/redis_1 

这工作…但让我们看看haproxy节点看到的集群( docker-machine修改'/ etc / hosts'文件)

 # docker exec -i -t swarm-slave/1_lb_1 /bin/bash -c 'cat /etc/hosts' 172.17.0.4 40e01a615a2f 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.3 1_web_1 f16357a28ac4 172.17.0.3 web f16357a28ac4 1_web_1 172.17.0.3 web_1 f16357a28ac4 1_web_1 

如果我要使用docker-compose重新启动整个集群,那么该节点应该已经填充了/etc/hosts但是现在似乎已经进一步破坏了:

 $ docker-compose up --force-recreate -d Recreating 1_redis_1 Recreating 1_web_2 Recreating 1_web_1 Recreating 1_lb_1 ERROR: Unable to find a node fulfilling all dependencies: --link=1_web_1:1_web_1 --link=1_web_1:web --link=1_web_1:web_1 --link=1_web_2:1_web_2 --link=1_web_2:web --link=1_web_2:web_2 $ docker-compose up -d 1_redis_1 is up-to-date 1_web_1 is up-to-date 1_web_2 is up-to-date Starting 40e01a615a_1_lb_1 $ docker exec -i -t swarm-slave/40e01a615a_1_lb_1 /bin/bash -c 'cat /etc/hosts' 172.17.0.4 40e01a615a2f 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 

所以最后是否有一个更聪明的方法来做到这一点(解决scheme和发现)? 有没有更好的方法,而不仅仅是更新主机文件? 这里最好的做法是什么?

Docker刚刚发布了一个内置编排的新版本:

https://blog.docker.com/2016/06/docker-1-12-built-in-orchestration/

你可以用以下方法启动一个新的Swarm集群:

 docker swarm init 

并创build服务:

 docker service create –name frontend –replicas 5 -p 80:80/tcp nginx:latest 

所创build的服务将进行负载平衡,您可以对其进行扩展和缩减:

 docker service scale frontend=X 
Interesting Posts