Действительно, начиная с версии docker 1.12, режим docker swarm реализует собственные возможности обнаружения сервисов.
Настройка на одном хосте (тестирование)
Чтобы изучить его и, например, возможности балансировки нагрузки, вы можете сделать следующее:
#Setup your docker engine as a docker swarm manager
docker swarm init
#Create an nginx service
docker service create --name nginx --publish 80:80 nginx
Теперь вы можете перечислить службы, используя docker service ls
, и увидеть, что у вас есть служба nginx. Если вы сделаете docker ps
, вы увидите, что ваш контейнер не предоставляет какие-либо порты непосредственно машине, но если вы попытаетесь проверить свою службу, порт действительно отображается как порт службы. Таким образом, чтобы получить доступ к вашему контейнеру, вам нужно подключиться к адресу менеджера роя докеров и вашему опубликованному порту. Здесь, поскольку ваша машина является менеджером, вам потребуется доступ к localhost:80
или к вашей $DOCKER_HOST:80
, если вы используете докер-машину или эквивалентную ей.
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f9d93dbbce5 nginx:latest "nginx -g 'daemon off" About a minute ago Up About a minute 80/tcp, 443/tcp nginx.1.4zr3zacuw06ax9swuit4wbacd
> curl -X GET localhost:80
# Result showing nginx stuff
Если вы хотите обратиться к документации, у вас может быть много информации о ключе swarm. концептуальной странице и на странице сетки маршрутизации режима роя
При настройке нескольких хостов
Если вы используете установку с несколькими хостами, как при обычном использовании режима роя, у вас будет как минимум два механизма докеров, работающих в режиме роя: один в качестве рабочего, один в качестве менеджера. По умолчанию менеджер также является рабочим и может размещать контейнеры.
При взаимодействии с роем вы всегда будете напрямую разговаривать с менеджером роя докеров. Затем вы можете создать службу nginx, как указано выше, и служба будет создана либо на управляющем, либо на рабочем узле. Затем, чтобы получить доступ к вашему контейнеру через его порт, вам нужно будет получить доступ к узлу менеджера через его IP-адрес, который перенаправит запрос в контейнер, будь то рабочий узел или узел менеджера. Вы также можете масштабировать его и увидеть, как происходит балансировка нагрузки, поскольку он будет опрашивать оба контейнера в циклическом режиме.
Обнаружение внутренних служб
Начиная с версии Docker 1.12, также существует функция обнаружения внутренних служб, которая позволяет вам получать доступ к другим службам, используя свой служебный DNS.
Чтобы получить доступ к этой функции, вам необходимо создать оверлейную сеть и подключить к ней свой сервис.
docker network create --driver overlay mynetwork
docker service create --name nginx --network mynetwork nginx
docker service create --name testing --network mynetwork node sleep 10000 #node because it already has ping cmd
#locate your testing service's container, and ping the nginx host
docker exec -ti ping nginx
#See the magic happen
Опять же, многое есть в документации, в разделе Docker Engine > Manage a swarm. См. обзор режима Swarm
person
MagicMicky
schedule
24.11.2016