2016-01-25 36 views
14

Ho giocato con docker-compose e ho messo insieme un progetto dal sito web del docker hub.docker-swarm e docker-comporre come aggiungere dinamicamente nodi e risolverli dai servizi

Una cosa che mi sfugge è il modo in cui posso scalare i singoli servizi (aggiungendo più istanze) e avere istanze esistenti rese in qualche modo consapevoli di quelle nuove istanze.

Ad esempio, la canonica docker-compose esempio comprende un gruppo di:

  • nodo redis
  • pitone (pallone) nodo
  • haproxy bilanciamento del carico

Creo la cluster e tutto funziona bene, tuttavia cerco di aggiungere un altro nodo al cluster:

$ 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 

che ha lavorato ... Ma permette di vedere ciò che il nodo haproxy vede del cluster (docker-machine modifica il 'etc// padroni di casa' del file)

# 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 

Se dovessi riavviare l'intero cluster utilizzando docker-compose che nodo dovrebbe avere è /etc/hosts popolata ma ora sembra aver rotto ancora di più:

$ 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 

Quindi, in conclusione c'è un modo più intelligente per fare questo (risoluzione e la scoperta)? C'è un altro modo più intelligente anziché aggiornare semplicemente i file degli host? Qual è la migliore pratica qui?

+0

Hai guardato in Kubernetes? Gestisce automaticamente tutto ciò che per te. – kichik

+0

No. Sto provando a farlo interamente utilizzando le funzioni della finestra mobile di base, Kubernetes/Mesos sono fuori dall'ambito. –

+0

Quale versione di docker e docker-comporre stai usando? Il tuo 'docker-compose.yml' inizia con' versione 2'? – VonC

risposta

1

Docker appena rilasciato una nuova versione con costruito in orchestrazione:

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

È possibile iniziare una nuova Swarm cluster con:

docker swarm init 

E creare servizi:

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

I servizi creati saranno bilanciati dal carico e si può sca su e giù:

docker service scale frontend=X 
+0

Più una richiesta di prodotto di una domanda ;-) –