概要
-
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
で動作確認
- Elasctic Stackのver.を
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 # 必要に応じて設定を追記する
動作確認
起動
以下の手順でElasticsearch
とKibana
のコンテナを起動させる
# リポジトリを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の設定について
services
- この下にコンテナを定義していく
-
ここで定義したservice名はコンテナ間で通信する時のホスト名のような役割になる
- 下で出てくる
container_name
と違い、Docker Compose
で利用される名称 - ElasticSearchの設定である
node.name
やdiscovery.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からは接続できない
- 最初
kibana01
でnetworks
を設定していなかったのでKibana
->Elasticsearch
へ接続できなくてハマった
- 最初