DockerCompose で ES + Kibana 環境を構築しました!
前回の記事で ElasticSearch と Kibana の両方を Docker で起動する方法を紹介した。
しかし、 Docker の Link などを使って管理していたので、手動で管理するものがたくさんあり、大変だった。
なので、今回は Docker Compose を利用する方法を紹介する。
Docker Compose
今回の ElasticSearch と Kibana のように、複数のコンテナを連携して管理する方法をオーケストレーションという。
このオーケストレーションの方法はいくつかあり、今話題の Kubernetes などがあるが、今回はその一つの Docker Compose を使った。
Kubernetes の場合、複数の pods 間で service discovery を行ってくれる機能や pods のスケーリングなどの機能がある。
Docker Compose は kubernetes のような複雑な機能はないが、一つのファイルで複数のコンテナを管理できる。
なので、今回のように実験的に環境を作ることに関して言えば、 Kubernetes は必要過多なサービスになると判断して、
Docker Composeでコンテナのビルド、起動、シャットダウンなどを一括で管理できるメリットを取った。
ES + Kibana with Docker Compose
複数のファイルにまたがるので、 Github 上にリポジトリを作成しました。
ElasticSearch も Kibana も 6.4.0
を利用している。
ElasticSearch
日本語の文章を解析するためには形態素解析器を使って文章を品詞ごとに分解する必要がある。
そのため、 ElaskticSearch の Dockerfile では、形態素解析器に elasticsearch-analysis-kuromoji のパッケージをダウンロードした。
パッケージをダウンロードするために標準入力でインストールを許可する入力が必要となる場合がある。
Docker でイメージをビルドする際、標準入力できないので、今回は echo y
を利用して y
を標準入力している。
docker-compose.yml
このファイルの中で ElasticSearch と Kibana のイメージを管理している。
yaml
ファイル形式になっており、読み方は key-value として読んでいくと良いかと思う。
詳しくは、リファレンス
Compose ファイル・リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
を読むのがいいと思う。
このリポジトリ内で注意するべき点がいくつかあるので、以下にメモしておく。
build
4行目と24行目に build
key がある。
これは value 名のディレクトリに存在する Dockerfile をビルドする。
なので、ここの value は docker-compose.yml
がある構築用コンテクストのパスを指定する必要がある。
そして、各行の次の行で container-name
でコンテナ名をつけている。こちらはときにディレクトリとは関係ないので自分が好きな名前をつければ良い。
ちなみに build 済みのイメージを利用することもでき、 image
を利用し、イメージ名を指定すればよい。
詳しくは、
Compose ファイル・リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
に記載されている。
volumes
Docker は基本的にコンテナ内のデータは揮発性であり、毎回コンテナを起動すると初期状態で起動される。
つまり、前回 ElasticSearch に入力したデータは残らない。
データを保存したい場合、 docker の data volume として保存する必要がある。
今回は、 docker-compose.yml
の30行目で data volume をローカルの docker 環境に構築し、利用するようにしている。
なので、真新しい環境を構築するためには、コンテナの再構築・再起動以外に、この volume を削除する必要がある。
辞書のマウント
kuromoji で形態素解析を行うにあたり、カスタマイズした辞書を利用するように template
に記載している。
そのため、 docker-compose.yml
の8行目で辞書をマウントしている。
この辞書は csv
形式で1行が一つの形態素解析の結果を表しており、
本文中の形式,形態素解析の結果,ヨミ,品詞
の形にしなければならない。
まとめ
今回は DockerCompose を利用した ES + Kibana 環境を構築した。
ES 環境で日本語の解析を試しに行いたい場合は、お手軽に試せるので是非活用してください。
わからないところなどはコメントや Github の issue にお願いします!