Grałem z docker-compose
i splatałem projekt ze strony centrum dokującego.dokowanie-dokowanie i dokowanie - jak dynamicznie dodawać węzły i czy można je przetłumaczyć za pomocą usług
Jedną z rzeczy, która mi umyka, jest to, jak mogę skalować poszczególne usługi (dodając więcej instancji) I czy istniejące instancje w jakiś sposób informowały o tych nowych instancjach.
Przykładowo kanoniczna docker-compose
przykład stanowi klaster:
- REDIS węzła
- pyton (kolba) węzeł
- haproxy równoważenia obciążenia
utworzyć klaster, a wszystko działa dobrze, jednak próbuję dodać inny węzeł do klastra:
$ 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
To działało ... Ale zobaczymy co węzeł haproxy widzi klastra (docker-machine
modyfikuje plik „/ 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
Gdybym restart całego klastra za pomocą docker-compose
że węzeł powinien mieć to /etc/hosts
zaludnionych ale teraz wydaje się, że uszkodzony nawet dalej:
$ 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
Tak na zakończenie czy istnieje lepszy sposób to zrobić (rozdzielczość i Discovery)? Czy istnieje inny mądrzejszy sposób niż tylko aktualizacja plików hostów? Jaka jest tutaj najlepsza praktyka?
Czy zaglądasz do Kubernetes? Automatycznie obsługuje to wszystko dla ciebie. – kichik
Nie. Próbuję zrobić to w całości używając podstawowych funkcji dokowania, Kubernetes/Mesos są poza zakresem. –
Jaką wersję okna dokowanego i okna dokowanego używasz? Czy Twój "docker-compose.yml" zaczyna się od 'version 2'? – VonC