Связь контейнеров Docker с помощью Consul

Я читал об обнаружении сервисов для Docker с помощью Consul, но я не могу этого понять.

Не могли бы вы мне объяснить, как я могу запустить два контейнера docker, распознать из первого контейнера хост второго с помощью Consul и отправить ему какое-то сообщение?


person qBic    schedule 02.03.2015    source источник
comment
Вам помог мой ответ?   -  person jeremyjjbrown    schedule 22.07.2015


Ответы (1)


Вам нужно будет запустить Consul Agent в клиентском режиме внутри каждого контейнера Docker. Каждому Docker-контейнеру потребуется файл Consul Service Definition, чтобы агент знал о необходимости рекламы. это обслуживание серверов Consul.

Они выглядят так:

{
  "service": {
    "name": "redis",
    "tags": ["master"],
    "address": "127.0.0.1",
    "port": 8000,
    "checks": [
      {
        "script": "/usr/local/bin/check_redis.py",
        "interval": "10s"
      }
    ]
  }
}

И Проверка работоспособности службы для мониторинга работоспособности службы. Что-то вроде этого:

{
  "check": {
    "id": "redis",
    "name": "Redis",
    "script": "/usr/local/bin/check_redis_ping_returns_pong.sh",
    "interval": "10s"
  }
}

В другом контейнере Docker ваш код найдет службу Redis либо через DNS, либо через HTTP API серверов Consul.

dig @localhost -p 8500 redis.service.consul

curl $CONSUL_SERVER/v1/health/service/redis?passing
person jeremyjjbrown    schedule 26.06.2015
comment
Когда вы говорите внутри каждого контейнера Docker, вы действительно имеете в виду, что другой контейнер приложения также должен запускать агент консула? Я не думаю, что это необходимо и противоречит принципу отдельных контейнеров для отдельных задач. - person Vince Bowdren; 11.11.2016
comment
@VinceBowdren зависит от того, как вы хотите это сделать и что вы считаете задачей. Если вам лучше запустить консул на подчиненном устройстве или в другом контейнере и выставить его агента в контейнер, это нормально. но регистрация службы и проверка работоспособности связаны с контейнером, в котором выполняется двоичный файл приложения, поэтому я бы предпочел перемещать эти файлы в контейнере, для которого они созданы. - person jeremyjjbrown; 11.11.2016