Обновить
Docker недавно анонсировал новый инструмент под названием Swarm for Docker orchestration.
роиться позволяет вам «присоединиться» к нескольким демонам-докерам: вы сначала создаете рой, запускаете менеджер роя на одной машине и заставляете демонов-докеров «присоединяться» к диспетчеру роя, используя идентификатор роя. Докер-клиент подключается к диспетчеру роя, как если бы это был обычный докер-сервер.
Когда контейнер запускается с Swarm, он автоматически назначается свободному узлу, отвечающему всем определенным ограничениям. Следующий пример взят из сообщения в блоге:
$ docker run -d -P -e constraint:storage=ssd mysql
Одно из поддерживаемых ограничений - это "node"
то, что вы можете привязать контейнер к определенному имени хоста. Рой также разрешает связи между узлами.
Во время тестирования у меня создалось впечатление, что Swarm еще не очень хорошо работает с томами в фиксированном месте (или, по крайней мере, процесс их связывания не очень интуитивно понятен), так что об этом следует помнить.
Swarm сейчас находится в стадии бета-тестирования.
До недавнего времени шаблон Ambassador был единственным встроенным в Docker подходом к обнаружению служб удаленного хоста. Этот шаблон все еще можно использовать, и он не требует каких-либо магических действий, кроме простого Docker, поскольку он состоит из одного или нескольких дополнительных контейнеров, которые действуют как прокси.
Кроме того, есть несколько сторонних расширений, которые делают Docker-совместимым с кластером. Сторонние решения включают:
- Подключение сетевых мостов Docker на двух хостах, легкие и различные решения существуют, но, как правило, с некоторыми оговорками
- Обнаружение на основе DNS, например, с помощью Skydock и SkyDNS
- Инструменты управления Docker, такие как Shipyard и инструменты оркестрации Docker. Подробный список см. В этом вопросе: Как масштабировать контейнеры Docker в производственной среде
ОБНОВЛЕНИЕ 3
Libswarm был переименован в swarm и теперь представляет собой отдельное приложение.
Вот демонстрация страницы github, которую можно использовать в качестве отправной точки:
ОБНОВЛЕНИЕ 2
Официальный подход теперь заключается в использовании libswarm см. Демонстрацию здесь
ОБНОВИТЬ
Есть хорошая идея для связи хостов openvswitch в докере с использованием того же подхода.
Чтобы разрешить обнаружение сервисов, существует интересный подход, основанный на DNS, который называется skydock .
Также есть скринкаст .
Это также хорошая статья, в которой используются те же кусочки головоломки, но с добавлением вланов сверху:
http://fbevmware.blogspot.it/2013/12/coupling-docker-and-open-vswitch.html
Исправление не имеет ничего общего с надежностью решения. На самом деле Docker - это лишь разновидность DSL для контейнеров Linux, и оба решения в этих статьях просто обходят некоторые автоматические настройки Docker и возвращаются непосредственно к контейнерам Linux.
Таким образом, вы можете безопасно использовать решения и подождать, чтобы сделать это более простым способом, когда Docker его реализует.
источник
Weave - это новая технология виртуальной сети Docker, которая действует как виртуальный коммутатор Ethernet через TCP / UDP - все, что вам нужно, это контейнер Docker, на котором работает Weave на вашем хосте.
Что здесь интересно
Это приводит к интересным сценариям вроде
Например, есть пример руководства по созданию многоузлового кластера Cassandra на вашем ноутбуке и нескольких облачных (EC2) хостах с двумя командами для каждого хоста. Я запустил кластер CoreOS с AWS CloudFormation, установил Weave на каждом в / home / core, а также виртуальную машину vagrant docker на моем ноутбуке и собрал кластер менее чем за час. Мой ноутбук защищен брандмауэром, но Weave, похоже, не возражал против этого, он просто подключается к своим узлам EC2.
источник
Обновить
Docker 1.12 содержит так называемый режим роя, а также добавляет
service
абстракцию. Вероятно, они недостаточно зрелы для каждого случая использования, но я предлагаю вам держать их под наблюдением. Режим роя, по крайней мере, помогает в настройке с несколькими хостами, что не обязательно упрощает связывание. Внутренний DNS-сервер Docker (начиная с 1.11) должен помочь вам получить доступ к именам контейнеров, если они хорошо известны, а это означает, что сгенерированные имена в контексте Swarm не будут так легко обрабатывать.С выпуском Docker 1.9 вы получите встроенную сеть с несколькими хостами . Они также предоставляют пример сценария для простой подготовки рабочего кластера.
Вам понадобится хранилище K / V (например, Consul), которое позволяет обмениваться состоянием между различными механизмами Docker на каждом хосте. Каждый механизм Docker необходимо настроить с этим хранилищем K / V, и затем вы можете использовать Swarm для подключения своих хостов.
Затем вы создаете новую оверлейную сеть следующим образом:
Теперь контейнеры можно запускать с сетевым именем в качестве параметра запуска:
Они также могут быть подключены к сети, когда они уже запущены:
Более подробная информация доступна в документации .
источник
В следующей статье хорошо описано, как подключать контейнеры докеров на нескольких хостах: http://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/
источник
Можно соединить несколько подсетей Docker вместе с помощью Open vSwitch или Tinc. Я подготовил Gists, чтобы показать, как это сделать:
Преимущество, которое я вижу в использовании этого решения вместо
--link
опции и шаблона посла, состоит в том, что я считаю его более прозрачным: нет необходимости в дополнительных контейнерах и, что более важно, нет необходимости открывать порты на хосте. На самом деле я думаю о--link
варианте временного взлома, прежде чем Docker получит более приятную историю о настройках с несколькими хостами (или несколькими демонами).Примечание: я знаю, что есть еще один ответ, указывающий на мой первый Gist, но у меня недостаточно кармы, чтобы редактировать или комментировать этот ответ.
источник
Как упоминалось выше, Weave определенно является жизнеспособным решением для связывания контейнеров Docker между хостами. Основываясь на моем собственном опыте работы с ним, его довольно просто настроить. Теперь у него также есть служба DNS, к которой вы можете обращаться к контейнеру по его именам DNS.
С другой стороны, есть Flannel от CoreOS и Opencontrail от Juniper для подключения контейнеров к хостам.
источник
Похоже, что docker swarm
1.14
позволяет:присвоение имени хоста контейнеру с использованием
--hostname
тега, но я не смог заставить его работать, контейнеры не могут пинговать друг друга по назначенным именам хостов.назначение услуг машине с помощью
--constraint 'node.hostname == <host>'
источник