できたもの
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)の数の過半数値を指定する必要があります。
過半数を指定しないとスプリットブレインが起きてしまう可能性があります。