Как настроить сеть с несколькими хостами с помощью docker swarm на нескольких удаленных машинах

Перед тем, как задать этот вопрос, я прочитал несколько статей и вопросы о stackoverflow, но не смог получить правильный ответ для своей настройки (возможно, на него уже дан ответ). Вот архитектура, с которой я изо всех сил пытался заставить ее работать.

  1. У меня есть три физических компьютера, и я хотел бы настроить рой Docker с многоузловой сетью, чтобы я мог запускать docker-compose.

Например:

  1. Компьютер 1 (Docker Swarm Manager и Consoul) (192.168.5.11)
  2. Машина 2 (узел Docker Swarm) (192.168.5.12)
  3. Компьютер 3 (узел Docker Swarm) (192.168.5.13)

И мне нужно запустить docker-compose с любой другой отдельной машины.

Я пробовал Статья о Docker, но в этой статье все настраивается на одной физической машине с использованием docker-machine и виртуального ящика. Как я могу добиться выше на трех удаленных машинах. Любая помощь приветствуется.


person Akram Yakubov    schedule 04.10.2016    source источник


Ответы (2)


В последнюю версию Docker встроен режим Swarm, так что вы не нужен Консул.

Чтобы настроить на своих устройствах, убедитесь, что все они имеют docker version версии 1.12 или выше, а затем вам просто нужно инициализировать рой и присоединиться к нему.

На машине 1 запустите:

docker swarm init --advertise-addr 192.168.5.11

Вывод из этого сообщит вам команду для запуска на машинах 2 и 3, чтобы присоединиться к ним в рое. У вас будет уникальный токен роя, и команда будет выглядеть примерно так:

docker swarm join \
--token SWMTKN-1-49nj1... \
192.168.5.11:2377

Теперь у вас есть 3-узловой рой. Вернувшись на компьютер 1, вы можете создать оверлейную сеть с несколькими хостами:

docker network create -d overlay my-app

Затем вы запускаете рабочие нагрузки в сети, развертывая сервисы. Если вы хотите использовать Compose с Swarm Mode, вам нужно использовать распределенные пакеты приложений, которые в настоящее время только в экспериментальной сборке Docker.

person Elton Stoneman    schedule 04.10.2016
comment
Спасибо Элтон за ответ. Я уже использую Compose и не хочу использовать распределенные пакеты приложений. Есть ли способ настроить композицию в режиме роя с виртуальными машинами на разных хостах? - person Akram Yakubov; 04.10.2016
comment
Compose еще не поддерживает режим роя — в основном compose просто делает docker run, поэтому, если вы его используете, все будет работать на одном узле в рое. На этот проект стоит обратить внимание — он использует Compose YAML и использует service create для работа в роевом режиме. - person Elton Stoneman; 04.10.2016

Я решил, что это нуждается в обновлении, так как файлы компоновки докеров поддерживаются в рое докеров.

  1. Инициализируйте рой на машине 1, используя

    docker swarm init --advertise-addr 192.168.5.11
    
  2. Присоединяйтесь к рою машин 2 и 3, используя

    docker swarm join \
    --token <swarm token from previous step> 192.168.5.11:2377 \
    --advertise-addr eth0
    
    • eth0 is the network interface on machines 2 & 3, & could be different based on your config. I found that without the --advertise-addr option, containers couldn't talk to each other across hosts.
  3. Чтобы перечислить все узлы в рое и увидеть их статус

    docker node ls
    
  4. После этого разверните стек (группу сервисов или контейнеров) из компоновочного файла.

    docker stack deploy -c <compose-file> my-app
    
    • This will create all the containers across multiple hosts
    • Чтобы перечислить сервисы (контейнеры) в роевом запуске docker service ls

См. документацию по docker Начало работы в режиме swarm

person hellosri    schedule 01.06.2018