概要
よく 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 でダッシュボードにアクセスすることができます
今回は 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 件のコメント:
コメントを投稿