kenju's blog

About Programming, Mathematics, Security and Blockchain

Circle CIで動かす用のDocker Image for Elasticsearchを作った

Circle CI 2.0 Betaに移行する中で必要だったので、Docker Imageを作成して公開した。


Circle CIなどのCI環境でElasticsearchを動かそうとすると、メモリが足りずにOOMエラーで落ちることがある。 そうした場合、vm.max_map_countオプションなどをいじってElasticsearchを動かせばいい。 しかし、Circle CIなどでは変更できるシステム設定に限りがある。



  • indices.fielddata.cache.size を低めに設定する
  • indices.breaker.fielddata.limit を低めに設定する


それらをまるっとまとめて公開したのが、先のDocker Image。


docker pull bitjourney/elasticsearch-ci


↓がelasticsearcy.ymlの全体像: "docker-ci-cluster"

# minimum_master_nodes need to be explicitly set when bound on a public IP
# set to 1 to allow single node clusters
# because a single node is enough for CI build
# Details:
discovery.zen.minimum_master_nodes: 1

# Disable X-Packs Security
# because it requires BASE authentication which is redundant for test
# Details: false

# Place an upper limit to the fielddata cache to avoid OOM
indices.fielddata.cache.size: 40%
# Checks to see whether the query size is too large before data is loaded
indices.breaker.fielddata.limit: 50%

Dockerfileは、ベースはElasticsearch社が公式で提供しているDocker Imageを利用。 先ほど定義した独自のelasticsearch.yml設定ファイルを用いるようにしている。 今のところバージョンを変更するようなオプションは提供していないので、必要があればPRください。

# fixed the version to ~5.3
# because Amazon Elasticsearch Service supports until 5.3

ADD elasticsearch.yml /usr/share/elasticsearch/config/

USER root
RUN chown elasticsearch:elasticsearch config/elasticsearch.yml

RUN elasticsearch-plugin install analysis-kuromoji

# elasticsearch cannot be executed by 'root' user for security reasons
# Details:
USER elasticsearch