Elastic社公式のDockerイメージ(Beta版)が提供されるようになりました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、藤本です。

Elastic社が公式のDockerイメージの提供を開始したので早速試してみました。

詳細は下記ページをご参照ください。

Introducing Docker images for Elasticsearch and Kibana

以前からDocker HubにてElasticsearchKibanaが提供されていました。こちらはElastic社公式のDockerイメージではなかったのかな。。

Elastic社公式Dockerイメージ

今回、Elastic社が持つDockerレジストリサーバーでイメージの提供を開始しています。また簡単にコンテナを利用できるようにElastic社のGithubリポジトリにて、Dockerfiledocker-compose.ymlを提供しています。

Dockerfileを利用することで、X-Packが標準インストールされるのも特徴だと思います。やっぱり一ヶ月すぎるとX-Packは使えなくなるのかな。。現在はX-Packを無効化するオプションなどはありません。

早速試してみましょう。

試してみた

環境

今回はOSX上のDockerで検証しています。

Docker for Macに関しては以下のエントリをご参照ください。

Public BetaになったDocker for Macを使ってみる

Docker for Macを利用している場合、デフォルトのメモリ制限が2GBとなっているので、メモリ制限を増やしておきましょう。OOMが発生しました。

screenshot 2016-10-01 11.36.58

Docker for Mac環境は問題ないですが、Linux環境で動作させる場合、vm.max_map_count262144以上である必要があります。

# sysctl -a | grep vm.max_map_count
262144より小さい場合、262144に設定します。
# sysctl -w vm.max_map_count=262144

elasticsearch-docker

elasticsearch-dockerはelasticsearchクラスタを起動することができます。

事前準備

Elastic社のGithubリポジトリからDockerfileやComposeの設定ファイルをクローンします。

# git clone https://github.com/elastic/elasticsearch-docker
Cloning into 'elasticsearch-docker'...
remote: Counting objects: 197, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 197 (delta 1), reused 0 (delta 0), pack-reused 191
Receiving objects: 100% (197/197), 34.96 KiB | 0 bytes/s, done.
Resolving deltas: 100% (91/91), done.

# cd elasticsearch-docker
# ls
LICENSE            Makefile           README.md          build              docker-compose.yml tests

コンテナの起動

Dockerfiledocker-compose.ymlが用意されているので、コマンド一発で起動することができます。

事前にElasticsearchのバージョン、ノード数を指定する必要があります。指定は環境変数によって行います。

### Elasticsearch version
# export ELASTICSEARCH_VERSION=5.0.0-beta1
### Elasticsearch node count
# export ES_NODE_COUNT=2

# docker-compose up
:

# docker-compose ps
                Name                              Command               State                        Ports
--------------------------------------------------------------------------------------------------------------------------------
elasticsearchdocker_elasticsearch1_1   bin/elasticsearch -E disco ...   Up      0.0.0.0:9200->9200/tcp, 0.0.0.0:32783->9300/tcp
elasticsearchdocker_elasticsearch2_1   bin/elasticsearch -E disco ...   Up      0.0.0.0:32785->9200/tcp, 0.0.0.0:32784->9300/tcp
elasticsearchdocker_tester_1           py.test tests/test_xpack_b ...   Up

コンテナのステータスがUpになっていれば、起動完了しています。elasticsearchdocker_tester_1はテスト用のイメージとなりますので、テストが完了するとExit 0となります。

動作確認

Web APIでアクセスしてみます。

# curl localhost:9200
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

X-Packが導入されているので、ベーシック認証なしだと、エラーメッセージが返ってきます。

ベーシック認証を付与して、アクセスします。X-Pack初期ユーザーのelasticの初期パスワードがchangemeからtestpasswordにテスト用のコンテナによって書き換えられています。これが分からず、1時間ぐらい色々と調べてました。。。

# curl -u elastic:testpassword localhost:9200
{
  "name" : "5ZF7qRW",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "AJxDKsw4Tsig9eQjneDvKA",
  "version" : {
    "number" : "5.0.0-beta1",
    "build_hash" : "7eb6260",
    "build_date" : "2016-09-20T23:10:37.942Z",
    "build_snapshot" : false,
    "lucene_version" : "6.2.0"
  },
  "tagline" : "You Know, for Search"
}

Web APIでアクセスすることができました。

# curl -u elastic:testpassword localhost:9200/_cat/nodes
172.18.0.2 8 85 4 0.20 0.47 0.51 mdi * 5ZF7qRW
172.18.0.4 9 85 8 0.20 0.47 0.51 mdi - qVff5Q_ 

クラスタも組まれていますね。

設定ファイルの編集

設定ファイルのelasticsearch.ymllog4j2.propertiesを配置することが可能です。build/elasticsearch/配下に各設定ファイルを配置することでコンテナ起動時に取り込ませることが可能です。例えば、X-packのSecurityを無効化した状態で起動させます。

# vi build/elasticsearch/elasticsearch.yml
### add following line
xpack.security.enabled: false

Dockerコンテナをビルドし直して起動します。

# docker-compose down
Stopping elasticsearchdocker_elasticsearch2_1 ... done
Stopping elasticsearchdocker_tester_1 ... done
Stopping elasticsearchdocker_elasticsearch1_1 ... done
Removing elasticsearchdocker_elasticsearch2_1 ... done
Removing elasticsearchdocker_tester_1 ... done
Removing elasticsearchdocker_elasticsearch1_1 ... done
Removing network elasticsearchdocker_default

# docker-compose up
:

ベーシック認証なしでアクセスします。

# curl localhost:9200
{
  "name" : "5ZF7qRW",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "AJxDKsw4Tsig9eQjneDvKA",
  "version" : {
    "number" : "5.0.0-beta1",
    "build_hash" : "7eb6260",
    "build_date" : "2016-09-20T23:10:37.942Z",
    "build_snapshot" : false,
    "lucene_version" : "6.2.0"
  },
  "tagline" : "You Know, for Search"
}

ベーシック認証なしでアクセスできました。設定ファイルが取り込まれていることが分かります。ある程度のカスタマイズ性があり、コマンド一発でElasticsearchクラスタを起動できるのは嬉しいですね。

kibana-docker

kibana-dockerはKibana、Elasticsearchそれぞれのコンテナを起動することができます。

事前準備

elasticsearch-docker同様、Elastic社のGithubリポジトリからDockerfileやComposeの設定ファイルをクローンします。

# git clone https://github.com/elastic/kibana-docker
Cloning into 'kibana-docker'...
remote: Counting objects: 158, done.
remote: Total 158 (delta 0), reused 0 (delta 0), pack-reused 158
Receiving objects: 100% (158/158), 28.25 KiB | 0 bytes/s, done.
Resolving deltas: 100% (57/57), done.

# cd kibana-docker
# ls
LICENSE            Makefile           README.md          bin                build              docker-compose.yml tests

コンテナの起動

Dockerfiledocker-compose.ymlが用意されているので、コマンド一発で起動することができます。

事前にKibanaのバージョンを指定する必要があります。指定は環境変数によって行います。

### Kibana version
# export KIBANA_VERSION=5.0.0-beta1

# docker-compose up
:

# docker-compose ps
            Name                          Command               State            Ports
-----------------------------------------------------------------------------------------------
kibanadocker_elasticsearch_1   /bin/sh bin/elasticsearch        Up       9200/tcp, 9300/tcp
kibanadocker_kibana_1          /bin/sh -c /usr/local/bin/ ...   Up       0.0.0.0:5601->5601/tcp
kibanadocker_tester_1          /bin/sh -c py.test               Exit 0

コンテナのステータスがUpになっていれば、起動完了しています。kibanadocker_tester_1はテスト用のイメージとなりますので、テストが完了するとExit 0となります。

動作確認

WebブラウザからKibanaへアクセスします。

Kibana

X-PackのKibanaのログイン画面が表示されます。こちらはデフォルトのユーザー名elastic、パスワードchangemeでログインできます。

Kibana

設定の編集

elasticsearch-dockerとは違い、コンテナ起動時の設定ファイルkibana.ymlの取り込みはありません。その代わりにコンテナの環境変数による設定が可能となっています。例えば、KibanaへのアクセスをSSL/TLS化したい時に環境変数にSERVER_SSL_CERTSERVER_SSL_CERTを与えます。Kibanaのオプションキーを大文字にし、.区切りを_区切りに変更したものを環境変数のキーとして与えます。

docker-composeを利用する場合、docker-compose.ymlを以下のように修正します。

# vi docker-compose.yml
:
services:
  kibana:
:
### add following line
    environment:
      - SERVER_SSL_CERT=/opt/kibana/config/kibana.example.org.crt
      - SERVER_SSL_KEY=/opt/kibana/config/kibana.example.org.key
:

Dockerコンテナを再起動します。

# docker-compose restart

Kibana

ちょっと分かりづらいですが、HTTPSアクセスに変更されました。

まとめ

いかがでしたでしょうか?

Dockerfiledocker-compose.ymlを利用すれば、コマンド一発で起動できます。Elasticsearch、Kibanaをちょっと試してみたいなって時には良いのではないでしょうか?各種設定ファイルのカスタマイズも可能ですので、まだ現在はBeta版ですが、GAリリースされれば本番にも利用することが可能だと思います。現在はまたバージョン5系しか提供していないようです。