Edited at

Elasticsearch + KibanaをDocker Composeで動かす


概要



  • Docker Composeを利用して、Elasticsearchを3ノード1クラスタ構成で起動させた


  • Kibanaも立ち上げて、Elasticsearchと連携させた


  • Docker Composeの設定値について、自分の理解した内容をまとめた


GitHub


環境


  • Elasticsearch 6.3.1

  • Kibana 6.3.1

  • Docker Compose 1.22.0


必要なファイル

.

├── docker-compose.yml
├── es
│ ├── Dockerfile
│ └── config
│ ├── elasticsearch.yml # 必要に応じて設定を追記する
│ └── log4j2.properties # 必要に応じて設定を追記する
└── kibana
└── Dockerfile


動作確認


起動

以下の手順でElasticsearchKibanaのコンテナを起動させる

# リポジトリをcloneして、docker-compose.ymlが配置されているディレクトリに移動

$ git clone git@github.com:sugikeitter/elasticsearch-kibana-docker.git
$ cd elasticsearch-kibana-docker

# docker-compose.ymlからDockerイメージをビルド
$ docker-compose build

# ビルドが成功したらコンテナ起動
$ docker-compose up


Kibanaへ接続

ブラウザでhttp://localhost:5601/へアクセス


docker-compose.ymlの設定について

今回作成したdocker-compose.ymlはこちら


services


  • この下にコンテナを定義していく


  • ここで定義したservice名はコンテナ間で通信する時のホスト名のような役割になる


    • 下で出てくるcontainer_nameと違い、Docker Composeで利用される名称



  • 今回の場合だとelasticsearch01, elasticsearch02, elasticsearch03, kibana01という4つ定義している


build


  • 指定したディレクトリのDockerfileを利用してコンテナを起動させることができる


  • Elasticsearchプロセス用のコンテナは3つあるが、今回は3つとも利用するDockerイメージは同じにしているため、全て./esを指定する


    • つまり./es/Dockerfileからコンテナを起動する




  • Kibanaプロセス用のコンテナは./kibanaを指定し、./kibana/Dockerfileからコンテナを起動する


container_name



  • docker psした時に表示されるdockerコンテナの名前


  • Docker ComposeではなくDocker側の機能で、同一ホストマシン上では同じ名前のコンテナは複数起動できないので注意


environment


  • 環境変数を追加することができる


    • 今回はES_JAVA_OPTSというElasticsearchで利用されるJava起動引数を追加で設定した


    • Elasticsearchとしてはjvm.optionsを利用すればJava起動引数を一括でまとめることもできる

    • 今回はデフォルトのjvm.optionsにヒープサイズだけ追加したかった(のとenvironment設定も使って見たかった)ため、これを利用した




ulimits


  • コンテナのulimitコマンドで設定できる値をデフォルト値から上書きする


volumes


  • ホスト側のファイルをコンテナ側へ渡したりできる


  • HOST:CONTAINERの順で設定

  • トップレベルのvolumesに名前を定義することで以下のことができる


    • 複数サービスをまたがってボリュームを利用

    • ホスト側へデータを永続化




port


  • 公開するポートの設定


  • HOST:CONTAINERの順で設定

  • 今回はelasticsearch0*はそれぞれポート9200を利用してプロセスを立ち上げているが、ホストマシン経由でコンテナへアクセスする場合にlocalhost:920[1,2,3]でそれぞれのコンテナのElasticsearchへアクセスできるように設定している



    • localhost:9201->elasticsearch01:9200


    • localhost:9202->elasticsearch02:9200


    • localhost:9203->elasticsearch03:9200




networks



  • Docker Composeの中でさらにネットワークを分けられる設定

  • トップレベルのnetworksにキーを設定しておき、serviceごとのnetworksでそれを利用することができる

  • これをserviceに設定すると、同じキーを設定していないserviceからは接続できない


    • 最初kibana01networksを設定していなかったのでKibana->Elasticsearchへ接続できなくてハマった




参考