Help us understand the problem. What is going on with this article?

Elasticsearch + KibanaをDocker Composeで動かす

概要

  • Docker Composeを利用して、Elasticsearchを3ノード1クラスタ構成で起動させた
  • Kibanaも立ち上げて、Elasticsearchと連携させた
  • Docker Composeの設定値について、自分の理解した内容をまとめた

更新履歴

  • 2020/06/07
    • Elasctic Stackのver.を6.3.1=>7.7へ変更
    • Docker Compose(Mac)のver.を1.22.0=>1.25.5で動作確認

GitHub

環境

  • Elasticsearch 7.7.1
  • Kibana 7.7.1
  • Docker Compose 1.25.5

必要なファイル

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

動作確認

起動

以下の手順で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で利用される名称
    • ElasticSearchの設定であるnode.namediscovery.seed_hostsの値をコンテナ間の通信する時の名前として利用するようなので、serviceの名前とこの設定値は合わせておいた方が良い
  • 今回の場合だとes01, es02, es03, 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の順で設定
  • 今回はes0*はそれぞれポート9200を利用してプロセスを立ち上げているが、ホストマシン経由でコンテナへアクセスする場合にlocalhost:920[1,2,3]でそれぞれのコンテナのElasticsearchへアクセスできるように設定している
    • localhost:9201->es01:9200
    • localhost:9202->es02:9200
    • localhost:9203->es03:9200

networks

  • Docker Composeの中でさらにネットワークを分けられる設定
  • トップレベルのnetworksにキーを設定しておき、serviceごとのnetworksでそれを利用することができる
  • これをserviceに設定すると、同じキーを設定していないserviceからは接続できない
    • 最初kibana01networksを設定していなかったのでKibana->Elasticsearchへ接続できなくてハマった

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away