2018年9月5日水曜日

ElasticSearch と Kibana を Docker 上に個別に立てて連携する

概要

よく docker-compose.yaml を使って同一ホスト上に ElasticSearch と Kibana を構築例があります
ただその場合だとそれぞれを別のホストでコンテナとして立ち上げたい場合に困ります
今回はそれぞれのコンテナを別のホストに構築することを想定して立ち上げて連携する方法を紹介します

環境

  • macOS 10.13.6
  • docker 18.06.0-ce
  • ElasticSearch (docker.elastic.co/elasticsearch/elasticsearch:6.4.0)
  • Kibana (docker.elastic.co/kibana/kibana:6.2.4)

ElasticSearch を立ち上げる

  • docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.4.0

これで OK です
ホストマシンの IP の 9200 番にアクセスすることができます

  • curl http://192.168.99.1:9200/_cat/health

基本はここがエンドポイントになるので Kibana もここにアクセスします

Kibana を立ち上げる

  • docker run -d -e ELASTICSEARCH_URL=http://192.168.99.1:9200 -p 5601:5601 docker.elastic.co/kibana/kibana:6.2.4

ポイントは ELASTICSEARCH_URL でホストの IP で公開した ElasticSearch を指定するところです
これで Kibana を立ち上げるとホストの IP の 5601 でダッシュボードにアクセスすることができます

http://192.168.99.1:5601/

今回は ElasticSearch も Kibana も同一 IP のホストで run しましたが、それぞれ別のホストで立ち上げても問題なく動作します

今回の構成のポイント

ElasticSearch と Kibana の通信はコンテナ間で直接行われるわけではなく、一旦ホストマシンを介して行われることになります
docker-compose の link 機能などを使うとわざわざホストにポートを公開することなく ElasticSearch と Kibana 間で通知することができます

ただ、その場合は同一ホストもしくはホストを跨いでもコンテナ間で通信できるように Swarm なりを構築する必要があります
しかし今回の構成であればホストの IP に対してアクセスできればいいだけなので Swarm を組んだりする必要はなくホスト間で単純に通信できれば OK なだけです

ElasticSearch はいろいろな場所から参照される可能性があるので今回の構成のようにホストの IP で通信もしくは LB 経由で通信できるようになっている便利かなと思います

最後に

Docker 上で ElasticSearch と Kibana を別のホストで動かす方法を紹介しました
わざわざ Swarm を組んだり docker-compose を作成する必要がないです
もちろん docker-compose で一元管理したいと言う場合はそれでも問題ないですが ElasticSearch はスケールアウトも考慮すると個別のホスト (またはクラスタ) で管理したくなるのが心情かなと思います

参考サイト

0 件のコメント:

コメントを投稿