Запуск Consul в Docker контейнере

Скачайте готовый docker образ Consul с хаба:

docker pull consul:1.0.3

Создайте новый Volume для локальной базы Consul'а

docker volume create consul_data

Запустите Consul:

docker run -d --name consul --log-driver=journald -v consul_data:/consul/data -p 53:8600 -p 53:8600/udp -p 8500:8500 consul:latest agent -dev -node=node01 -client=0.0.0.0 -advertise=10.0.0.100 -data-dir=/consul/data

Параметры:

-dev - означает, что consul будет запущен в режиме отладки. Он нужен для быстрого старта consul с веб интерфейсом. Данный режим не подходит для продакшена, т.к. не пишет данные БД на диск.

-node=node01 - Устанавливает название ноды, на котором запущен consul. Имя должно быть уникальным в кластере

-client=0.0.0.0 - Биндит порт для HTTP, DNS и REST IP.

-advertise=10.0.0.100 - Будет выдавать указанный IP адрес при DNS запросе в Consul. Желательно указывать IP адрес сервера. 10.0.0.100 - это пример. Вы должны указать свой IP адрес. Если этот параметр не указан, то значение будет выбрано из параметра -bind. 

-bind=ip-address - IP адрес, который будет использоваться в Consul кластере, для обмена данными.

-data-dir=/consul/data - Устанавливает папку для БД consul.

-recursor 8.8.8.8 - Говорит куда отправлять обычные DNS запросы

8500 порт - Это порт HTTP и REST API

8600 порт - Это порт DNS. Будет проброшен на 53 порт хост машины

Остальные параметры описаны здесь.

Автоматический запуск Consul при старте системы

За автоматический запуск отвечает параметр Docker --restart=unless-stopped. Он означает перезапускать контейнер до тех пор, пока он не будет остановлен вручную. Более подробно о методах перезапуска Docker контейнеров здесь.

docker run -d --name consul -v consul_data:/consul/data --log-driver=journald --restart=unless-stopped -p 53:8600 -p 53:8600/udp -p 8500:8500 consul:1.0.3 consul agent -dev -node=node01 -client=0.0.0.0 -advertise=10.0.0.100 -data-dir=/consul/data -recursor 8.8.8.8

Отладка Consul

Вместо параметра -d, после слова run, можно указать -it --rm. Тогда consul будет запущен в интерактивном режиме, а после остановки, контейнер автоматически удалиться. Это полезно для отладки параметров запуска consul.

docker run -it --rm --name consul --log-driver=journald -v consul_data:/consul/data -p 53:8600 -p 53:8600/udp -p 8500:8500 consul:1.0.3 consul agent -dev -node=node01 -client=0.0.0.0 -advertise=10.0.0.100 -data-dir=/consul/data -recursor 8.8.8.8

Запуск и остановка Consul

Остановка контейнера:

docker stop consul

Запуск контейнера:

docker start consul

Удаление контейнера:

docker rm consul