LoginSignup
6
4

More than 3 years have passed since last update.

Docker Build で Elasticsearch に初期データを投入しておきたい 🐳

Posted at

はじめに

「ああ、、まちがえた...」
「やり直しや...」
「コンテナ再起動して、初期データ入れなおさなきゃ...」
Elasticsearchを開発で使っていると、こんなことがよくあります。

そんなあなたに、Dockerで使う開発環境用のElasticsearchに初期データを投入しておこうよ、という小ネタです。

環境

  • macOS Catalina
  • docker desktop 2.5.0.1
  • Elasticsearch 7.10
  • kibana 7.10 (おまけ)

データサンプル

Elasticsearch公式にある、シェイクスピアのデータを持ってきます。

Loading sample data | Kibana Guide [7.1] | Elastic

流れ

Dockerfile の中でデータを投入します。  

  1. JSONファイルをCOPY
  2. wait-for-it.shをCOPY
  3. Elascticsearchの起動を待って、bulkでデータ投入

です。

wait-for-it.sh というのは、サービスの起動を監視してくれるシェルスクリプトです。
Dockerの公式ドキュメントでも紹介されています。

Control startup and shutdown order in Compose | Docker Documentation

ファイルたち

githubにファイルを置いております。
jrfk/docker-es-entry-initial-data

Dockerfile

こんな感じです。


FROM docker.elastic.co/elasticsearch/elasticsearch:7.10.0

## data
RUN mkdir /data && chown -R elasticsearch:elasticsearch /data
COPY ./data/ /data/
RUN chmod 755 /data/*

## wait-for-it
ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /utils/wait-for-it.sh
RUN chown -R elasticsearch:elasticsearch /utils/wait-for-it.sh && chmod 755 /utils/wait-for-it.sh

## RUN
RUN echo 'discovery.type: single-node' >> config/elasticsearch.yml
RUN /usr/local/bin/docker-entrypoint.sh elasticsearch -p /tmp/epid & /bin/bash /utils/wait-for-it.sh -t 0 localhost:9200 -- /data/es_init.sh; kill $(cat /tmp/epid) && wait $(cat /tmp/epid); exit 0;

RUN echo 'discovery.type: single-node' >> config/elasticsearch.yml
ですが、第7世代のElasticsearchから、nodeの指定が必須です。
開発環境なのでsingle-nodeで使ってみましょう。

起動

以下のコマンドを実行してみましょう。

docker-compose build  
docker-compose up -d

確認

データが投入されていることが確認できるかと思います!

image.png

元ネタ

Stack Overflowに元ネタがあります。
このままやると、こんなエラーがでて起動できなくて。

ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

第7世代のElasticSearchで起動時にnodeの指定が必須になっているからでした。

How to add an elasticsearch index during docker build - Stack Overflow

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4