試したことメモ.
概要
docker-consul を使ってDNSサーバーとして、他Dockerコンテナから参照したい.
sudoとか省略してます.
手順
docker-consul をPullして
$ docker pull progrium/consul
Runする
$ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 --name consul progrium/consul -server -bootstrap -ui-dir /ui
IPを取っておく.
$ DNS_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' consul)"
Consulに何か適当なServiceを登録してみる. 以下の内容で entity.json
ファイルを用意する.
Consul - /v1/catalog/register から持ってきた.
entity.json
{
"Datacenter": "dc1",
"Node": "foobar",
"Address": "192.168.10.10",
"Service": {
"ID": "redis1",
"Service": "redis",
"Tags": [
"master",
"v1"
],
"Port": 8000
},
"Check": {
"Node": "foobar",
"CheckID": "service:redis1",
"Name": "Redis health check",
"Notes": "Script based health check",
"Status": "passing",
"ServiceID": "redis1"
}
}
HTTP PUT で登録する.
$ curl -v -H "Content-Type: application/json" -X PUT -d @entity.json http://${DNS_IP}:8500/v1/catalog/register
Consul-containerをDNSに指定して、Dockerに入ってみる.
$ docker run -it --name consul_dns_test --dns ${DNS_IP} centos /bin/bash
pingしてみる. ちゃんと redis
をHost名として認識しているのが分かる.
$ ping redis
PING redis.service.consul (192.168.10.10) 56(84) bytes of data.
...