この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、藤本です。
Elastic社が公式のDockerイメージの提供を開始したので早速試してみました。
詳細は下記ページをご参照ください。
Introducing Docker images for Elasticsearch and Kibana
以前からDocker HubにてElasticsearch、Kibanaが提供されていました。こちらはElastic社公式のDockerイメージではなかったのかな。。
Elastic社公式Dockerイメージ
今回、Elastic社が持つDockerレジストリサーバーでイメージの提供を開始しています。また簡単にコンテナを利用できるようにElastic社のGithubリポジトリにて、Dockerfile
、docker-compose.yml
を提供しています。
Dockerfileを利用することで、X-Packが標準インストールされるのも特徴だと思います。やっぱり一ヶ月すぎるとX-Packは使えなくなるのかな。。現在はX-Packを無効化するオプションなどはありません。
早速試してみましょう。
試してみた
環境
今回はOSX上のDockerで検証しています。
Docker for Macに関しては以下のエントリをご参照ください。
Public BetaになったDocker for Macを使ってみる
Docker for Macを利用している場合、デフォルトのメモリ制限が2GBとなっているので、メモリ制限を増やしておきましょう。OOMが発生しました。
Docker for Mac環境は問題ないですが、Linux環境で動作させる場合、vm.max_map_count
が262144
以上である必要があります。
# 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
コンテナの起動
Dockerfile
、docker-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.yml
、log4j2.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
コンテナの起動
Dockerfile
、docker-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へアクセスします。
X-PackのKibanaのログイン画面が表示されます。こちらはデフォルトのユーザー名elastic
、パスワードchangeme
でログインできます。
設定の編集
elasticsearch-dockerとは違い、コンテナ起動時の設定ファイルkibana.yml
の取り込みはありません。その代わりにコンテナの環境変数による設定が可能となっています。例えば、KibanaへのアクセスをSSL/TLS化したい時に環境変数にSERVER_SSL_CERT
、SERVER_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
ちょっと分かりづらいですが、HTTPSアクセスに変更されました。
まとめ
いかがでしたでしょうか?
Dockerfile
やdocker-compose.yml
を利用すれば、コマンド一発で起動できます。Elasticsearch、Kibanaをちょっと試してみたいなって時には良いのではないでしょうか?各種設定ファイルのカスタマイズも可能ですので、まだ現在はBeta版ですが、GAリリースされれば本番にも利用することが可能だと思います。現在はまたバージョン5系しか提供していないようです。