Posted at

ElasticsearchとKibanaをDockerでサクッとインストールする(シングルノード・マルチノード)

More than 1 year has passed since last update.


できたもの

https://github.com/romiogaku/docker-es


利用方法


シングルノード


起動

$ docker-compose -f docker-compose.yml up -d


停止

$ docker-compose -f docker-compose.yml down

Elasticssearch: localhost:9200

Kibana: localhost:5601

で起動します。


3ノード


起動

$ docker-compose -f docker-compose-cluster.yml up -d


停止

$ docker-compose -f docker-compose-cluster.yml down

Elasticssearch node1: localhost:9200

Elasticssearch node2: localhost:9201

Elasticssearch node3: localhost:9202

Kibana: localhost:5601

で起動します。


docker-compose.yml

シングルノード用のものです。

version: '3'

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
ports:
- 9200:9200
volumes:
- ./docker/elasticsearch/data:/usr/share/elasticsearch/data
- ./docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
networks: [elastic]
environment:
- discovery.type=single-node
kibana:
image: docker.elastic.co/kibana/kibana-oss:6.3.2
ports:
- 5601:5601
networks: [elastic]
networks:
elastic:

KibanaはX-Packを利用しない前提で oss imageを指定しています。

Elasticsearchのデータ永続化のためにホストの./docker/elasticsearch/dataとゲストの/usr/share/elasticsearch/dataをマウントしています。

configファイルも柔軟に変えられるようelasticsearch.ymlもマウントしています。


elasticsearch.yml

シングルノード用のものです。

cluster.name: "docker-cluster"

network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1


docker-compose-cluster.yml

3ノード構成のものです。

version: '3'

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
container_name: elasticsearch
environment:
- node.name=node1
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
- "discovery.zen.ping.unicast.hosts=elasticsearch,elasticsearch2,elasticsearch3"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./docker/elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
networks: [elastic]
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
container_name: elasticsearch2
environment:
- node.name=node2
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
- "discovery.zen.ping.unicast.hosts=elasticsearch,elasticsearch2,elasticsearch3"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./docker/elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9201:9200
networks: [elastic]
elasticsearch3:
image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
container_name: elasticsearch3
environment:
- node.name=node3
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
- "discovery.zen.ping.unicast.hosts=elasticsearch,elasticsearch2,elasticsearch3"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./docker/elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9202:9200
networks: [elastic]
kibana:
image: docker.elastic.co/kibana/kibana-oss:6.3.2
ports:
- 5601:5601
networks: [elastic]
networks:
elastic:

基本は公式に書いてある2ノード構成のdocker-compose.ymlを参考にしています。

自分の環境だと ES_JAVA_OPTS=-Xms256m -Xmx256m"に下げないと起動失敗しました。


elasticsearch-cluster.yml

3ノード構成のものです。

cluster.name: "docker-cluster"

network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 2

クラスタ構成の最小マスタノード数を2にしています。

これはクラスタ内のmaster-eligibleノード(マスターノードになりうる役割を持つノード。デフォルトで全ノードがmaster-eligible)の数の過半数値を指定する必要があります。

過半数を指定しないとスプリットブレインが起きてしまう可能性があります。