Я создал 3 виртуальных машины с помощью докер-машины:
docker-machine create -d virtualbox manager1
docker-machine create -d virtualbox worker1
docker-machine create -d virtualbox worker2
это их ip:
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager - virtualbox Running tcp://192.168.99.102:2376 v1.12.6
worker1 - virtualbox Running tcp://192.168.99.100:2376 v1.13.0-rc5
worker2 - virtualbox Running tcp://192.168.99.101:2376 v1.13.0-rc5
затем docker-machine ssh manager1
и:
docker swarm init --advertise-addr 192.168.99.102:2377
затем к рою присоединяются worker1 и worker2.
Теперь я создал оверлейную сеть как:
docker network создать -d оверлей skynet
и развернул сервис в глобальном режиме (1 задача для узла):
docker service create --name http --network skynet --mode global -p 8200:80 katacoda/docker-http-serve
р
И фактически существует 1 контейнер (задача) для узла.
Теперь я хотел бы получить доступ непосредственно к моему виртуальному хосту ... или, по крайней мере, я хотел бы просматривать непосредственно контейнер моей службы, потому что я хотел бы разработать балансировщик нагрузки моей службы с помощью nginx. Для этого в моем файле конфигурации nginx я хотел бы указать на конкретный контейнер службы (т.е. теперь у меня есть 3 узла (1 менеджер и 2 рабочих) в глобальном режиме, поэтому у меня запущено 3 задачи -> i хочу выбрать один из этих 3-х контейнеров). Как я могу это сделать?
[править]: я могу указать на мои узлы роя, просто просматривая:, то есть:
192.168.99.102:8200
но есть еще внутренняя балансировка нагрузки. Я думал, что если я укажу на конкретный узел роя, я буду использовать контейнер внутри этого конкретного узла. Но пока ничего.
Если вы можете докер-сервис в HOST + GLOBAL в режиме можно использовать внешний балансировщик нагрузки. Потому что через службу ГЛОБАЛЬНЫЙ В этом режиме на каждой виртуальной машине, входящей в рой, есть только одна служебная задача (то есть контейнер). Из-за ВЕДУЩИЙ В этом режиме порт служебной задачи отображается на «хост» (в данном случае виртуальный хост: виртуальная машина). Таким образом, внешний балансировщик нагрузки (например, nginx) может перенаправлять входящие запросы на IP_VM: MAPPED_PORT. Надеюсь, все было ясно :)
В Docker есть балансировка входящей нагрузки. Это балансировщик нагрузки по умолчанию. вы можете использовать команду --endpoint-mode dnsrr для балансировки нагрузки DNS.
Если вы хотите использовать внешнюю балансировку нагрузки, например nginx. Сначала вы должны запустить контейнер Nginx, скопировать файл конфигурации в работающий контейнер и заменить старый. затем он укажет на опубликованный контейнер порт и хост.